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 Simple(PathSegmentSimple),
1654 WithGenericArgs(PathSegmentWithGenericArgs),
1655 Missing(PathSegmentMissing),
1656}
1657#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1658pub struct PathSegmentPtr(pub SyntaxStablePtrId);
1659impl TypedStablePtr for PathSegmentPtr {
1660 type SyntaxNode = PathSegment;
1661 fn untyped(&self) -> SyntaxStablePtrId {
1662 self.0
1663 }
1664 fn lookup(&self, db: &dyn SyntaxGroup) -> PathSegment {
1665 PathSegment::from_syntax_node(db, self.0.lookup(db))
1666 }
1667}
1668impl From<PathSegmentPtr> for SyntaxStablePtrId {
1669 fn from(ptr: PathSegmentPtr) -> Self {
1670 ptr.untyped()
1671 }
1672}
1673impl From<PathSegmentSimplePtr> for PathSegmentPtr {
1674 fn from(value: PathSegmentSimplePtr) -> Self {
1675 Self(value.0)
1676 }
1677}
1678impl From<PathSegmentWithGenericArgsPtr> for PathSegmentPtr {
1679 fn from(value: PathSegmentWithGenericArgsPtr) -> Self {
1680 Self(value.0)
1681 }
1682}
1683impl From<PathSegmentMissingPtr> for PathSegmentPtr {
1684 fn from(value: PathSegmentMissingPtr) -> Self {
1685 Self(value.0)
1686 }
1687}
1688impl From<PathSegmentSimpleGreen> for PathSegmentGreen {
1689 fn from(value: PathSegmentSimpleGreen) -> Self {
1690 Self(value.0)
1691 }
1692}
1693impl From<PathSegmentWithGenericArgsGreen> for PathSegmentGreen {
1694 fn from(value: PathSegmentWithGenericArgsGreen) -> Self {
1695 Self(value.0)
1696 }
1697}
1698impl From<PathSegmentMissingGreen> for PathSegmentGreen {
1699 fn from(value: PathSegmentMissingGreen) -> Self {
1700 Self(value.0)
1701 }
1702}
1703#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1704pub struct PathSegmentGreen(pub GreenId);
1705impl TypedSyntaxNode for PathSegment {
1706 const OPTIONAL_KIND: Option<SyntaxKind> = None;
1707 type StablePtr = PathSegmentPtr;
1708 type Green = PathSegmentGreen;
1709 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1710 PathSegmentGreen(PathSegmentMissing::missing(db).0)
1711 }
1712 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1713 let kind = node.kind(db);
1714 match kind {
1715 SyntaxKind::PathSegmentSimple => {
1716 PathSegment::Simple(PathSegmentSimple::from_syntax_node(db, node))
1717 }
1718 SyntaxKind::PathSegmentWithGenericArgs => {
1719 PathSegment::WithGenericArgs(PathSegmentWithGenericArgs::from_syntax_node(db, node))
1720 }
1721 SyntaxKind::PathSegmentMissing => {
1722 PathSegment::Missing(PathSegmentMissing::from_syntax_node(db, node))
1723 }
1724 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "PathSegment"),
1725 }
1726 }
1727 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1728 let kind = node.kind(db);
1729 match kind {
1730 SyntaxKind::PathSegmentSimple => {
1731 Some(PathSegment::Simple(PathSegmentSimple::from_syntax_node(db, node)))
1732 }
1733 SyntaxKind::PathSegmentWithGenericArgs => Some(PathSegment::WithGenericArgs(
1734 PathSegmentWithGenericArgs::from_syntax_node(db, node),
1735 )),
1736 SyntaxKind::PathSegmentMissing => {
1737 Some(PathSegment::Missing(PathSegmentMissing::from_syntax_node(db, node)))
1738 }
1739 _ => None,
1740 }
1741 }
1742 fn as_syntax_node(&self) -> SyntaxNode {
1743 match self {
1744 PathSegment::Simple(x) => x.as_syntax_node(),
1745 PathSegment::WithGenericArgs(x) => x.as_syntax_node(),
1746 PathSegment::Missing(x) => x.as_syntax_node(),
1747 }
1748 }
1749 fn stable_ptr(&self) -> Self::StablePtr {
1750 PathSegmentPtr(self.as_syntax_node().0.stable_ptr)
1751 }
1752}
1753impl From<&PathSegment> for SyntaxStablePtrId {
1754 fn from(node: &PathSegment) -> Self {
1755 node.stable_ptr().untyped()
1756 }
1757}
1758impl PathSegment {
1759 pub fn is_variant(kind: SyntaxKind) -> bool {
1761 matches!(
1762 kind,
1763 SyntaxKind::PathSegmentSimple
1764 | SyntaxKind::PathSegmentWithGenericArgs
1765 | SyntaxKind::PathSegmentMissing
1766 )
1767 }
1768}
1769#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1770pub struct PathSegmentSimple {
1771 node: SyntaxNode,
1772 children: Arc<[SyntaxNode]>,
1773}
1774impl PathSegmentSimple {
1775 pub const INDEX_IDENT: usize = 0;
1776 pub fn new_green(
1777 db: &dyn SyntaxGroup,
1778 ident: TerminalIdentifierGreen,
1779 ) -> PathSegmentSimpleGreen {
1780 let children: Vec<GreenId> = vec![ident.0];
1781 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
1782 PathSegmentSimpleGreen(
1783 Arc::new(GreenNode {
1784 kind: SyntaxKind::PathSegmentSimple,
1785 details: GreenNodeDetails::Node { children, width },
1786 })
1787 .intern(db),
1788 )
1789 }
1790}
1791impl PathSegmentSimple {
1792 pub fn ident(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
1793 TerminalIdentifier::from_syntax_node(db, self.children[0].clone())
1794 }
1795}
1796#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1797pub struct PathSegmentSimplePtr(pub SyntaxStablePtrId);
1798impl PathSegmentSimplePtr {}
1799impl TypedStablePtr for PathSegmentSimplePtr {
1800 type SyntaxNode = PathSegmentSimple;
1801 fn untyped(&self) -> SyntaxStablePtrId {
1802 self.0
1803 }
1804 fn lookup(&self, db: &dyn SyntaxGroup) -> PathSegmentSimple {
1805 PathSegmentSimple::from_syntax_node(db, self.0.lookup(db))
1806 }
1807}
1808impl From<PathSegmentSimplePtr> for SyntaxStablePtrId {
1809 fn from(ptr: PathSegmentSimplePtr) -> Self {
1810 ptr.untyped()
1811 }
1812}
1813#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1814pub struct PathSegmentSimpleGreen(pub GreenId);
1815impl TypedSyntaxNode for PathSegmentSimple {
1816 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PathSegmentSimple);
1817 type StablePtr = PathSegmentSimplePtr;
1818 type Green = PathSegmentSimpleGreen;
1819 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1820 PathSegmentSimpleGreen(
1821 Arc::new(GreenNode {
1822 kind: SyntaxKind::PathSegmentSimple,
1823 details: GreenNodeDetails::Node {
1824 children: vec![TerminalIdentifier::missing(db).0],
1825 width: TextWidth::default(),
1826 },
1827 })
1828 .intern(db),
1829 )
1830 }
1831 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1832 let kind = node.kind(db);
1833 assert_eq!(
1834 kind,
1835 SyntaxKind::PathSegmentSimple,
1836 "Unexpected SyntaxKind {:?}. Expected {:?}.",
1837 kind,
1838 SyntaxKind::PathSegmentSimple
1839 );
1840 let children = db.get_children(node.clone());
1841 Self { node, children }
1842 }
1843 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1844 let kind = node.kind(db);
1845 if kind == SyntaxKind::PathSegmentSimple {
1846 Some(Self::from_syntax_node(db, node))
1847 } else {
1848 None
1849 }
1850 }
1851 fn as_syntax_node(&self) -> SyntaxNode {
1852 self.node.clone()
1853 }
1854 fn stable_ptr(&self) -> Self::StablePtr {
1855 PathSegmentSimplePtr(self.node.0.stable_ptr)
1856 }
1857}
1858impl From<&PathSegmentSimple> for SyntaxStablePtrId {
1859 fn from(node: &PathSegmentSimple) -> Self {
1860 node.stable_ptr().untyped()
1861 }
1862}
1863#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1864pub enum OptionTerminalColonColon {
1865 Empty(OptionTerminalColonColonEmpty),
1866 TerminalColonColon(TerminalColonColon),
1867}
1868#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1869pub struct OptionTerminalColonColonPtr(pub SyntaxStablePtrId);
1870impl TypedStablePtr for OptionTerminalColonColonPtr {
1871 type SyntaxNode = OptionTerminalColonColon;
1872 fn untyped(&self) -> SyntaxStablePtrId {
1873 self.0
1874 }
1875 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalColonColon {
1876 OptionTerminalColonColon::from_syntax_node(db, self.0.lookup(db))
1877 }
1878}
1879impl From<OptionTerminalColonColonPtr> for SyntaxStablePtrId {
1880 fn from(ptr: OptionTerminalColonColonPtr) -> Self {
1881 ptr.untyped()
1882 }
1883}
1884impl From<OptionTerminalColonColonEmptyPtr> for OptionTerminalColonColonPtr {
1885 fn from(value: OptionTerminalColonColonEmptyPtr) -> Self {
1886 Self(value.0)
1887 }
1888}
1889impl From<TerminalColonColonPtr> for OptionTerminalColonColonPtr {
1890 fn from(value: TerminalColonColonPtr) -> Self {
1891 Self(value.0)
1892 }
1893}
1894impl From<OptionTerminalColonColonEmptyGreen> for OptionTerminalColonColonGreen {
1895 fn from(value: OptionTerminalColonColonEmptyGreen) -> Self {
1896 Self(value.0)
1897 }
1898}
1899impl From<TerminalColonColonGreen> for OptionTerminalColonColonGreen {
1900 fn from(value: TerminalColonColonGreen) -> Self {
1901 Self(value.0)
1902 }
1903}
1904#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1905pub struct OptionTerminalColonColonGreen(pub GreenId);
1906impl TypedSyntaxNode for OptionTerminalColonColon {
1907 const OPTIONAL_KIND: Option<SyntaxKind> = None;
1908 type StablePtr = OptionTerminalColonColonPtr;
1909 type Green = OptionTerminalColonColonGreen;
1910 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1911 panic!("No missing variant.");
1912 }
1913 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1914 let kind = node.kind(db);
1915 match kind {
1916 SyntaxKind::OptionTerminalColonColonEmpty => OptionTerminalColonColon::Empty(
1917 OptionTerminalColonColonEmpty::from_syntax_node(db, node),
1918 ),
1919 SyntaxKind::TerminalColonColon => OptionTerminalColonColon::TerminalColonColon(
1920 TerminalColonColon::from_syntax_node(db, node),
1921 ),
1922 _ => panic!(
1923 "Unexpected syntax kind {:?} when constructing {}.",
1924 kind, "OptionTerminalColonColon"
1925 ),
1926 }
1927 }
1928 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1929 let kind = node.kind(db);
1930 match kind {
1931 SyntaxKind::OptionTerminalColonColonEmpty => Some(OptionTerminalColonColon::Empty(
1932 OptionTerminalColonColonEmpty::from_syntax_node(db, node),
1933 )),
1934 SyntaxKind::TerminalColonColon => Some(OptionTerminalColonColon::TerminalColonColon(
1935 TerminalColonColon::from_syntax_node(db, node),
1936 )),
1937 _ => None,
1938 }
1939 }
1940 fn as_syntax_node(&self) -> SyntaxNode {
1941 match self {
1942 OptionTerminalColonColon::Empty(x) => x.as_syntax_node(),
1943 OptionTerminalColonColon::TerminalColonColon(x) => x.as_syntax_node(),
1944 }
1945 }
1946 fn stable_ptr(&self) -> Self::StablePtr {
1947 OptionTerminalColonColonPtr(self.as_syntax_node().0.stable_ptr)
1948 }
1949}
1950impl From<&OptionTerminalColonColon> for SyntaxStablePtrId {
1951 fn from(node: &OptionTerminalColonColon) -> Self {
1952 node.stable_ptr().untyped()
1953 }
1954}
1955impl OptionTerminalColonColon {
1956 pub fn is_variant(kind: SyntaxKind) -> bool {
1958 matches!(kind, SyntaxKind::OptionTerminalColonColonEmpty | SyntaxKind::TerminalColonColon)
1959 }
1960}
1961#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1962pub struct OptionTerminalColonColonEmpty {
1963 node: SyntaxNode,
1964 children: Arc<[SyntaxNode]>,
1965}
1966impl OptionTerminalColonColonEmpty {
1967 pub fn new_green(db: &dyn SyntaxGroup) -> OptionTerminalColonColonEmptyGreen {
1968 let children: Vec<GreenId> = vec![];
1969 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
1970 OptionTerminalColonColonEmptyGreen(
1971 Arc::new(GreenNode {
1972 kind: SyntaxKind::OptionTerminalColonColonEmpty,
1973 details: GreenNodeDetails::Node { children, width },
1974 })
1975 .intern(db),
1976 )
1977 }
1978}
1979impl OptionTerminalColonColonEmpty {}
1980#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1981pub struct OptionTerminalColonColonEmptyPtr(pub SyntaxStablePtrId);
1982impl OptionTerminalColonColonEmptyPtr {}
1983impl TypedStablePtr for OptionTerminalColonColonEmptyPtr {
1984 type SyntaxNode = OptionTerminalColonColonEmpty;
1985 fn untyped(&self) -> SyntaxStablePtrId {
1986 self.0
1987 }
1988 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalColonColonEmpty {
1989 OptionTerminalColonColonEmpty::from_syntax_node(db, self.0.lookup(db))
1990 }
1991}
1992impl From<OptionTerminalColonColonEmptyPtr> for SyntaxStablePtrId {
1993 fn from(ptr: OptionTerminalColonColonEmptyPtr) -> Self {
1994 ptr.untyped()
1995 }
1996}
1997#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1998pub struct OptionTerminalColonColonEmptyGreen(pub GreenId);
1999impl TypedSyntaxNode for OptionTerminalColonColonEmpty {
2000 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionTerminalColonColonEmpty);
2001 type StablePtr = OptionTerminalColonColonEmptyPtr;
2002 type Green = OptionTerminalColonColonEmptyGreen;
2003 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2004 OptionTerminalColonColonEmptyGreen(
2005 Arc::new(GreenNode {
2006 kind: SyntaxKind::OptionTerminalColonColonEmpty,
2007 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
2008 })
2009 .intern(db),
2010 )
2011 }
2012 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2013 let kind = node.kind(db);
2014 assert_eq!(
2015 kind,
2016 SyntaxKind::OptionTerminalColonColonEmpty,
2017 "Unexpected SyntaxKind {:?}. Expected {:?}.",
2018 kind,
2019 SyntaxKind::OptionTerminalColonColonEmpty
2020 );
2021 let children = db.get_children(node.clone());
2022 Self { node, children }
2023 }
2024 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2025 let kind = node.kind(db);
2026 if kind == SyntaxKind::OptionTerminalColonColonEmpty {
2027 Some(Self::from_syntax_node(db, node))
2028 } else {
2029 None
2030 }
2031 }
2032 fn as_syntax_node(&self) -> SyntaxNode {
2033 self.node.clone()
2034 }
2035 fn stable_ptr(&self) -> Self::StablePtr {
2036 OptionTerminalColonColonEmptyPtr(self.node.0.stable_ptr)
2037 }
2038}
2039impl From<&OptionTerminalColonColonEmpty> for SyntaxStablePtrId {
2040 fn from(node: &OptionTerminalColonColonEmpty) -> Self {
2041 node.stable_ptr().untyped()
2042 }
2043}
2044#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2045pub struct PathSegmentWithGenericArgs {
2046 node: SyntaxNode,
2047 children: Arc<[SyntaxNode]>,
2048}
2049impl PathSegmentWithGenericArgs {
2050 pub const INDEX_IDENT: usize = 0;
2051 pub const INDEX_SEPARATOR: usize = 1;
2052 pub const INDEX_GENERIC_ARGS: usize = 2;
2053 pub fn new_green(
2054 db: &dyn SyntaxGroup,
2055 ident: TerminalIdentifierGreen,
2056 separator: OptionTerminalColonColonGreen,
2057 generic_args: GenericArgsGreen,
2058 ) -> PathSegmentWithGenericArgsGreen {
2059 let children: Vec<GreenId> = vec![ident.0, separator.0, generic_args.0];
2060 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
2061 PathSegmentWithGenericArgsGreen(
2062 Arc::new(GreenNode {
2063 kind: SyntaxKind::PathSegmentWithGenericArgs,
2064 details: GreenNodeDetails::Node { children, width },
2065 })
2066 .intern(db),
2067 )
2068 }
2069}
2070impl PathSegmentWithGenericArgs {
2071 pub fn ident(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
2072 TerminalIdentifier::from_syntax_node(db, self.children[0].clone())
2073 }
2074 pub fn separator(&self, db: &dyn SyntaxGroup) -> OptionTerminalColonColon {
2075 OptionTerminalColonColon::from_syntax_node(db, self.children[1].clone())
2076 }
2077 pub fn generic_args(&self, db: &dyn SyntaxGroup) -> GenericArgs {
2078 GenericArgs::from_syntax_node(db, self.children[2].clone())
2079 }
2080}
2081#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2082pub struct PathSegmentWithGenericArgsPtr(pub SyntaxStablePtrId);
2083impl PathSegmentWithGenericArgsPtr {}
2084impl TypedStablePtr for PathSegmentWithGenericArgsPtr {
2085 type SyntaxNode = PathSegmentWithGenericArgs;
2086 fn untyped(&self) -> SyntaxStablePtrId {
2087 self.0
2088 }
2089 fn lookup(&self, db: &dyn SyntaxGroup) -> PathSegmentWithGenericArgs {
2090 PathSegmentWithGenericArgs::from_syntax_node(db, self.0.lookup(db))
2091 }
2092}
2093impl From<PathSegmentWithGenericArgsPtr> for SyntaxStablePtrId {
2094 fn from(ptr: PathSegmentWithGenericArgsPtr) -> Self {
2095 ptr.untyped()
2096 }
2097}
2098#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2099pub struct PathSegmentWithGenericArgsGreen(pub GreenId);
2100impl TypedSyntaxNode for PathSegmentWithGenericArgs {
2101 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PathSegmentWithGenericArgs);
2102 type StablePtr = PathSegmentWithGenericArgsPtr;
2103 type Green = PathSegmentWithGenericArgsGreen;
2104 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2105 PathSegmentWithGenericArgsGreen(
2106 Arc::new(GreenNode {
2107 kind: SyntaxKind::PathSegmentWithGenericArgs,
2108 details: GreenNodeDetails::Node {
2109 children: vec![
2110 TerminalIdentifier::missing(db).0,
2111 OptionTerminalColonColon::missing(db).0,
2112 GenericArgs::missing(db).0,
2113 ],
2114 width: TextWidth::default(),
2115 },
2116 })
2117 .intern(db),
2118 )
2119 }
2120 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2121 let kind = node.kind(db);
2122 assert_eq!(
2123 kind,
2124 SyntaxKind::PathSegmentWithGenericArgs,
2125 "Unexpected SyntaxKind {:?}. Expected {:?}.",
2126 kind,
2127 SyntaxKind::PathSegmentWithGenericArgs
2128 );
2129 let children = db.get_children(node.clone());
2130 Self { node, children }
2131 }
2132 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2133 let kind = node.kind(db);
2134 if kind == SyntaxKind::PathSegmentWithGenericArgs {
2135 Some(Self::from_syntax_node(db, node))
2136 } else {
2137 None
2138 }
2139 }
2140 fn as_syntax_node(&self) -> SyntaxNode {
2141 self.node.clone()
2142 }
2143 fn stable_ptr(&self) -> Self::StablePtr {
2144 PathSegmentWithGenericArgsPtr(self.node.0.stable_ptr)
2145 }
2146}
2147impl From<&PathSegmentWithGenericArgs> for SyntaxStablePtrId {
2148 fn from(node: &PathSegmentWithGenericArgs) -> Self {
2149 node.stable_ptr().untyped()
2150 }
2151}
2152#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2153pub struct PathSegmentMissing {
2154 node: SyntaxNode,
2155 children: Arc<[SyntaxNode]>,
2156}
2157impl PathSegmentMissing {
2158 pub const INDEX_IDENT: usize = 0;
2159 pub fn new_green(
2160 db: &dyn SyntaxGroup,
2161 ident: TerminalIdentifierGreen,
2162 ) -> PathSegmentMissingGreen {
2163 let children: Vec<GreenId> = vec![ident.0];
2164 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
2165 PathSegmentMissingGreen(
2166 Arc::new(GreenNode {
2167 kind: SyntaxKind::PathSegmentMissing,
2168 details: GreenNodeDetails::Node { children, width },
2169 })
2170 .intern(db),
2171 )
2172 }
2173}
2174impl PathSegmentMissing {
2175 pub fn ident(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
2176 TerminalIdentifier::from_syntax_node(db, self.children[0].clone())
2177 }
2178}
2179#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2180pub struct PathSegmentMissingPtr(pub SyntaxStablePtrId);
2181impl PathSegmentMissingPtr {}
2182impl TypedStablePtr for PathSegmentMissingPtr {
2183 type SyntaxNode = PathSegmentMissing;
2184 fn untyped(&self) -> SyntaxStablePtrId {
2185 self.0
2186 }
2187 fn lookup(&self, db: &dyn SyntaxGroup) -> PathSegmentMissing {
2188 PathSegmentMissing::from_syntax_node(db, self.0.lookup(db))
2189 }
2190}
2191impl From<PathSegmentMissingPtr> for SyntaxStablePtrId {
2192 fn from(ptr: PathSegmentMissingPtr) -> Self {
2193 ptr.untyped()
2194 }
2195}
2196#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2197pub struct PathSegmentMissingGreen(pub GreenId);
2198impl TypedSyntaxNode for PathSegmentMissing {
2199 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PathSegmentMissing);
2200 type StablePtr = PathSegmentMissingPtr;
2201 type Green = PathSegmentMissingGreen;
2202 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2203 PathSegmentMissingGreen(
2204 Arc::new(GreenNode {
2205 kind: SyntaxKind::PathSegmentMissing,
2206 details: GreenNodeDetails::Node {
2207 children: vec![TerminalIdentifier::missing(db).0],
2208 width: TextWidth::default(),
2209 },
2210 })
2211 .intern(db),
2212 )
2213 }
2214 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2215 let kind = node.kind(db);
2216 assert_eq!(
2217 kind,
2218 SyntaxKind::PathSegmentMissing,
2219 "Unexpected SyntaxKind {:?}. Expected {:?}.",
2220 kind,
2221 SyntaxKind::PathSegmentMissing
2222 );
2223 let children = db.get_children(node.clone());
2224 Self { node, children }
2225 }
2226 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2227 let kind = node.kind(db);
2228 if kind == SyntaxKind::PathSegmentMissing {
2229 Some(Self::from_syntax_node(db, node))
2230 } else {
2231 None
2232 }
2233 }
2234 fn as_syntax_node(&self) -> SyntaxNode {
2235 self.node.clone()
2236 }
2237 fn stable_ptr(&self) -> Self::StablePtr {
2238 PathSegmentMissingPtr(self.node.0.stable_ptr)
2239 }
2240}
2241impl From<&PathSegmentMissing> for SyntaxStablePtrId {
2242 fn from(node: &PathSegmentMissing) -> Self {
2243 node.stable_ptr().untyped()
2244 }
2245}
2246#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2247pub struct ExprPath(ElementList<PathSegment, 2>);
2248impl Deref for ExprPath {
2249 type Target = ElementList<PathSegment, 2>;
2250 fn deref(&self) -> &Self::Target {
2251 &self.0
2252 }
2253}
2254impl ExprPath {
2255 pub fn new_green(
2256 db: &dyn SyntaxGroup,
2257 children: Vec<ExprPathElementOrSeparatorGreen>,
2258 ) -> ExprPathGreen {
2259 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
2260 ExprPathGreen(
2261 Arc::new(GreenNode {
2262 kind: SyntaxKind::ExprPath,
2263 details: GreenNodeDetails::Node {
2264 children: children.iter().map(|x| x.id()).collect(),
2265 width,
2266 },
2267 })
2268 .intern(db),
2269 )
2270 }
2271}
2272#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2273pub struct ExprPathPtr(pub SyntaxStablePtrId);
2274impl TypedStablePtr for ExprPathPtr {
2275 type SyntaxNode = ExprPath;
2276 fn untyped(&self) -> SyntaxStablePtrId {
2277 self.0
2278 }
2279 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprPath {
2280 ExprPath::from_syntax_node(db, self.0.lookup(db))
2281 }
2282}
2283impl From<ExprPathPtr> for SyntaxStablePtrId {
2284 fn from(ptr: ExprPathPtr) -> Self {
2285 ptr.untyped()
2286 }
2287}
2288#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2289pub enum ExprPathElementOrSeparatorGreen {
2290 Separator(TerminalColonColonGreen),
2291 Element(PathSegmentGreen),
2292}
2293impl From<TerminalColonColonGreen> for ExprPathElementOrSeparatorGreen {
2294 fn from(value: TerminalColonColonGreen) -> Self {
2295 ExprPathElementOrSeparatorGreen::Separator(value)
2296 }
2297}
2298impl From<PathSegmentGreen> for ExprPathElementOrSeparatorGreen {
2299 fn from(value: PathSegmentGreen) -> Self {
2300 ExprPathElementOrSeparatorGreen::Element(value)
2301 }
2302}
2303impl ExprPathElementOrSeparatorGreen {
2304 fn id(&self) -> GreenId {
2305 match self {
2306 ExprPathElementOrSeparatorGreen::Separator(green) => green.0,
2307 ExprPathElementOrSeparatorGreen::Element(green) => green.0,
2308 }
2309 }
2310}
2311#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2312pub struct ExprPathGreen(pub GreenId);
2313impl TypedSyntaxNode for ExprPath {
2314 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprPath);
2315 type StablePtr = ExprPathPtr;
2316 type Green = ExprPathGreen;
2317 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2318 ExprPathGreen(
2319 Arc::new(GreenNode {
2320 kind: SyntaxKind::ExprPath,
2321 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
2322 })
2323 .intern(db),
2324 )
2325 }
2326 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2327 Self(ElementList::new(node))
2328 }
2329 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2330 if node.kind(db) == SyntaxKind::ExprPath {
2331 Some(Self(ElementList::new(node)))
2332 } else {
2333 None
2334 }
2335 }
2336 fn as_syntax_node(&self) -> SyntaxNode {
2337 self.node.clone()
2338 }
2339 fn stable_ptr(&self) -> Self::StablePtr {
2340 ExprPathPtr(self.node.0.stable_ptr)
2341 }
2342}
2343impl From<&ExprPath> for SyntaxStablePtrId {
2344 fn from(node: &ExprPath) -> Self {
2345 node.stable_ptr().untyped()
2346 }
2347}
2348#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2349pub struct ExprParenthesized {
2350 node: SyntaxNode,
2351 children: Arc<[SyntaxNode]>,
2352}
2353impl ExprParenthesized {
2354 pub const INDEX_LPAREN: usize = 0;
2355 pub const INDEX_EXPR: usize = 1;
2356 pub const INDEX_RPAREN: usize = 2;
2357 pub fn new_green(
2358 db: &dyn SyntaxGroup,
2359 lparen: TerminalLParenGreen,
2360 expr: ExprGreen,
2361 rparen: TerminalRParenGreen,
2362 ) -> ExprParenthesizedGreen {
2363 let children: Vec<GreenId> = vec![lparen.0, expr.0, rparen.0];
2364 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
2365 ExprParenthesizedGreen(
2366 Arc::new(GreenNode {
2367 kind: SyntaxKind::ExprParenthesized,
2368 details: GreenNodeDetails::Node { children, width },
2369 })
2370 .intern(db),
2371 )
2372 }
2373}
2374impl ExprParenthesized {
2375 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
2376 TerminalLParen::from_syntax_node(db, self.children[0].clone())
2377 }
2378 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
2379 Expr::from_syntax_node(db, self.children[1].clone())
2380 }
2381 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
2382 TerminalRParen::from_syntax_node(db, self.children[2].clone())
2383 }
2384}
2385#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2386pub struct ExprParenthesizedPtr(pub SyntaxStablePtrId);
2387impl ExprParenthesizedPtr {}
2388impl TypedStablePtr for ExprParenthesizedPtr {
2389 type SyntaxNode = ExprParenthesized;
2390 fn untyped(&self) -> SyntaxStablePtrId {
2391 self.0
2392 }
2393 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprParenthesized {
2394 ExprParenthesized::from_syntax_node(db, self.0.lookup(db))
2395 }
2396}
2397impl From<ExprParenthesizedPtr> for SyntaxStablePtrId {
2398 fn from(ptr: ExprParenthesizedPtr) -> Self {
2399 ptr.untyped()
2400 }
2401}
2402#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2403pub struct ExprParenthesizedGreen(pub GreenId);
2404impl TypedSyntaxNode for ExprParenthesized {
2405 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprParenthesized);
2406 type StablePtr = ExprParenthesizedPtr;
2407 type Green = ExprParenthesizedGreen;
2408 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2409 ExprParenthesizedGreen(
2410 Arc::new(GreenNode {
2411 kind: SyntaxKind::ExprParenthesized,
2412 details: GreenNodeDetails::Node {
2413 children: vec![
2414 TerminalLParen::missing(db).0,
2415 Expr::missing(db).0,
2416 TerminalRParen::missing(db).0,
2417 ],
2418 width: TextWidth::default(),
2419 },
2420 })
2421 .intern(db),
2422 )
2423 }
2424 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2425 let kind = node.kind(db);
2426 assert_eq!(
2427 kind,
2428 SyntaxKind::ExprParenthesized,
2429 "Unexpected SyntaxKind {:?}. Expected {:?}.",
2430 kind,
2431 SyntaxKind::ExprParenthesized
2432 );
2433 let children = db.get_children(node.clone());
2434 Self { node, children }
2435 }
2436 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2437 let kind = node.kind(db);
2438 if kind == SyntaxKind::ExprParenthesized {
2439 Some(Self::from_syntax_node(db, node))
2440 } else {
2441 None
2442 }
2443 }
2444 fn as_syntax_node(&self) -> SyntaxNode {
2445 self.node.clone()
2446 }
2447 fn stable_ptr(&self) -> Self::StablePtr {
2448 ExprParenthesizedPtr(self.node.0.stable_ptr)
2449 }
2450}
2451impl From<&ExprParenthesized> for SyntaxStablePtrId {
2452 fn from(node: &ExprParenthesized) -> Self {
2453 node.stable_ptr().untyped()
2454 }
2455}
2456#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2457pub struct ExprUnary {
2458 node: SyntaxNode,
2459 children: Arc<[SyntaxNode]>,
2460}
2461impl ExprUnary {
2462 pub const INDEX_OP: usize = 0;
2463 pub const INDEX_EXPR: usize = 1;
2464 pub fn new_green(
2465 db: &dyn SyntaxGroup,
2466 op: UnaryOperatorGreen,
2467 expr: ExprGreen,
2468 ) -> ExprUnaryGreen {
2469 let children: Vec<GreenId> = vec![op.0, expr.0];
2470 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
2471 ExprUnaryGreen(
2472 Arc::new(GreenNode {
2473 kind: SyntaxKind::ExprUnary,
2474 details: GreenNodeDetails::Node { children, width },
2475 })
2476 .intern(db),
2477 )
2478 }
2479}
2480impl ExprUnary {
2481 pub fn op(&self, db: &dyn SyntaxGroup) -> UnaryOperator {
2482 UnaryOperator::from_syntax_node(db, self.children[0].clone())
2483 }
2484 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
2485 Expr::from_syntax_node(db, self.children[1].clone())
2486 }
2487}
2488#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2489pub struct ExprUnaryPtr(pub SyntaxStablePtrId);
2490impl ExprUnaryPtr {}
2491impl TypedStablePtr for ExprUnaryPtr {
2492 type SyntaxNode = ExprUnary;
2493 fn untyped(&self) -> SyntaxStablePtrId {
2494 self.0
2495 }
2496 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprUnary {
2497 ExprUnary::from_syntax_node(db, self.0.lookup(db))
2498 }
2499}
2500impl From<ExprUnaryPtr> for SyntaxStablePtrId {
2501 fn from(ptr: ExprUnaryPtr) -> Self {
2502 ptr.untyped()
2503 }
2504}
2505#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2506pub struct ExprUnaryGreen(pub GreenId);
2507impl TypedSyntaxNode for ExprUnary {
2508 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprUnary);
2509 type StablePtr = ExprUnaryPtr;
2510 type Green = ExprUnaryGreen;
2511 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2512 ExprUnaryGreen(
2513 Arc::new(GreenNode {
2514 kind: SyntaxKind::ExprUnary,
2515 details: GreenNodeDetails::Node {
2516 children: vec![UnaryOperator::missing(db).0, Expr::missing(db).0],
2517 width: TextWidth::default(),
2518 },
2519 })
2520 .intern(db),
2521 )
2522 }
2523 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2524 let kind = node.kind(db);
2525 assert_eq!(
2526 kind,
2527 SyntaxKind::ExprUnary,
2528 "Unexpected SyntaxKind {:?}. Expected {:?}.",
2529 kind,
2530 SyntaxKind::ExprUnary
2531 );
2532 let children = db.get_children(node.clone());
2533 Self { node, children }
2534 }
2535 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2536 let kind = node.kind(db);
2537 if kind == SyntaxKind::ExprUnary { Some(Self::from_syntax_node(db, node)) } else { None }
2538 }
2539 fn as_syntax_node(&self) -> SyntaxNode {
2540 self.node.clone()
2541 }
2542 fn stable_ptr(&self) -> Self::StablePtr {
2543 ExprUnaryPtr(self.node.0.stable_ptr)
2544 }
2545}
2546impl From<&ExprUnary> for SyntaxStablePtrId {
2547 fn from(node: &ExprUnary) -> Self {
2548 node.stable_ptr().untyped()
2549 }
2550}
2551#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2552pub enum UnaryOperator {
2553 Not(TerminalNot),
2554 BitNot(TerminalBitNot),
2555 Minus(TerminalMinus),
2556 At(TerminalAt),
2557 Desnap(TerminalMul),
2558}
2559#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2560pub struct UnaryOperatorPtr(pub SyntaxStablePtrId);
2561impl TypedStablePtr for UnaryOperatorPtr {
2562 type SyntaxNode = UnaryOperator;
2563 fn untyped(&self) -> SyntaxStablePtrId {
2564 self.0
2565 }
2566 fn lookup(&self, db: &dyn SyntaxGroup) -> UnaryOperator {
2567 UnaryOperator::from_syntax_node(db, self.0.lookup(db))
2568 }
2569}
2570impl From<UnaryOperatorPtr> for SyntaxStablePtrId {
2571 fn from(ptr: UnaryOperatorPtr) -> Self {
2572 ptr.untyped()
2573 }
2574}
2575impl From<TerminalNotPtr> for UnaryOperatorPtr {
2576 fn from(value: TerminalNotPtr) -> Self {
2577 Self(value.0)
2578 }
2579}
2580impl From<TerminalBitNotPtr> for UnaryOperatorPtr {
2581 fn from(value: TerminalBitNotPtr) -> Self {
2582 Self(value.0)
2583 }
2584}
2585impl From<TerminalMinusPtr> for UnaryOperatorPtr {
2586 fn from(value: TerminalMinusPtr) -> Self {
2587 Self(value.0)
2588 }
2589}
2590impl From<TerminalAtPtr> for UnaryOperatorPtr {
2591 fn from(value: TerminalAtPtr) -> Self {
2592 Self(value.0)
2593 }
2594}
2595impl From<TerminalMulPtr> for UnaryOperatorPtr {
2596 fn from(value: TerminalMulPtr) -> Self {
2597 Self(value.0)
2598 }
2599}
2600impl From<TerminalNotGreen> for UnaryOperatorGreen {
2601 fn from(value: TerminalNotGreen) -> Self {
2602 Self(value.0)
2603 }
2604}
2605impl From<TerminalBitNotGreen> for UnaryOperatorGreen {
2606 fn from(value: TerminalBitNotGreen) -> Self {
2607 Self(value.0)
2608 }
2609}
2610impl From<TerminalMinusGreen> for UnaryOperatorGreen {
2611 fn from(value: TerminalMinusGreen) -> Self {
2612 Self(value.0)
2613 }
2614}
2615impl From<TerminalAtGreen> for UnaryOperatorGreen {
2616 fn from(value: TerminalAtGreen) -> Self {
2617 Self(value.0)
2618 }
2619}
2620impl From<TerminalMulGreen> for UnaryOperatorGreen {
2621 fn from(value: TerminalMulGreen) -> Self {
2622 Self(value.0)
2623 }
2624}
2625#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2626pub struct UnaryOperatorGreen(pub GreenId);
2627impl TypedSyntaxNode for UnaryOperator {
2628 const OPTIONAL_KIND: Option<SyntaxKind> = None;
2629 type StablePtr = UnaryOperatorPtr;
2630 type Green = UnaryOperatorGreen;
2631 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2632 panic!("No missing variant.");
2633 }
2634 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2635 let kind = node.kind(db);
2636 match kind {
2637 SyntaxKind::TerminalNot => UnaryOperator::Not(TerminalNot::from_syntax_node(db, node)),
2638 SyntaxKind::TerminalBitNot => {
2639 UnaryOperator::BitNot(TerminalBitNot::from_syntax_node(db, node))
2640 }
2641 SyntaxKind::TerminalMinus => {
2642 UnaryOperator::Minus(TerminalMinus::from_syntax_node(db, node))
2643 }
2644 SyntaxKind::TerminalAt => UnaryOperator::At(TerminalAt::from_syntax_node(db, node)),
2645 SyntaxKind::TerminalMul => {
2646 UnaryOperator::Desnap(TerminalMul::from_syntax_node(db, node))
2647 }
2648 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "UnaryOperator"),
2649 }
2650 }
2651 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2652 let kind = node.kind(db);
2653 match kind {
2654 SyntaxKind::TerminalNot => {
2655 Some(UnaryOperator::Not(TerminalNot::from_syntax_node(db, node)))
2656 }
2657 SyntaxKind::TerminalBitNot => {
2658 Some(UnaryOperator::BitNot(TerminalBitNot::from_syntax_node(db, node)))
2659 }
2660 SyntaxKind::TerminalMinus => {
2661 Some(UnaryOperator::Minus(TerminalMinus::from_syntax_node(db, node)))
2662 }
2663 SyntaxKind::TerminalAt => {
2664 Some(UnaryOperator::At(TerminalAt::from_syntax_node(db, node)))
2665 }
2666 SyntaxKind::TerminalMul => {
2667 Some(UnaryOperator::Desnap(TerminalMul::from_syntax_node(db, node)))
2668 }
2669 _ => None,
2670 }
2671 }
2672 fn as_syntax_node(&self) -> SyntaxNode {
2673 match self {
2674 UnaryOperator::Not(x) => x.as_syntax_node(),
2675 UnaryOperator::BitNot(x) => x.as_syntax_node(),
2676 UnaryOperator::Minus(x) => x.as_syntax_node(),
2677 UnaryOperator::At(x) => x.as_syntax_node(),
2678 UnaryOperator::Desnap(x) => x.as_syntax_node(),
2679 }
2680 }
2681 fn stable_ptr(&self) -> Self::StablePtr {
2682 UnaryOperatorPtr(self.as_syntax_node().0.stable_ptr)
2683 }
2684}
2685impl From<&UnaryOperator> for SyntaxStablePtrId {
2686 fn from(node: &UnaryOperator) -> Self {
2687 node.stable_ptr().untyped()
2688 }
2689}
2690impl UnaryOperator {
2691 pub fn is_variant(kind: SyntaxKind) -> bool {
2693 matches!(
2694 kind,
2695 SyntaxKind::TerminalNot
2696 | SyntaxKind::TerminalBitNot
2697 | SyntaxKind::TerminalMinus
2698 | SyntaxKind::TerminalAt
2699 | SyntaxKind::TerminalMul
2700 )
2701 }
2702}
2703#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2704pub struct ExprBinary {
2705 node: SyntaxNode,
2706 children: Arc<[SyntaxNode]>,
2707}
2708impl ExprBinary {
2709 pub const INDEX_LHS: usize = 0;
2710 pub const INDEX_OP: usize = 1;
2711 pub const INDEX_RHS: usize = 2;
2712 pub fn new_green(
2713 db: &dyn SyntaxGroup,
2714 lhs: ExprGreen,
2715 op: BinaryOperatorGreen,
2716 rhs: ExprGreen,
2717 ) -> ExprBinaryGreen {
2718 let children: Vec<GreenId> = vec![lhs.0, op.0, rhs.0];
2719 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
2720 ExprBinaryGreen(
2721 Arc::new(GreenNode {
2722 kind: SyntaxKind::ExprBinary,
2723 details: GreenNodeDetails::Node { children, width },
2724 })
2725 .intern(db),
2726 )
2727 }
2728}
2729impl ExprBinary {
2730 pub fn lhs(&self, db: &dyn SyntaxGroup) -> Expr {
2731 Expr::from_syntax_node(db, self.children[0].clone())
2732 }
2733 pub fn op(&self, db: &dyn SyntaxGroup) -> BinaryOperator {
2734 BinaryOperator::from_syntax_node(db, self.children[1].clone())
2735 }
2736 pub fn rhs(&self, db: &dyn SyntaxGroup) -> Expr {
2737 Expr::from_syntax_node(db, self.children[2].clone())
2738 }
2739}
2740#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2741pub struct ExprBinaryPtr(pub SyntaxStablePtrId);
2742impl ExprBinaryPtr {}
2743impl TypedStablePtr for ExprBinaryPtr {
2744 type SyntaxNode = ExprBinary;
2745 fn untyped(&self) -> SyntaxStablePtrId {
2746 self.0
2747 }
2748 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprBinary {
2749 ExprBinary::from_syntax_node(db, self.0.lookup(db))
2750 }
2751}
2752impl From<ExprBinaryPtr> for SyntaxStablePtrId {
2753 fn from(ptr: ExprBinaryPtr) -> Self {
2754 ptr.untyped()
2755 }
2756}
2757#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2758pub struct ExprBinaryGreen(pub GreenId);
2759impl TypedSyntaxNode for ExprBinary {
2760 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprBinary);
2761 type StablePtr = ExprBinaryPtr;
2762 type Green = ExprBinaryGreen;
2763 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2764 ExprBinaryGreen(
2765 Arc::new(GreenNode {
2766 kind: SyntaxKind::ExprBinary,
2767 details: GreenNodeDetails::Node {
2768 children: vec![
2769 Expr::missing(db).0,
2770 BinaryOperator::missing(db).0,
2771 Expr::missing(db).0,
2772 ],
2773 width: TextWidth::default(),
2774 },
2775 })
2776 .intern(db),
2777 )
2778 }
2779 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2780 let kind = node.kind(db);
2781 assert_eq!(
2782 kind,
2783 SyntaxKind::ExprBinary,
2784 "Unexpected SyntaxKind {:?}. Expected {:?}.",
2785 kind,
2786 SyntaxKind::ExprBinary
2787 );
2788 let children = db.get_children(node.clone());
2789 Self { node, children }
2790 }
2791 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2792 let kind = node.kind(db);
2793 if kind == SyntaxKind::ExprBinary { Some(Self::from_syntax_node(db, node)) } else { None }
2794 }
2795 fn as_syntax_node(&self) -> SyntaxNode {
2796 self.node.clone()
2797 }
2798 fn stable_ptr(&self) -> Self::StablePtr {
2799 ExprBinaryPtr(self.node.0.stable_ptr)
2800 }
2801}
2802impl From<&ExprBinary> for SyntaxStablePtrId {
2803 fn from(node: &ExprBinary) -> Self {
2804 node.stable_ptr().untyped()
2805 }
2806}
2807#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2808pub enum BinaryOperator {
2809 Dot(TerminalDot),
2810 Not(TerminalNot),
2811 Mul(TerminalMul),
2812 MulEq(TerminalMulEq),
2813 Div(TerminalDiv),
2814 DivEq(TerminalDivEq),
2815 Mod(TerminalMod),
2816 ModEq(TerminalModEq),
2817 Plus(TerminalPlus),
2818 PlusEq(TerminalPlusEq),
2819 Minus(TerminalMinus),
2820 MinusEq(TerminalMinusEq),
2821 EqEq(TerminalEqEq),
2822 Neq(TerminalNeq),
2823 Eq(TerminalEq),
2824 And(TerminalAnd),
2825 AndAnd(TerminalAndAnd),
2826 Or(TerminalOr),
2827 OrOr(TerminalOrOr),
2828 Xor(TerminalXor),
2829 LE(TerminalLE),
2830 GE(TerminalGE),
2831 LT(TerminalLT),
2832 GT(TerminalGT),
2833 DotDot(TerminalDotDot),
2834 DotDotEq(TerminalDotDotEq),
2835}
2836#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2837pub struct BinaryOperatorPtr(pub SyntaxStablePtrId);
2838impl TypedStablePtr for BinaryOperatorPtr {
2839 type SyntaxNode = BinaryOperator;
2840 fn untyped(&self) -> SyntaxStablePtrId {
2841 self.0
2842 }
2843 fn lookup(&self, db: &dyn SyntaxGroup) -> BinaryOperator {
2844 BinaryOperator::from_syntax_node(db, self.0.lookup(db))
2845 }
2846}
2847impl From<BinaryOperatorPtr> for SyntaxStablePtrId {
2848 fn from(ptr: BinaryOperatorPtr) -> Self {
2849 ptr.untyped()
2850 }
2851}
2852impl From<TerminalDotPtr> for BinaryOperatorPtr {
2853 fn from(value: TerminalDotPtr) -> Self {
2854 Self(value.0)
2855 }
2856}
2857impl From<TerminalNotPtr> for BinaryOperatorPtr {
2858 fn from(value: TerminalNotPtr) -> Self {
2859 Self(value.0)
2860 }
2861}
2862impl From<TerminalMulPtr> for BinaryOperatorPtr {
2863 fn from(value: TerminalMulPtr) -> Self {
2864 Self(value.0)
2865 }
2866}
2867impl From<TerminalMulEqPtr> for BinaryOperatorPtr {
2868 fn from(value: TerminalMulEqPtr) -> Self {
2869 Self(value.0)
2870 }
2871}
2872impl From<TerminalDivPtr> for BinaryOperatorPtr {
2873 fn from(value: TerminalDivPtr) -> Self {
2874 Self(value.0)
2875 }
2876}
2877impl From<TerminalDivEqPtr> for BinaryOperatorPtr {
2878 fn from(value: TerminalDivEqPtr) -> Self {
2879 Self(value.0)
2880 }
2881}
2882impl From<TerminalModPtr> for BinaryOperatorPtr {
2883 fn from(value: TerminalModPtr) -> Self {
2884 Self(value.0)
2885 }
2886}
2887impl From<TerminalModEqPtr> for BinaryOperatorPtr {
2888 fn from(value: TerminalModEqPtr) -> Self {
2889 Self(value.0)
2890 }
2891}
2892impl From<TerminalPlusPtr> for BinaryOperatorPtr {
2893 fn from(value: TerminalPlusPtr) -> Self {
2894 Self(value.0)
2895 }
2896}
2897impl From<TerminalPlusEqPtr> for BinaryOperatorPtr {
2898 fn from(value: TerminalPlusEqPtr) -> Self {
2899 Self(value.0)
2900 }
2901}
2902impl From<TerminalMinusPtr> for BinaryOperatorPtr {
2903 fn from(value: TerminalMinusPtr) -> Self {
2904 Self(value.0)
2905 }
2906}
2907impl From<TerminalMinusEqPtr> for BinaryOperatorPtr {
2908 fn from(value: TerminalMinusEqPtr) -> Self {
2909 Self(value.0)
2910 }
2911}
2912impl From<TerminalEqEqPtr> for BinaryOperatorPtr {
2913 fn from(value: TerminalEqEqPtr) -> Self {
2914 Self(value.0)
2915 }
2916}
2917impl From<TerminalNeqPtr> for BinaryOperatorPtr {
2918 fn from(value: TerminalNeqPtr) -> Self {
2919 Self(value.0)
2920 }
2921}
2922impl From<TerminalEqPtr> for BinaryOperatorPtr {
2923 fn from(value: TerminalEqPtr) -> Self {
2924 Self(value.0)
2925 }
2926}
2927impl From<TerminalAndPtr> for BinaryOperatorPtr {
2928 fn from(value: TerminalAndPtr) -> Self {
2929 Self(value.0)
2930 }
2931}
2932impl From<TerminalAndAndPtr> for BinaryOperatorPtr {
2933 fn from(value: TerminalAndAndPtr) -> Self {
2934 Self(value.0)
2935 }
2936}
2937impl From<TerminalOrPtr> for BinaryOperatorPtr {
2938 fn from(value: TerminalOrPtr) -> Self {
2939 Self(value.0)
2940 }
2941}
2942impl From<TerminalOrOrPtr> for BinaryOperatorPtr {
2943 fn from(value: TerminalOrOrPtr) -> Self {
2944 Self(value.0)
2945 }
2946}
2947impl From<TerminalXorPtr> for BinaryOperatorPtr {
2948 fn from(value: TerminalXorPtr) -> Self {
2949 Self(value.0)
2950 }
2951}
2952impl From<TerminalLEPtr> for BinaryOperatorPtr {
2953 fn from(value: TerminalLEPtr) -> Self {
2954 Self(value.0)
2955 }
2956}
2957impl From<TerminalGEPtr> for BinaryOperatorPtr {
2958 fn from(value: TerminalGEPtr) -> Self {
2959 Self(value.0)
2960 }
2961}
2962impl From<TerminalLTPtr> for BinaryOperatorPtr {
2963 fn from(value: TerminalLTPtr) -> Self {
2964 Self(value.0)
2965 }
2966}
2967impl From<TerminalGTPtr> for BinaryOperatorPtr {
2968 fn from(value: TerminalGTPtr) -> Self {
2969 Self(value.0)
2970 }
2971}
2972impl From<TerminalDotDotPtr> for BinaryOperatorPtr {
2973 fn from(value: TerminalDotDotPtr) -> Self {
2974 Self(value.0)
2975 }
2976}
2977impl From<TerminalDotDotEqPtr> for BinaryOperatorPtr {
2978 fn from(value: TerminalDotDotEqPtr) -> Self {
2979 Self(value.0)
2980 }
2981}
2982impl From<TerminalDotGreen> for BinaryOperatorGreen {
2983 fn from(value: TerminalDotGreen) -> Self {
2984 Self(value.0)
2985 }
2986}
2987impl From<TerminalNotGreen> for BinaryOperatorGreen {
2988 fn from(value: TerminalNotGreen) -> Self {
2989 Self(value.0)
2990 }
2991}
2992impl From<TerminalMulGreen> for BinaryOperatorGreen {
2993 fn from(value: TerminalMulGreen) -> Self {
2994 Self(value.0)
2995 }
2996}
2997impl From<TerminalMulEqGreen> for BinaryOperatorGreen {
2998 fn from(value: TerminalMulEqGreen) -> Self {
2999 Self(value.0)
3000 }
3001}
3002impl From<TerminalDivGreen> for BinaryOperatorGreen {
3003 fn from(value: TerminalDivGreen) -> Self {
3004 Self(value.0)
3005 }
3006}
3007impl From<TerminalDivEqGreen> for BinaryOperatorGreen {
3008 fn from(value: TerminalDivEqGreen) -> Self {
3009 Self(value.0)
3010 }
3011}
3012impl From<TerminalModGreen> for BinaryOperatorGreen {
3013 fn from(value: TerminalModGreen) -> Self {
3014 Self(value.0)
3015 }
3016}
3017impl From<TerminalModEqGreen> for BinaryOperatorGreen {
3018 fn from(value: TerminalModEqGreen) -> Self {
3019 Self(value.0)
3020 }
3021}
3022impl From<TerminalPlusGreen> for BinaryOperatorGreen {
3023 fn from(value: TerminalPlusGreen) -> Self {
3024 Self(value.0)
3025 }
3026}
3027impl From<TerminalPlusEqGreen> for BinaryOperatorGreen {
3028 fn from(value: TerminalPlusEqGreen) -> Self {
3029 Self(value.0)
3030 }
3031}
3032impl From<TerminalMinusGreen> for BinaryOperatorGreen {
3033 fn from(value: TerminalMinusGreen) -> Self {
3034 Self(value.0)
3035 }
3036}
3037impl From<TerminalMinusEqGreen> for BinaryOperatorGreen {
3038 fn from(value: TerminalMinusEqGreen) -> Self {
3039 Self(value.0)
3040 }
3041}
3042impl From<TerminalEqEqGreen> for BinaryOperatorGreen {
3043 fn from(value: TerminalEqEqGreen) -> Self {
3044 Self(value.0)
3045 }
3046}
3047impl From<TerminalNeqGreen> for BinaryOperatorGreen {
3048 fn from(value: TerminalNeqGreen) -> Self {
3049 Self(value.0)
3050 }
3051}
3052impl From<TerminalEqGreen> for BinaryOperatorGreen {
3053 fn from(value: TerminalEqGreen) -> Self {
3054 Self(value.0)
3055 }
3056}
3057impl From<TerminalAndGreen> for BinaryOperatorGreen {
3058 fn from(value: TerminalAndGreen) -> Self {
3059 Self(value.0)
3060 }
3061}
3062impl From<TerminalAndAndGreen> for BinaryOperatorGreen {
3063 fn from(value: TerminalAndAndGreen) -> Self {
3064 Self(value.0)
3065 }
3066}
3067impl From<TerminalOrGreen> for BinaryOperatorGreen {
3068 fn from(value: TerminalOrGreen) -> Self {
3069 Self(value.0)
3070 }
3071}
3072impl From<TerminalOrOrGreen> for BinaryOperatorGreen {
3073 fn from(value: TerminalOrOrGreen) -> Self {
3074 Self(value.0)
3075 }
3076}
3077impl From<TerminalXorGreen> for BinaryOperatorGreen {
3078 fn from(value: TerminalXorGreen) -> Self {
3079 Self(value.0)
3080 }
3081}
3082impl From<TerminalLEGreen> for BinaryOperatorGreen {
3083 fn from(value: TerminalLEGreen) -> Self {
3084 Self(value.0)
3085 }
3086}
3087impl From<TerminalGEGreen> for BinaryOperatorGreen {
3088 fn from(value: TerminalGEGreen) -> Self {
3089 Self(value.0)
3090 }
3091}
3092impl From<TerminalLTGreen> for BinaryOperatorGreen {
3093 fn from(value: TerminalLTGreen) -> Self {
3094 Self(value.0)
3095 }
3096}
3097impl From<TerminalGTGreen> for BinaryOperatorGreen {
3098 fn from(value: TerminalGTGreen) -> Self {
3099 Self(value.0)
3100 }
3101}
3102impl From<TerminalDotDotGreen> for BinaryOperatorGreen {
3103 fn from(value: TerminalDotDotGreen) -> Self {
3104 Self(value.0)
3105 }
3106}
3107impl From<TerminalDotDotEqGreen> for BinaryOperatorGreen {
3108 fn from(value: TerminalDotDotEqGreen) -> Self {
3109 Self(value.0)
3110 }
3111}
3112#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3113pub struct BinaryOperatorGreen(pub GreenId);
3114impl TypedSyntaxNode for BinaryOperator {
3115 const OPTIONAL_KIND: Option<SyntaxKind> = None;
3116 type StablePtr = BinaryOperatorPtr;
3117 type Green = BinaryOperatorGreen;
3118 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3119 panic!("No missing variant.");
3120 }
3121 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
3122 let kind = node.kind(db);
3123 match kind {
3124 SyntaxKind::TerminalDot => BinaryOperator::Dot(TerminalDot::from_syntax_node(db, node)),
3125 SyntaxKind::TerminalNot => BinaryOperator::Not(TerminalNot::from_syntax_node(db, node)),
3126 SyntaxKind::TerminalMul => BinaryOperator::Mul(TerminalMul::from_syntax_node(db, node)),
3127 SyntaxKind::TerminalMulEq => {
3128 BinaryOperator::MulEq(TerminalMulEq::from_syntax_node(db, node))
3129 }
3130 SyntaxKind::TerminalDiv => BinaryOperator::Div(TerminalDiv::from_syntax_node(db, node)),
3131 SyntaxKind::TerminalDivEq => {
3132 BinaryOperator::DivEq(TerminalDivEq::from_syntax_node(db, node))
3133 }
3134 SyntaxKind::TerminalMod => BinaryOperator::Mod(TerminalMod::from_syntax_node(db, node)),
3135 SyntaxKind::TerminalModEq => {
3136 BinaryOperator::ModEq(TerminalModEq::from_syntax_node(db, node))
3137 }
3138 SyntaxKind::TerminalPlus => {
3139 BinaryOperator::Plus(TerminalPlus::from_syntax_node(db, node))
3140 }
3141 SyntaxKind::TerminalPlusEq => {
3142 BinaryOperator::PlusEq(TerminalPlusEq::from_syntax_node(db, node))
3143 }
3144 SyntaxKind::TerminalMinus => {
3145 BinaryOperator::Minus(TerminalMinus::from_syntax_node(db, node))
3146 }
3147 SyntaxKind::TerminalMinusEq => {
3148 BinaryOperator::MinusEq(TerminalMinusEq::from_syntax_node(db, node))
3149 }
3150 SyntaxKind::TerminalEqEq => {
3151 BinaryOperator::EqEq(TerminalEqEq::from_syntax_node(db, node))
3152 }
3153 SyntaxKind::TerminalNeq => BinaryOperator::Neq(TerminalNeq::from_syntax_node(db, node)),
3154 SyntaxKind::TerminalEq => BinaryOperator::Eq(TerminalEq::from_syntax_node(db, node)),
3155 SyntaxKind::TerminalAnd => BinaryOperator::And(TerminalAnd::from_syntax_node(db, node)),
3156 SyntaxKind::TerminalAndAnd => {
3157 BinaryOperator::AndAnd(TerminalAndAnd::from_syntax_node(db, node))
3158 }
3159 SyntaxKind::TerminalOr => BinaryOperator::Or(TerminalOr::from_syntax_node(db, node)),
3160 SyntaxKind::TerminalOrOr => {
3161 BinaryOperator::OrOr(TerminalOrOr::from_syntax_node(db, node))
3162 }
3163 SyntaxKind::TerminalXor => BinaryOperator::Xor(TerminalXor::from_syntax_node(db, node)),
3164 SyntaxKind::TerminalLE => BinaryOperator::LE(TerminalLE::from_syntax_node(db, node)),
3165 SyntaxKind::TerminalGE => BinaryOperator::GE(TerminalGE::from_syntax_node(db, node)),
3166 SyntaxKind::TerminalLT => BinaryOperator::LT(TerminalLT::from_syntax_node(db, node)),
3167 SyntaxKind::TerminalGT => BinaryOperator::GT(TerminalGT::from_syntax_node(db, node)),
3168 SyntaxKind::TerminalDotDot => {
3169 BinaryOperator::DotDot(TerminalDotDot::from_syntax_node(db, node))
3170 }
3171 SyntaxKind::TerminalDotDotEq => {
3172 BinaryOperator::DotDotEq(TerminalDotDotEq::from_syntax_node(db, node))
3173 }
3174 _ => {
3175 panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "BinaryOperator")
3176 }
3177 }
3178 }
3179 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
3180 let kind = node.kind(db);
3181 match kind {
3182 SyntaxKind::TerminalDot => {
3183 Some(BinaryOperator::Dot(TerminalDot::from_syntax_node(db, node)))
3184 }
3185 SyntaxKind::TerminalNot => {
3186 Some(BinaryOperator::Not(TerminalNot::from_syntax_node(db, node)))
3187 }
3188 SyntaxKind::TerminalMul => {
3189 Some(BinaryOperator::Mul(TerminalMul::from_syntax_node(db, node)))
3190 }
3191 SyntaxKind::TerminalMulEq => {
3192 Some(BinaryOperator::MulEq(TerminalMulEq::from_syntax_node(db, node)))
3193 }
3194 SyntaxKind::TerminalDiv => {
3195 Some(BinaryOperator::Div(TerminalDiv::from_syntax_node(db, node)))
3196 }
3197 SyntaxKind::TerminalDivEq => {
3198 Some(BinaryOperator::DivEq(TerminalDivEq::from_syntax_node(db, node)))
3199 }
3200 SyntaxKind::TerminalMod => {
3201 Some(BinaryOperator::Mod(TerminalMod::from_syntax_node(db, node)))
3202 }
3203 SyntaxKind::TerminalModEq => {
3204 Some(BinaryOperator::ModEq(TerminalModEq::from_syntax_node(db, node)))
3205 }
3206 SyntaxKind::TerminalPlus => {
3207 Some(BinaryOperator::Plus(TerminalPlus::from_syntax_node(db, node)))
3208 }
3209 SyntaxKind::TerminalPlusEq => {
3210 Some(BinaryOperator::PlusEq(TerminalPlusEq::from_syntax_node(db, node)))
3211 }
3212 SyntaxKind::TerminalMinus => {
3213 Some(BinaryOperator::Minus(TerminalMinus::from_syntax_node(db, node)))
3214 }
3215 SyntaxKind::TerminalMinusEq => {
3216 Some(BinaryOperator::MinusEq(TerminalMinusEq::from_syntax_node(db, node)))
3217 }
3218 SyntaxKind::TerminalEqEq => {
3219 Some(BinaryOperator::EqEq(TerminalEqEq::from_syntax_node(db, node)))
3220 }
3221 SyntaxKind::TerminalNeq => {
3222 Some(BinaryOperator::Neq(TerminalNeq::from_syntax_node(db, node)))
3223 }
3224 SyntaxKind::TerminalEq => {
3225 Some(BinaryOperator::Eq(TerminalEq::from_syntax_node(db, node)))
3226 }
3227 SyntaxKind::TerminalAnd => {
3228 Some(BinaryOperator::And(TerminalAnd::from_syntax_node(db, node)))
3229 }
3230 SyntaxKind::TerminalAndAnd => {
3231 Some(BinaryOperator::AndAnd(TerminalAndAnd::from_syntax_node(db, node)))
3232 }
3233 SyntaxKind::TerminalOr => {
3234 Some(BinaryOperator::Or(TerminalOr::from_syntax_node(db, node)))
3235 }
3236 SyntaxKind::TerminalOrOr => {
3237 Some(BinaryOperator::OrOr(TerminalOrOr::from_syntax_node(db, node)))
3238 }
3239 SyntaxKind::TerminalXor => {
3240 Some(BinaryOperator::Xor(TerminalXor::from_syntax_node(db, node)))
3241 }
3242 SyntaxKind::TerminalLE => {
3243 Some(BinaryOperator::LE(TerminalLE::from_syntax_node(db, node)))
3244 }
3245 SyntaxKind::TerminalGE => {
3246 Some(BinaryOperator::GE(TerminalGE::from_syntax_node(db, node)))
3247 }
3248 SyntaxKind::TerminalLT => {
3249 Some(BinaryOperator::LT(TerminalLT::from_syntax_node(db, node)))
3250 }
3251 SyntaxKind::TerminalGT => {
3252 Some(BinaryOperator::GT(TerminalGT::from_syntax_node(db, node)))
3253 }
3254 SyntaxKind::TerminalDotDot => {
3255 Some(BinaryOperator::DotDot(TerminalDotDot::from_syntax_node(db, node)))
3256 }
3257 SyntaxKind::TerminalDotDotEq => {
3258 Some(BinaryOperator::DotDotEq(TerminalDotDotEq::from_syntax_node(db, node)))
3259 }
3260 _ => None,
3261 }
3262 }
3263 fn as_syntax_node(&self) -> SyntaxNode {
3264 match self {
3265 BinaryOperator::Dot(x) => x.as_syntax_node(),
3266 BinaryOperator::Not(x) => x.as_syntax_node(),
3267 BinaryOperator::Mul(x) => x.as_syntax_node(),
3268 BinaryOperator::MulEq(x) => x.as_syntax_node(),
3269 BinaryOperator::Div(x) => x.as_syntax_node(),
3270 BinaryOperator::DivEq(x) => x.as_syntax_node(),
3271 BinaryOperator::Mod(x) => x.as_syntax_node(),
3272 BinaryOperator::ModEq(x) => x.as_syntax_node(),
3273 BinaryOperator::Plus(x) => x.as_syntax_node(),
3274 BinaryOperator::PlusEq(x) => x.as_syntax_node(),
3275 BinaryOperator::Minus(x) => x.as_syntax_node(),
3276 BinaryOperator::MinusEq(x) => x.as_syntax_node(),
3277 BinaryOperator::EqEq(x) => x.as_syntax_node(),
3278 BinaryOperator::Neq(x) => x.as_syntax_node(),
3279 BinaryOperator::Eq(x) => x.as_syntax_node(),
3280 BinaryOperator::And(x) => x.as_syntax_node(),
3281 BinaryOperator::AndAnd(x) => x.as_syntax_node(),
3282 BinaryOperator::Or(x) => x.as_syntax_node(),
3283 BinaryOperator::OrOr(x) => x.as_syntax_node(),
3284 BinaryOperator::Xor(x) => x.as_syntax_node(),
3285 BinaryOperator::LE(x) => x.as_syntax_node(),
3286 BinaryOperator::GE(x) => x.as_syntax_node(),
3287 BinaryOperator::LT(x) => x.as_syntax_node(),
3288 BinaryOperator::GT(x) => x.as_syntax_node(),
3289 BinaryOperator::DotDot(x) => x.as_syntax_node(),
3290 BinaryOperator::DotDotEq(x) => x.as_syntax_node(),
3291 }
3292 }
3293 fn stable_ptr(&self) -> Self::StablePtr {
3294 BinaryOperatorPtr(self.as_syntax_node().0.stable_ptr)
3295 }
3296}
3297impl From<&BinaryOperator> for SyntaxStablePtrId {
3298 fn from(node: &BinaryOperator) -> Self {
3299 node.stable_ptr().untyped()
3300 }
3301}
3302impl BinaryOperator {
3303 pub fn is_variant(kind: SyntaxKind) -> bool {
3305 matches!(
3306 kind,
3307 SyntaxKind::TerminalDot
3308 | SyntaxKind::TerminalNot
3309 | SyntaxKind::TerminalMul
3310 | SyntaxKind::TerminalMulEq
3311 | SyntaxKind::TerminalDiv
3312 | SyntaxKind::TerminalDivEq
3313 | SyntaxKind::TerminalMod
3314 | SyntaxKind::TerminalModEq
3315 | SyntaxKind::TerminalPlus
3316 | SyntaxKind::TerminalPlusEq
3317 | SyntaxKind::TerminalMinus
3318 | SyntaxKind::TerminalMinusEq
3319 | SyntaxKind::TerminalEqEq
3320 | SyntaxKind::TerminalNeq
3321 | SyntaxKind::TerminalEq
3322 | SyntaxKind::TerminalAnd
3323 | SyntaxKind::TerminalAndAnd
3324 | SyntaxKind::TerminalOr
3325 | SyntaxKind::TerminalOrOr
3326 | SyntaxKind::TerminalXor
3327 | SyntaxKind::TerminalLE
3328 | SyntaxKind::TerminalGE
3329 | SyntaxKind::TerminalLT
3330 | SyntaxKind::TerminalGT
3331 | SyntaxKind::TerminalDotDot
3332 | SyntaxKind::TerminalDotDotEq
3333 )
3334 }
3335}
3336#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3337pub struct ExprListParenthesized {
3338 node: SyntaxNode,
3339 children: Arc<[SyntaxNode]>,
3340}
3341impl ExprListParenthesized {
3342 pub const INDEX_LPAREN: usize = 0;
3343 pub const INDEX_EXPRESSIONS: usize = 1;
3344 pub const INDEX_RPAREN: usize = 2;
3345 pub fn new_green(
3346 db: &dyn SyntaxGroup,
3347 lparen: TerminalLParenGreen,
3348 expressions: ExprListGreen,
3349 rparen: TerminalRParenGreen,
3350 ) -> ExprListParenthesizedGreen {
3351 let children: Vec<GreenId> = vec![lparen.0, expressions.0, rparen.0];
3352 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
3353 ExprListParenthesizedGreen(
3354 Arc::new(GreenNode {
3355 kind: SyntaxKind::ExprListParenthesized,
3356 details: GreenNodeDetails::Node { children, width },
3357 })
3358 .intern(db),
3359 )
3360 }
3361}
3362impl ExprListParenthesized {
3363 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
3364 TerminalLParen::from_syntax_node(db, self.children[0].clone())
3365 }
3366 pub fn expressions(&self, db: &dyn SyntaxGroup) -> ExprList {
3367 ExprList::from_syntax_node(db, self.children[1].clone())
3368 }
3369 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
3370 TerminalRParen::from_syntax_node(db, self.children[2].clone())
3371 }
3372}
3373#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3374pub struct ExprListParenthesizedPtr(pub SyntaxStablePtrId);
3375impl ExprListParenthesizedPtr {}
3376impl TypedStablePtr for ExprListParenthesizedPtr {
3377 type SyntaxNode = ExprListParenthesized;
3378 fn untyped(&self) -> SyntaxStablePtrId {
3379 self.0
3380 }
3381 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprListParenthesized {
3382 ExprListParenthesized::from_syntax_node(db, self.0.lookup(db))
3383 }
3384}
3385impl From<ExprListParenthesizedPtr> for SyntaxStablePtrId {
3386 fn from(ptr: ExprListParenthesizedPtr) -> Self {
3387 ptr.untyped()
3388 }
3389}
3390#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3391pub struct ExprListParenthesizedGreen(pub GreenId);
3392impl TypedSyntaxNode for ExprListParenthesized {
3393 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprListParenthesized);
3394 type StablePtr = ExprListParenthesizedPtr;
3395 type Green = ExprListParenthesizedGreen;
3396 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3397 ExprListParenthesizedGreen(
3398 Arc::new(GreenNode {
3399 kind: SyntaxKind::ExprListParenthesized,
3400 details: GreenNodeDetails::Node {
3401 children: vec![
3402 TerminalLParen::missing(db).0,
3403 ExprList::missing(db).0,
3404 TerminalRParen::missing(db).0,
3405 ],
3406 width: TextWidth::default(),
3407 },
3408 })
3409 .intern(db),
3410 )
3411 }
3412 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
3413 let kind = node.kind(db);
3414 assert_eq!(
3415 kind,
3416 SyntaxKind::ExprListParenthesized,
3417 "Unexpected SyntaxKind {:?}. Expected {:?}.",
3418 kind,
3419 SyntaxKind::ExprListParenthesized
3420 );
3421 let children = db.get_children(node.clone());
3422 Self { node, children }
3423 }
3424 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
3425 let kind = node.kind(db);
3426 if kind == SyntaxKind::ExprListParenthesized {
3427 Some(Self::from_syntax_node(db, node))
3428 } else {
3429 None
3430 }
3431 }
3432 fn as_syntax_node(&self) -> SyntaxNode {
3433 self.node.clone()
3434 }
3435 fn stable_ptr(&self) -> Self::StablePtr {
3436 ExprListParenthesizedPtr(self.node.0.stable_ptr)
3437 }
3438}
3439impl From<&ExprListParenthesized> for SyntaxStablePtrId {
3440 fn from(node: &ExprListParenthesized) -> Self {
3441 node.stable_ptr().untyped()
3442 }
3443}
3444#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3445pub struct ExprFunctionCall {
3446 node: SyntaxNode,
3447 children: Arc<[SyntaxNode]>,
3448}
3449impl ExprFunctionCall {
3450 pub const INDEX_PATH: usize = 0;
3451 pub const INDEX_ARGUMENTS: usize = 1;
3452 pub fn new_green(
3453 db: &dyn SyntaxGroup,
3454 path: ExprPathGreen,
3455 arguments: ArgListParenthesizedGreen,
3456 ) -> ExprFunctionCallGreen {
3457 let children: Vec<GreenId> = vec![path.0, arguments.0];
3458 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
3459 ExprFunctionCallGreen(
3460 Arc::new(GreenNode {
3461 kind: SyntaxKind::ExprFunctionCall,
3462 details: GreenNodeDetails::Node { children, width },
3463 })
3464 .intern(db),
3465 )
3466 }
3467}
3468impl ExprFunctionCall {
3469 pub fn path(&self, db: &dyn SyntaxGroup) -> ExprPath {
3470 ExprPath::from_syntax_node(db, self.children[0].clone())
3471 }
3472 pub fn arguments(&self, db: &dyn SyntaxGroup) -> ArgListParenthesized {
3473 ArgListParenthesized::from_syntax_node(db, self.children[1].clone())
3474 }
3475}
3476#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3477pub struct ExprFunctionCallPtr(pub SyntaxStablePtrId);
3478impl ExprFunctionCallPtr {}
3479impl TypedStablePtr for ExprFunctionCallPtr {
3480 type SyntaxNode = ExprFunctionCall;
3481 fn untyped(&self) -> SyntaxStablePtrId {
3482 self.0
3483 }
3484 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprFunctionCall {
3485 ExprFunctionCall::from_syntax_node(db, self.0.lookup(db))
3486 }
3487}
3488impl From<ExprFunctionCallPtr> for SyntaxStablePtrId {
3489 fn from(ptr: ExprFunctionCallPtr) -> Self {
3490 ptr.untyped()
3491 }
3492}
3493#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3494pub struct ExprFunctionCallGreen(pub GreenId);
3495impl TypedSyntaxNode for ExprFunctionCall {
3496 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprFunctionCall);
3497 type StablePtr = ExprFunctionCallPtr;
3498 type Green = ExprFunctionCallGreen;
3499 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3500 ExprFunctionCallGreen(
3501 Arc::new(GreenNode {
3502 kind: SyntaxKind::ExprFunctionCall,
3503 details: GreenNodeDetails::Node {
3504 children: vec![ExprPath::missing(db).0, ArgListParenthesized::missing(db).0],
3505 width: TextWidth::default(),
3506 },
3507 })
3508 .intern(db),
3509 )
3510 }
3511 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
3512 let kind = node.kind(db);
3513 assert_eq!(
3514 kind,
3515 SyntaxKind::ExprFunctionCall,
3516 "Unexpected SyntaxKind {:?}. Expected {:?}.",
3517 kind,
3518 SyntaxKind::ExprFunctionCall
3519 );
3520 let children = db.get_children(node.clone());
3521 Self { node, children }
3522 }
3523 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
3524 let kind = node.kind(db);
3525 if kind == SyntaxKind::ExprFunctionCall {
3526 Some(Self::from_syntax_node(db, node))
3527 } else {
3528 None
3529 }
3530 }
3531 fn as_syntax_node(&self) -> SyntaxNode {
3532 self.node.clone()
3533 }
3534 fn stable_ptr(&self) -> Self::StablePtr {
3535 ExprFunctionCallPtr(self.node.0.stable_ptr)
3536 }
3537}
3538impl From<&ExprFunctionCall> for SyntaxStablePtrId {
3539 fn from(node: &ExprFunctionCall) -> Self {
3540 node.stable_ptr().untyped()
3541 }
3542}
3543#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3544pub struct ArgListParenthesized {
3545 node: SyntaxNode,
3546 children: Arc<[SyntaxNode]>,
3547}
3548impl ArgListParenthesized {
3549 pub const INDEX_LPAREN: usize = 0;
3550 pub const INDEX_ARGUMENTS: usize = 1;
3551 pub const INDEX_RPAREN: usize = 2;
3552 pub fn new_green(
3553 db: &dyn SyntaxGroup,
3554 lparen: TerminalLParenGreen,
3555 arguments: ArgListGreen,
3556 rparen: TerminalRParenGreen,
3557 ) -> ArgListParenthesizedGreen {
3558 let children: Vec<GreenId> = vec![lparen.0, arguments.0, rparen.0];
3559 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
3560 ArgListParenthesizedGreen(
3561 Arc::new(GreenNode {
3562 kind: SyntaxKind::ArgListParenthesized,
3563 details: GreenNodeDetails::Node { children, width },
3564 })
3565 .intern(db),
3566 )
3567 }
3568}
3569impl ArgListParenthesized {
3570 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
3571 TerminalLParen::from_syntax_node(db, self.children[0].clone())
3572 }
3573 pub fn arguments(&self, db: &dyn SyntaxGroup) -> ArgList {
3574 ArgList::from_syntax_node(db, self.children[1].clone())
3575 }
3576 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
3577 TerminalRParen::from_syntax_node(db, self.children[2].clone())
3578 }
3579}
3580#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3581pub struct ArgListParenthesizedPtr(pub SyntaxStablePtrId);
3582impl ArgListParenthesizedPtr {}
3583impl TypedStablePtr for ArgListParenthesizedPtr {
3584 type SyntaxNode = ArgListParenthesized;
3585 fn untyped(&self) -> SyntaxStablePtrId {
3586 self.0
3587 }
3588 fn lookup(&self, db: &dyn SyntaxGroup) -> ArgListParenthesized {
3589 ArgListParenthesized::from_syntax_node(db, self.0.lookup(db))
3590 }
3591}
3592impl From<ArgListParenthesizedPtr> for SyntaxStablePtrId {
3593 fn from(ptr: ArgListParenthesizedPtr) -> Self {
3594 ptr.untyped()
3595 }
3596}
3597#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3598pub struct ArgListParenthesizedGreen(pub GreenId);
3599impl TypedSyntaxNode for ArgListParenthesized {
3600 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ArgListParenthesized);
3601 type StablePtr = ArgListParenthesizedPtr;
3602 type Green = ArgListParenthesizedGreen;
3603 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3604 ArgListParenthesizedGreen(
3605 Arc::new(GreenNode {
3606 kind: SyntaxKind::ArgListParenthesized,
3607 details: GreenNodeDetails::Node {
3608 children: vec![
3609 TerminalLParen::missing(db).0,
3610 ArgList::missing(db).0,
3611 TerminalRParen::missing(db).0,
3612 ],
3613 width: TextWidth::default(),
3614 },
3615 })
3616 .intern(db),
3617 )
3618 }
3619 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
3620 let kind = node.kind(db);
3621 assert_eq!(
3622 kind,
3623 SyntaxKind::ArgListParenthesized,
3624 "Unexpected SyntaxKind {:?}. Expected {:?}.",
3625 kind,
3626 SyntaxKind::ArgListParenthesized
3627 );
3628 let children = db.get_children(node.clone());
3629 Self { node, children }
3630 }
3631 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
3632 let kind = node.kind(db);
3633 if kind == SyntaxKind::ArgListParenthesized {
3634 Some(Self::from_syntax_node(db, node))
3635 } else {
3636 None
3637 }
3638 }
3639 fn as_syntax_node(&self) -> SyntaxNode {
3640 self.node.clone()
3641 }
3642 fn stable_ptr(&self) -> Self::StablePtr {
3643 ArgListParenthesizedPtr(self.node.0.stable_ptr)
3644 }
3645}
3646impl From<&ArgListParenthesized> for SyntaxStablePtrId {
3647 fn from(node: &ArgListParenthesized) -> Self {
3648 node.stable_ptr().untyped()
3649 }
3650}
3651#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3652pub enum OptionArgListParenthesized {
3653 Empty(OptionArgListParenthesizedEmpty),
3654 ArgListParenthesized(ArgListParenthesized),
3655}
3656#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3657pub struct OptionArgListParenthesizedPtr(pub SyntaxStablePtrId);
3658impl TypedStablePtr for OptionArgListParenthesizedPtr {
3659 type SyntaxNode = OptionArgListParenthesized;
3660 fn untyped(&self) -> SyntaxStablePtrId {
3661 self.0
3662 }
3663 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionArgListParenthesized {
3664 OptionArgListParenthesized::from_syntax_node(db, self.0.lookup(db))
3665 }
3666}
3667impl From<OptionArgListParenthesizedPtr> for SyntaxStablePtrId {
3668 fn from(ptr: OptionArgListParenthesizedPtr) -> Self {
3669 ptr.untyped()
3670 }
3671}
3672impl From<OptionArgListParenthesizedEmptyPtr> for OptionArgListParenthesizedPtr {
3673 fn from(value: OptionArgListParenthesizedEmptyPtr) -> Self {
3674 Self(value.0)
3675 }
3676}
3677impl From<ArgListParenthesizedPtr> for OptionArgListParenthesizedPtr {
3678 fn from(value: ArgListParenthesizedPtr) -> Self {
3679 Self(value.0)
3680 }
3681}
3682impl From<OptionArgListParenthesizedEmptyGreen> for OptionArgListParenthesizedGreen {
3683 fn from(value: OptionArgListParenthesizedEmptyGreen) -> Self {
3684 Self(value.0)
3685 }
3686}
3687impl From<ArgListParenthesizedGreen> for OptionArgListParenthesizedGreen {
3688 fn from(value: ArgListParenthesizedGreen) -> Self {
3689 Self(value.0)
3690 }
3691}
3692#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3693pub struct OptionArgListParenthesizedGreen(pub GreenId);
3694impl TypedSyntaxNode for OptionArgListParenthesized {
3695 const OPTIONAL_KIND: Option<SyntaxKind> = None;
3696 type StablePtr = OptionArgListParenthesizedPtr;
3697 type Green = OptionArgListParenthesizedGreen;
3698 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3699 panic!("No missing variant.");
3700 }
3701 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
3702 let kind = node.kind(db);
3703 match kind {
3704 SyntaxKind::OptionArgListParenthesizedEmpty => OptionArgListParenthesized::Empty(
3705 OptionArgListParenthesizedEmpty::from_syntax_node(db, node),
3706 ),
3707 SyntaxKind::ArgListParenthesized => OptionArgListParenthesized::ArgListParenthesized(
3708 ArgListParenthesized::from_syntax_node(db, node),
3709 ),
3710 _ => panic!(
3711 "Unexpected syntax kind {:?} when constructing {}.",
3712 kind, "OptionArgListParenthesized"
3713 ),
3714 }
3715 }
3716 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
3717 let kind = node.kind(db);
3718 match kind {
3719 SyntaxKind::OptionArgListParenthesizedEmpty => Some(OptionArgListParenthesized::Empty(
3720 OptionArgListParenthesizedEmpty::from_syntax_node(db, node),
3721 )),
3722 SyntaxKind::ArgListParenthesized => {
3723 Some(OptionArgListParenthesized::ArgListParenthesized(
3724 ArgListParenthesized::from_syntax_node(db, node),
3725 ))
3726 }
3727 _ => None,
3728 }
3729 }
3730 fn as_syntax_node(&self) -> SyntaxNode {
3731 match self {
3732 OptionArgListParenthesized::Empty(x) => x.as_syntax_node(),
3733 OptionArgListParenthesized::ArgListParenthesized(x) => x.as_syntax_node(),
3734 }
3735 }
3736 fn stable_ptr(&self) -> Self::StablePtr {
3737 OptionArgListParenthesizedPtr(self.as_syntax_node().0.stable_ptr)
3738 }
3739}
3740impl From<&OptionArgListParenthesized> for SyntaxStablePtrId {
3741 fn from(node: &OptionArgListParenthesized) -> Self {
3742 node.stable_ptr().untyped()
3743 }
3744}
3745impl OptionArgListParenthesized {
3746 pub fn is_variant(kind: SyntaxKind) -> bool {
3748 matches!(
3749 kind,
3750 SyntaxKind::OptionArgListParenthesizedEmpty | SyntaxKind::ArgListParenthesized
3751 )
3752 }
3753}
3754#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3755pub struct OptionArgListParenthesizedEmpty {
3756 node: SyntaxNode,
3757 children: Arc<[SyntaxNode]>,
3758}
3759impl OptionArgListParenthesizedEmpty {
3760 pub fn new_green(db: &dyn SyntaxGroup) -> OptionArgListParenthesizedEmptyGreen {
3761 let children: Vec<GreenId> = vec![];
3762 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
3763 OptionArgListParenthesizedEmptyGreen(
3764 Arc::new(GreenNode {
3765 kind: SyntaxKind::OptionArgListParenthesizedEmpty,
3766 details: GreenNodeDetails::Node { children, width },
3767 })
3768 .intern(db),
3769 )
3770 }
3771}
3772impl OptionArgListParenthesizedEmpty {}
3773#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3774pub struct OptionArgListParenthesizedEmptyPtr(pub SyntaxStablePtrId);
3775impl OptionArgListParenthesizedEmptyPtr {}
3776impl TypedStablePtr for OptionArgListParenthesizedEmptyPtr {
3777 type SyntaxNode = OptionArgListParenthesizedEmpty;
3778 fn untyped(&self) -> SyntaxStablePtrId {
3779 self.0
3780 }
3781 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionArgListParenthesizedEmpty {
3782 OptionArgListParenthesizedEmpty::from_syntax_node(db, self.0.lookup(db))
3783 }
3784}
3785impl From<OptionArgListParenthesizedEmptyPtr> for SyntaxStablePtrId {
3786 fn from(ptr: OptionArgListParenthesizedEmptyPtr) -> Self {
3787 ptr.untyped()
3788 }
3789}
3790#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3791pub struct OptionArgListParenthesizedEmptyGreen(pub GreenId);
3792impl TypedSyntaxNode for OptionArgListParenthesizedEmpty {
3793 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionArgListParenthesizedEmpty);
3794 type StablePtr = OptionArgListParenthesizedEmptyPtr;
3795 type Green = OptionArgListParenthesizedEmptyGreen;
3796 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3797 OptionArgListParenthesizedEmptyGreen(
3798 Arc::new(GreenNode {
3799 kind: SyntaxKind::OptionArgListParenthesizedEmpty,
3800 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
3801 })
3802 .intern(db),
3803 )
3804 }
3805 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
3806 let kind = node.kind(db);
3807 assert_eq!(
3808 kind,
3809 SyntaxKind::OptionArgListParenthesizedEmpty,
3810 "Unexpected SyntaxKind {:?}. Expected {:?}.",
3811 kind,
3812 SyntaxKind::OptionArgListParenthesizedEmpty
3813 );
3814 let children = db.get_children(node.clone());
3815 Self { node, children }
3816 }
3817 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
3818 let kind = node.kind(db);
3819 if kind == SyntaxKind::OptionArgListParenthesizedEmpty {
3820 Some(Self::from_syntax_node(db, node))
3821 } else {
3822 None
3823 }
3824 }
3825 fn as_syntax_node(&self) -> SyntaxNode {
3826 self.node.clone()
3827 }
3828 fn stable_ptr(&self) -> Self::StablePtr {
3829 OptionArgListParenthesizedEmptyPtr(self.node.0.stable_ptr)
3830 }
3831}
3832impl From<&OptionArgListParenthesizedEmpty> for SyntaxStablePtrId {
3833 fn from(node: &OptionArgListParenthesizedEmpty) -> Self {
3834 node.stable_ptr().untyped()
3835 }
3836}
3837#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3838pub struct ExprStructCtorCall {
3839 node: SyntaxNode,
3840 children: Arc<[SyntaxNode]>,
3841}
3842impl ExprStructCtorCall {
3843 pub const INDEX_PATH: usize = 0;
3844 pub const INDEX_ARGUMENTS: usize = 1;
3845 pub fn new_green(
3846 db: &dyn SyntaxGroup,
3847 path: ExprPathGreen,
3848 arguments: StructArgListBracedGreen,
3849 ) -> ExprStructCtorCallGreen {
3850 let children: Vec<GreenId> = vec![path.0, arguments.0];
3851 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
3852 ExprStructCtorCallGreen(
3853 Arc::new(GreenNode {
3854 kind: SyntaxKind::ExprStructCtorCall,
3855 details: GreenNodeDetails::Node { children, width },
3856 })
3857 .intern(db),
3858 )
3859 }
3860}
3861impl ExprStructCtorCall {
3862 pub fn path(&self, db: &dyn SyntaxGroup) -> ExprPath {
3863 ExprPath::from_syntax_node(db, self.children[0].clone())
3864 }
3865 pub fn arguments(&self, db: &dyn SyntaxGroup) -> StructArgListBraced {
3866 StructArgListBraced::from_syntax_node(db, self.children[1].clone())
3867 }
3868}
3869#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3870pub struct ExprStructCtorCallPtr(pub SyntaxStablePtrId);
3871impl ExprStructCtorCallPtr {}
3872impl TypedStablePtr for ExprStructCtorCallPtr {
3873 type SyntaxNode = ExprStructCtorCall;
3874 fn untyped(&self) -> SyntaxStablePtrId {
3875 self.0
3876 }
3877 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprStructCtorCall {
3878 ExprStructCtorCall::from_syntax_node(db, self.0.lookup(db))
3879 }
3880}
3881impl From<ExprStructCtorCallPtr> for SyntaxStablePtrId {
3882 fn from(ptr: ExprStructCtorCallPtr) -> Self {
3883 ptr.untyped()
3884 }
3885}
3886#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3887pub struct ExprStructCtorCallGreen(pub GreenId);
3888impl TypedSyntaxNode for ExprStructCtorCall {
3889 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprStructCtorCall);
3890 type StablePtr = ExprStructCtorCallPtr;
3891 type Green = ExprStructCtorCallGreen;
3892 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3893 ExprStructCtorCallGreen(
3894 Arc::new(GreenNode {
3895 kind: SyntaxKind::ExprStructCtorCall,
3896 details: GreenNodeDetails::Node {
3897 children: vec![ExprPath::missing(db).0, StructArgListBraced::missing(db).0],
3898 width: TextWidth::default(),
3899 },
3900 })
3901 .intern(db),
3902 )
3903 }
3904 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
3905 let kind = node.kind(db);
3906 assert_eq!(
3907 kind,
3908 SyntaxKind::ExprStructCtorCall,
3909 "Unexpected SyntaxKind {:?}. Expected {:?}.",
3910 kind,
3911 SyntaxKind::ExprStructCtorCall
3912 );
3913 let children = db.get_children(node.clone());
3914 Self { node, children }
3915 }
3916 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
3917 let kind = node.kind(db);
3918 if kind == SyntaxKind::ExprStructCtorCall {
3919 Some(Self::from_syntax_node(db, node))
3920 } else {
3921 None
3922 }
3923 }
3924 fn as_syntax_node(&self) -> SyntaxNode {
3925 self.node.clone()
3926 }
3927 fn stable_ptr(&self) -> Self::StablePtr {
3928 ExprStructCtorCallPtr(self.node.0.stable_ptr)
3929 }
3930}
3931impl From<&ExprStructCtorCall> for SyntaxStablePtrId {
3932 fn from(node: &ExprStructCtorCall) -> Self {
3933 node.stable_ptr().untyped()
3934 }
3935}
3936#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3937pub struct StructArgListBraced {
3938 node: SyntaxNode,
3939 children: Arc<[SyntaxNode]>,
3940}
3941impl StructArgListBraced {
3942 pub const INDEX_LBRACE: usize = 0;
3943 pub const INDEX_ARGUMENTS: usize = 1;
3944 pub const INDEX_RBRACE: usize = 2;
3945 pub fn new_green(
3946 db: &dyn SyntaxGroup,
3947 lbrace: TerminalLBraceGreen,
3948 arguments: StructArgListGreen,
3949 rbrace: TerminalRBraceGreen,
3950 ) -> StructArgListBracedGreen {
3951 let children: Vec<GreenId> = vec![lbrace.0, arguments.0, rbrace.0];
3952 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
3953 StructArgListBracedGreen(
3954 Arc::new(GreenNode {
3955 kind: SyntaxKind::StructArgListBraced,
3956 details: GreenNodeDetails::Node { children, width },
3957 })
3958 .intern(db),
3959 )
3960 }
3961}
3962impl StructArgListBraced {
3963 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
3964 TerminalLBrace::from_syntax_node(db, self.children[0].clone())
3965 }
3966 pub fn arguments(&self, db: &dyn SyntaxGroup) -> StructArgList {
3967 StructArgList::from_syntax_node(db, self.children[1].clone())
3968 }
3969 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
3970 TerminalRBrace::from_syntax_node(db, self.children[2].clone())
3971 }
3972}
3973#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3974pub struct StructArgListBracedPtr(pub SyntaxStablePtrId);
3975impl StructArgListBracedPtr {}
3976impl TypedStablePtr for StructArgListBracedPtr {
3977 type SyntaxNode = StructArgListBraced;
3978 fn untyped(&self) -> SyntaxStablePtrId {
3979 self.0
3980 }
3981 fn lookup(&self, db: &dyn SyntaxGroup) -> StructArgListBraced {
3982 StructArgListBraced::from_syntax_node(db, self.0.lookup(db))
3983 }
3984}
3985impl From<StructArgListBracedPtr> for SyntaxStablePtrId {
3986 fn from(ptr: StructArgListBracedPtr) -> Self {
3987 ptr.untyped()
3988 }
3989}
3990#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3991pub struct StructArgListBracedGreen(pub GreenId);
3992impl TypedSyntaxNode for StructArgListBraced {
3993 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StructArgListBraced);
3994 type StablePtr = StructArgListBracedPtr;
3995 type Green = StructArgListBracedGreen;
3996 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3997 StructArgListBracedGreen(
3998 Arc::new(GreenNode {
3999 kind: SyntaxKind::StructArgListBraced,
4000 details: GreenNodeDetails::Node {
4001 children: vec![
4002 TerminalLBrace::missing(db).0,
4003 StructArgList::missing(db).0,
4004 TerminalRBrace::missing(db).0,
4005 ],
4006 width: TextWidth::default(),
4007 },
4008 })
4009 .intern(db),
4010 )
4011 }
4012 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4013 let kind = node.kind(db);
4014 assert_eq!(
4015 kind,
4016 SyntaxKind::StructArgListBraced,
4017 "Unexpected SyntaxKind {:?}. Expected {:?}.",
4018 kind,
4019 SyntaxKind::StructArgListBraced
4020 );
4021 let children = db.get_children(node.clone());
4022 Self { node, children }
4023 }
4024 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4025 let kind = node.kind(db);
4026 if kind == SyntaxKind::StructArgListBraced {
4027 Some(Self::from_syntax_node(db, node))
4028 } else {
4029 None
4030 }
4031 }
4032 fn as_syntax_node(&self) -> SyntaxNode {
4033 self.node.clone()
4034 }
4035 fn stable_ptr(&self) -> Self::StablePtr {
4036 StructArgListBracedPtr(self.node.0.stable_ptr)
4037 }
4038}
4039impl From<&StructArgListBraced> for SyntaxStablePtrId {
4040 fn from(node: &StructArgListBraced) -> Self {
4041 node.stable_ptr().untyped()
4042 }
4043}
4044#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4045pub struct ExprBlock {
4046 node: SyntaxNode,
4047 children: Arc<[SyntaxNode]>,
4048}
4049impl ExprBlock {
4050 pub const INDEX_LBRACE: usize = 0;
4051 pub const INDEX_STATEMENTS: usize = 1;
4052 pub const INDEX_RBRACE: usize = 2;
4053 pub fn new_green(
4054 db: &dyn SyntaxGroup,
4055 lbrace: TerminalLBraceGreen,
4056 statements: StatementListGreen,
4057 rbrace: TerminalRBraceGreen,
4058 ) -> ExprBlockGreen {
4059 let children: Vec<GreenId> = vec![lbrace.0, statements.0, rbrace.0];
4060 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
4061 ExprBlockGreen(
4062 Arc::new(GreenNode {
4063 kind: SyntaxKind::ExprBlock,
4064 details: GreenNodeDetails::Node { children, width },
4065 })
4066 .intern(db),
4067 )
4068 }
4069}
4070impl ExprBlock {
4071 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
4072 TerminalLBrace::from_syntax_node(db, self.children[0].clone())
4073 }
4074 pub fn statements(&self, db: &dyn SyntaxGroup) -> StatementList {
4075 StatementList::from_syntax_node(db, self.children[1].clone())
4076 }
4077 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
4078 TerminalRBrace::from_syntax_node(db, self.children[2].clone())
4079 }
4080}
4081#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4082pub struct ExprBlockPtr(pub SyntaxStablePtrId);
4083impl ExprBlockPtr {}
4084impl TypedStablePtr for ExprBlockPtr {
4085 type SyntaxNode = ExprBlock;
4086 fn untyped(&self) -> SyntaxStablePtrId {
4087 self.0
4088 }
4089 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprBlock {
4090 ExprBlock::from_syntax_node(db, self.0.lookup(db))
4091 }
4092}
4093impl From<ExprBlockPtr> for SyntaxStablePtrId {
4094 fn from(ptr: ExprBlockPtr) -> Self {
4095 ptr.untyped()
4096 }
4097}
4098#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4099pub struct ExprBlockGreen(pub GreenId);
4100impl TypedSyntaxNode for ExprBlock {
4101 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprBlock);
4102 type StablePtr = ExprBlockPtr;
4103 type Green = ExprBlockGreen;
4104 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4105 ExprBlockGreen(
4106 Arc::new(GreenNode {
4107 kind: SyntaxKind::ExprBlock,
4108 details: GreenNodeDetails::Node {
4109 children: vec![
4110 TerminalLBrace::missing(db).0,
4111 StatementList::missing(db).0,
4112 TerminalRBrace::missing(db).0,
4113 ],
4114 width: TextWidth::default(),
4115 },
4116 })
4117 .intern(db),
4118 )
4119 }
4120 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4121 let kind = node.kind(db);
4122 assert_eq!(
4123 kind,
4124 SyntaxKind::ExprBlock,
4125 "Unexpected SyntaxKind {:?}. Expected {:?}.",
4126 kind,
4127 SyntaxKind::ExprBlock
4128 );
4129 let children = db.get_children(node.clone());
4130 Self { node, children }
4131 }
4132 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4133 let kind = node.kind(db);
4134 if kind == SyntaxKind::ExprBlock { Some(Self::from_syntax_node(db, node)) } else { None }
4135 }
4136 fn as_syntax_node(&self) -> SyntaxNode {
4137 self.node.clone()
4138 }
4139 fn stable_ptr(&self) -> Self::StablePtr {
4140 ExprBlockPtr(self.node.0.stable_ptr)
4141 }
4142}
4143impl From<&ExprBlock> for SyntaxStablePtrId {
4144 fn from(node: &ExprBlock) -> Self {
4145 node.stable_ptr().untyped()
4146 }
4147}
4148#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4149pub struct ExprMatch {
4150 node: SyntaxNode,
4151 children: Arc<[SyntaxNode]>,
4152}
4153impl ExprMatch {
4154 pub const INDEX_MATCH_KW: usize = 0;
4155 pub const INDEX_EXPR: usize = 1;
4156 pub const INDEX_LBRACE: usize = 2;
4157 pub const INDEX_ARMS: usize = 3;
4158 pub const INDEX_RBRACE: usize = 4;
4159 pub fn new_green(
4160 db: &dyn SyntaxGroup,
4161 match_kw: TerminalMatchGreen,
4162 expr: ExprGreen,
4163 lbrace: TerminalLBraceGreen,
4164 arms: MatchArmsGreen,
4165 rbrace: TerminalRBraceGreen,
4166 ) -> ExprMatchGreen {
4167 let children: Vec<GreenId> = vec![match_kw.0, expr.0, lbrace.0, arms.0, rbrace.0];
4168 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
4169 ExprMatchGreen(
4170 Arc::new(GreenNode {
4171 kind: SyntaxKind::ExprMatch,
4172 details: GreenNodeDetails::Node { children, width },
4173 })
4174 .intern(db),
4175 )
4176 }
4177}
4178impl ExprMatch {
4179 pub fn match_kw(&self, db: &dyn SyntaxGroup) -> TerminalMatch {
4180 TerminalMatch::from_syntax_node(db, self.children[0].clone())
4181 }
4182 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
4183 Expr::from_syntax_node(db, self.children[1].clone())
4184 }
4185 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
4186 TerminalLBrace::from_syntax_node(db, self.children[2].clone())
4187 }
4188 pub fn arms(&self, db: &dyn SyntaxGroup) -> MatchArms {
4189 MatchArms::from_syntax_node(db, self.children[3].clone())
4190 }
4191 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
4192 TerminalRBrace::from_syntax_node(db, self.children[4].clone())
4193 }
4194}
4195#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4196pub struct ExprMatchPtr(pub SyntaxStablePtrId);
4197impl ExprMatchPtr {}
4198impl TypedStablePtr for ExprMatchPtr {
4199 type SyntaxNode = ExprMatch;
4200 fn untyped(&self) -> SyntaxStablePtrId {
4201 self.0
4202 }
4203 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprMatch {
4204 ExprMatch::from_syntax_node(db, self.0.lookup(db))
4205 }
4206}
4207impl From<ExprMatchPtr> for SyntaxStablePtrId {
4208 fn from(ptr: ExprMatchPtr) -> Self {
4209 ptr.untyped()
4210 }
4211}
4212#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4213pub struct ExprMatchGreen(pub GreenId);
4214impl TypedSyntaxNode for ExprMatch {
4215 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprMatch);
4216 type StablePtr = ExprMatchPtr;
4217 type Green = ExprMatchGreen;
4218 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4219 ExprMatchGreen(
4220 Arc::new(GreenNode {
4221 kind: SyntaxKind::ExprMatch,
4222 details: GreenNodeDetails::Node {
4223 children: vec![
4224 TerminalMatch::missing(db).0,
4225 Expr::missing(db).0,
4226 TerminalLBrace::missing(db).0,
4227 MatchArms::missing(db).0,
4228 TerminalRBrace::missing(db).0,
4229 ],
4230 width: TextWidth::default(),
4231 },
4232 })
4233 .intern(db),
4234 )
4235 }
4236 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4237 let kind = node.kind(db);
4238 assert_eq!(
4239 kind,
4240 SyntaxKind::ExprMatch,
4241 "Unexpected SyntaxKind {:?}. Expected {:?}.",
4242 kind,
4243 SyntaxKind::ExprMatch
4244 );
4245 let children = db.get_children(node.clone());
4246 Self { node, children }
4247 }
4248 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4249 let kind = node.kind(db);
4250 if kind == SyntaxKind::ExprMatch { Some(Self::from_syntax_node(db, node)) } else { None }
4251 }
4252 fn as_syntax_node(&self) -> SyntaxNode {
4253 self.node.clone()
4254 }
4255 fn stable_ptr(&self) -> Self::StablePtr {
4256 ExprMatchPtr(self.node.0.stable_ptr)
4257 }
4258}
4259impl From<&ExprMatch> for SyntaxStablePtrId {
4260 fn from(node: &ExprMatch) -> Self {
4261 node.stable_ptr().untyped()
4262 }
4263}
4264#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4265pub struct MatchArms(ElementList<MatchArm, 2>);
4266impl Deref for MatchArms {
4267 type Target = ElementList<MatchArm, 2>;
4268 fn deref(&self) -> &Self::Target {
4269 &self.0
4270 }
4271}
4272impl MatchArms {
4273 pub fn new_green(
4274 db: &dyn SyntaxGroup,
4275 children: Vec<MatchArmsElementOrSeparatorGreen>,
4276 ) -> MatchArmsGreen {
4277 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
4278 MatchArmsGreen(
4279 Arc::new(GreenNode {
4280 kind: SyntaxKind::MatchArms,
4281 details: GreenNodeDetails::Node {
4282 children: children.iter().map(|x| x.id()).collect(),
4283 width,
4284 },
4285 })
4286 .intern(db),
4287 )
4288 }
4289}
4290#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4291pub struct MatchArmsPtr(pub SyntaxStablePtrId);
4292impl TypedStablePtr for MatchArmsPtr {
4293 type SyntaxNode = MatchArms;
4294 fn untyped(&self) -> SyntaxStablePtrId {
4295 self.0
4296 }
4297 fn lookup(&self, db: &dyn SyntaxGroup) -> MatchArms {
4298 MatchArms::from_syntax_node(db, self.0.lookup(db))
4299 }
4300}
4301impl From<MatchArmsPtr> for SyntaxStablePtrId {
4302 fn from(ptr: MatchArmsPtr) -> Self {
4303 ptr.untyped()
4304 }
4305}
4306#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4307pub enum MatchArmsElementOrSeparatorGreen {
4308 Separator(TerminalCommaGreen),
4309 Element(MatchArmGreen),
4310}
4311impl From<TerminalCommaGreen> for MatchArmsElementOrSeparatorGreen {
4312 fn from(value: TerminalCommaGreen) -> Self {
4313 MatchArmsElementOrSeparatorGreen::Separator(value)
4314 }
4315}
4316impl From<MatchArmGreen> for MatchArmsElementOrSeparatorGreen {
4317 fn from(value: MatchArmGreen) -> Self {
4318 MatchArmsElementOrSeparatorGreen::Element(value)
4319 }
4320}
4321impl MatchArmsElementOrSeparatorGreen {
4322 fn id(&self) -> GreenId {
4323 match self {
4324 MatchArmsElementOrSeparatorGreen::Separator(green) => green.0,
4325 MatchArmsElementOrSeparatorGreen::Element(green) => green.0,
4326 }
4327 }
4328}
4329#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4330pub struct MatchArmsGreen(pub GreenId);
4331impl TypedSyntaxNode for MatchArms {
4332 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::MatchArms);
4333 type StablePtr = MatchArmsPtr;
4334 type Green = MatchArmsGreen;
4335 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4336 MatchArmsGreen(
4337 Arc::new(GreenNode {
4338 kind: SyntaxKind::MatchArms,
4339 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
4340 })
4341 .intern(db),
4342 )
4343 }
4344 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4345 Self(ElementList::new(node))
4346 }
4347 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4348 if node.kind(db) == SyntaxKind::MatchArms {
4349 Some(Self(ElementList::new(node)))
4350 } else {
4351 None
4352 }
4353 }
4354 fn as_syntax_node(&self) -> SyntaxNode {
4355 self.node.clone()
4356 }
4357 fn stable_ptr(&self) -> Self::StablePtr {
4358 MatchArmsPtr(self.node.0.stable_ptr)
4359 }
4360}
4361impl From<&MatchArms> for SyntaxStablePtrId {
4362 fn from(node: &MatchArms) -> Self {
4363 node.stable_ptr().untyped()
4364 }
4365}
4366#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4367pub struct MatchArm {
4368 node: SyntaxNode,
4369 children: Arc<[SyntaxNode]>,
4370}
4371impl MatchArm {
4372 pub const INDEX_PATTERNS: usize = 0;
4373 pub const INDEX_ARROW: usize = 1;
4374 pub const INDEX_EXPRESSION: usize = 2;
4375 pub fn new_green(
4376 db: &dyn SyntaxGroup,
4377 patterns: PatternListOrGreen,
4378 arrow: TerminalMatchArrowGreen,
4379 expression: ExprGreen,
4380 ) -> MatchArmGreen {
4381 let children: Vec<GreenId> = vec![patterns.0, arrow.0, expression.0];
4382 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
4383 MatchArmGreen(
4384 Arc::new(GreenNode {
4385 kind: SyntaxKind::MatchArm,
4386 details: GreenNodeDetails::Node { children, width },
4387 })
4388 .intern(db),
4389 )
4390 }
4391}
4392impl MatchArm {
4393 pub fn patterns(&self, db: &dyn SyntaxGroup) -> PatternListOr {
4394 PatternListOr::from_syntax_node(db, self.children[0].clone())
4395 }
4396 pub fn arrow(&self, db: &dyn SyntaxGroup) -> TerminalMatchArrow {
4397 TerminalMatchArrow::from_syntax_node(db, self.children[1].clone())
4398 }
4399 pub fn expression(&self, db: &dyn SyntaxGroup) -> Expr {
4400 Expr::from_syntax_node(db, self.children[2].clone())
4401 }
4402}
4403#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4404pub struct MatchArmPtr(pub SyntaxStablePtrId);
4405impl MatchArmPtr {}
4406impl TypedStablePtr for MatchArmPtr {
4407 type SyntaxNode = MatchArm;
4408 fn untyped(&self) -> SyntaxStablePtrId {
4409 self.0
4410 }
4411 fn lookup(&self, db: &dyn SyntaxGroup) -> MatchArm {
4412 MatchArm::from_syntax_node(db, self.0.lookup(db))
4413 }
4414}
4415impl From<MatchArmPtr> for SyntaxStablePtrId {
4416 fn from(ptr: MatchArmPtr) -> Self {
4417 ptr.untyped()
4418 }
4419}
4420#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4421pub struct MatchArmGreen(pub GreenId);
4422impl TypedSyntaxNode for MatchArm {
4423 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::MatchArm);
4424 type StablePtr = MatchArmPtr;
4425 type Green = MatchArmGreen;
4426 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4427 MatchArmGreen(
4428 Arc::new(GreenNode {
4429 kind: SyntaxKind::MatchArm,
4430 details: GreenNodeDetails::Node {
4431 children: vec![
4432 PatternListOr::missing(db).0,
4433 TerminalMatchArrow::missing(db).0,
4434 Expr::missing(db).0,
4435 ],
4436 width: TextWidth::default(),
4437 },
4438 })
4439 .intern(db),
4440 )
4441 }
4442 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4443 let kind = node.kind(db);
4444 assert_eq!(
4445 kind,
4446 SyntaxKind::MatchArm,
4447 "Unexpected SyntaxKind {:?}. Expected {:?}.",
4448 kind,
4449 SyntaxKind::MatchArm
4450 );
4451 let children = db.get_children(node.clone());
4452 Self { node, children }
4453 }
4454 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4455 let kind = node.kind(db);
4456 if kind == SyntaxKind::MatchArm { Some(Self::from_syntax_node(db, node)) } else { None }
4457 }
4458 fn as_syntax_node(&self) -> SyntaxNode {
4459 self.node.clone()
4460 }
4461 fn stable_ptr(&self) -> Self::StablePtr {
4462 MatchArmPtr(self.node.0.stable_ptr)
4463 }
4464}
4465impl From<&MatchArm> for SyntaxStablePtrId {
4466 fn from(node: &MatchArm) -> Self {
4467 node.stable_ptr().untyped()
4468 }
4469}
4470#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4471pub struct ExprIf {
4472 node: SyntaxNode,
4473 children: Arc<[SyntaxNode]>,
4474}
4475impl ExprIf {
4476 pub const INDEX_IF_KW: usize = 0;
4477 pub const INDEX_CONDITION: usize = 1;
4478 pub const INDEX_IF_BLOCK: usize = 2;
4479 pub const INDEX_ELSE_CLAUSE: usize = 3;
4480 pub fn new_green(
4481 db: &dyn SyntaxGroup,
4482 if_kw: TerminalIfGreen,
4483 condition: ConditionGreen,
4484 if_block: ExprBlockGreen,
4485 else_clause: OptionElseClauseGreen,
4486 ) -> ExprIfGreen {
4487 let children: Vec<GreenId> = vec![if_kw.0, condition.0, if_block.0, else_clause.0];
4488 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
4489 ExprIfGreen(
4490 Arc::new(GreenNode {
4491 kind: SyntaxKind::ExprIf,
4492 details: GreenNodeDetails::Node { children, width },
4493 })
4494 .intern(db),
4495 )
4496 }
4497}
4498impl ExprIf {
4499 pub fn if_kw(&self, db: &dyn SyntaxGroup) -> TerminalIf {
4500 TerminalIf::from_syntax_node(db, self.children[0].clone())
4501 }
4502 pub fn condition(&self, db: &dyn SyntaxGroup) -> Condition {
4503 Condition::from_syntax_node(db, self.children[1].clone())
4504 }
4505 pub fn if_block(&self, db: &dyn SyntaxGroup) -> ExprBlock {
4506 ExprBlock::from_syntax_node(db, self.children[2].clone())
4507 }
4508 pub fn else_clause(&self, db: &dyn SyntaxGroup) -> OptionElseClause {
4509 OptionElseClause::from_syntax_node(db, self.children[3].clone())
4510 }
4511}
4512#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4513pub struct ExprIfPtr(pub SyntaxStablePtrId);
4514impl ExprIfPtr {}
4515impl TypedStablePtr for ExprIfPtr {
4516 type SyntaxNode = ExprIf;
4517 fn untyped(&self) -> SyntaxStablePtrId {
4518 self.0
4519 }
4520 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprIf {
4521 ExprIf::from_syntax_node(db, self.0.lookup(db))
4522 }
4523}
4524impl From<ExprIfPtr> for SyntaxStablePtrId {
4525 fn from(ptr: ExprIfPtr) -> Self {
4526 ptr.untyped()
4527 }
4528}
4529#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4530pub struct ExprIfGreen(pub GreenId);
4531impl TypedSyntaxNode for ExprIf {
4532 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprIf);
4533 type StablePtr = ExprIfPtr;
4534 type Green = ExprIfGreen;
4535 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4536 ExprIfGreen(
4537 Arc::new(GreenNode {
4538 kind: SyntaxKind::ExprIf,
4539 details: GreenNodeDetails::Node {
4540 children: vec![
4541 TerminalIf::missing(db).0,
4542 Condition::missing(db).0,
4543 ExprBlock::missing(db).0,
4544 OptionElseClause::missing(db).0,
4545 ],
4546 width: TextWidth::default(),
4547 },
4548 })
4549 .intern(db),
4550 )
4551 }
4552 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4553 let kind = node.kind(db);
4554 assert_eq!(
4555 kind,
4556 SyntaxKind::ExprIf,
4557 "Unexpected SyntaxKind {:?}. Expected {:?}.",
4558 kind,
4559 SyntaxKind::ExprIf
4560 );
4561 let children = db.get_children(node.clone());
4562 Self { node, children }
4563 }
4564 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4565 let kind = node.kind(db);
4566 if kind == SyntaxKind::ExprIf { Some(Self::from_syntax_node(db, node)) } else { None }
4567 }
4568 fn as_syntax_node(&self) -> SyntaxNode {
4569 self.node.clone()
4570 }
4571 fn stable_ptr(&self) -> Self::StablePtr {
4572 ExprIfPtr(self.node.0.stable_ptr)
4573 }
4574}
4575impl From<&ExprIf> for SyntaxStablePtrId {
4576 fn from(node: &ExprIf) -> Self {
4577 node.stable_ptr().untyped()
4578 }
4579}
4580#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4581pub enum Condition {
4582 Let(ConditionLet),
4583 Expr(ConditionExpr),
4584}
4585#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4586pub struct ConditionPtr(pub SyntaxStablePtrId);
4587impl TypedStablePtr for ConditionPtr {
4588 type SyntaxNode = Condition;
4589 fn untyped(&self) -> SyntaxStablePtrId {
4590 self.0
4591 }
4592 fn lookup(&self, db: &dyn SyntaxGroup) -> Condition {
4593 Condition::from_syntax_node(db, self.0.lookup(db))
4594 }
4595}
4596impl From<ConditionPtr> for SyntaxStablePtrId {
4597 fn from(ptr: ConditionPtr) -> Self {
4598 ptr.untyped()
4599 }
4600}
4601impl From<ConditionLetPtr> for ConditionPtr {
4602 fn from(value: ConditionLetPtr) -> Self {
4603 Self(value.0)
4604 }
4605}
4606impl From<ConditionExprPtr> for ConditionPtr {
4607 fn from(value: ConditionExprPtr) -> Self {
4608 Self(value.0)
4609 }
4610}
4611impl From<ConditionLetGreen> for ConditionGreen {
4612 fn from(value: ConditionLetGreen) -> Self {
4613 Self(value.0)
4614 }
4615}
4616impl From<ConditionExprGreen> for ConditionGreen {
4617 fn from(value: ConditionExprGreen) -> Self {
4618 Self(value.0)
4619 }
4620}
4621#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4622pub struct ConditionGreen(pub GreenId);
4623impl TypedSyntaxNode for Condition {
4624 const OPTIONAL_KIND: Option<SyntaxKind> = None;
4625 type StablePtr = ConditionPtr;
4626 type Green = ConditionGreen;
4627 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4628 panic!("No missing variant.");
4629 }
4630 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4631 let kind = node.kind(db);
4632 match kind {
4633 SyntaxKind::ConditionLet => Condition::Let(ConditionLet::from_syntax_node(db, node)),
4634 SyntaxKind::ConditionExpr => Condition::Expr(ConditionExpr::from_syntax_node(db, node)),
4635 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "Condition"),
4636 }
4637 }
4638 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4639 let kind = node.kind(db);
4640 match kind {
4641 SyntaxKind::ConditionLet => {
4642 Some(Condition::Let(ConditionLet::from_syntax_node(db, node)))
4643 }
4644 SyntaxKind::ConditionExpr => {
4645 Some(Condition::Expr(ConditionExpr::from_syntax_node(db, node)))
4646 }
4647 _ => None,
4648 }
4649 }
4650 fn as_syntax_node(&self) -> SyntaxNode {
4651 match self {
4652 Condition::Let(x) => x.as_syntax_node(),
4653 Condition::Expr(x) => x.as_syntax_node(),
4654 }
4655 }
4656 fn stable_ptr(&self) -> Self::StablePtr {
4657 ConditionPtr(self.as_syntax_node().0.stable_ptr)
4658 }
4659}
4660impl From<&Condition> for SyntaxStablePtrId {
4661 fn from(node: &Condition) -> Self {
4662 node.stable_ptr().untyped()
4663 }
4664}
4665impl Condition {
4666 pub fn is_variant(kind: SyntaxKind) -> bool {
4668 matches!(kind, SyntaxKind::ConditionLet | SyntaxKind::ConditionExpr)
4669 }
4670}
4671#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4672pub struct ConditionLet {
4673 node: SyntaxNode,
4674 children: Arc<[SyntaxNode]>,
4675}
4676impl ConditionLet {
4677 pub const INDEX_LET_KW: usize = 0;
4678 pub const INDEX_PATTERNS: usize = 1;
4679 pub const INDEX_EQ: usize = 2;
4680 pub const INDEX_EXPR: usize = 3;
4681 pub fn new_green(
4682 db: &dyn SyntaxGroup,
4683 let_kw: TerminalLetGreen,
4684 patterns: PatternListOrGreen,
4685 eq: TerminalEqGreen,
4686 expr: ExprGreen,
4687 ) -> ConditionLetGreen {
4688 let children: Vec<GreenId> = vec![let_kw.0, patterns.0, eq.0, expr.0];
4689 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
4690 ConditionLetGreen(
4691 Arc::new(GreenNode {
4692 kind: SyntaxKind::ConditionLet,
4693 details: GreenNodeDetails::Node { children, width },
4694 })
4695 .intern(db),
4696 )
4697 }
4698}
4699impl ConditionLet {
4700 pub fn let_kw(&self, db: &dyn SyntaxGroup) -> TerminalLet {
4701 TerminalLet::from_syntax_node(db, self.children[0].clone())
4702 }
4703 pub fn patterns(&self, db: &dyn SyntaxGroup) -> PatternListOr {
4704 PatternListOr::from_syntax_node(db, self.children[1].clone())
4705 }
4706 pub fn eq(&self, db: &dyn SyntaxGroup) -> TerminalEq {
4707 TerminalEq::from_syntax_node(db, self.children[2].clone())
4708 }
4709 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
4710 Expr::from_syntax_node(db, self.children[3].clone())
4711 }
4712}
4713#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4714pub struct ConditionLetPtr(pub SyntaxStablePtrId);
4715impl ConditionLetPtr {}
4716impl TypedStablePtr for ConditionLetPtr {
4717 type SyntaxNode = ConditionLet;
4718 fn untyped(&self) -> SyntaxStablePtrId {
4719 self.0
4720 }
4721 fn lookup(&self, db: &dyn SyntaxGroup) -> ConditionLet {
4722 ConditionLet::from_syntax_node(db, self.0.lookup(db))
4723 }
4724}
4725impl From<ConditionLetPtr> for SyntaxStablePtrId {
4726 fn from(ptr: ConditionLetPtr) -> Self {
4727 ptr.untyped()
4728 }
4729}
4730#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4731pub struct ConditionLetGreen(pub GreenId);
4732impl TypedSyntaxNode for ConditionLet {
4733 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ConditionLet);
4734 type StablePtr = ConditionLetPtr;
4735 type Green = ConditionLetGreen;
4736 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4737 ConditionLetGreen(
4738 Arc::new(GreenNode {
4739 kind: SyntaxKind::ConditionLet,
4740 details: GreenNodeDetails::Node {
4741 children: vec![
4742 TerminalLet::missing(db).0,
4743 PatternListOr::missing(db).0,
4744 TerminalEq::missing(db).0,
4745 Expr::missing(db).0,
4746 ],
4747 width: TextWidth::default(),
4748 },
4749 })
4750 .intern(db),
4751 )
4752 }
4753 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4754 let kind = node.kind(db);
4755 assert_eq!(
4756 kind,
4757 SyntaxKind::ConditionLet,
4758 "Unexpected SyntaxKind {:?}. Expected {:?}.",
4759 kind,
4760 SyntaxKind::ConditionLet
4761 );
4762 let children = db.get_children(node.clone());
4763 Self { node, children }
4764 }
4765 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4766 let kind = node.kind(db);
4767 if kind == SyntaxKind::ConditionLet { Some(Self::from_syntax_node(db, node)) } else { None }
4768 }
4769 fn as_syntax_node(&self) -> SyntaxNode {
4770 self.node.clone()
4771 }
4772 fn stable_ptr(&self) -> Self::StablePtr {
4773 ConditionLetPtr(self.node.0.stable_ptr)
4774 }
4775}
4776impl From<&ConditionLet> for SyntaxStablePtrId {
4777 fn from(node: &ConditionLet) -> Self {
4778 node.stable_ptr().untyped()
4779 }
4780}
4781#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4782pub struct ConditionExpr {
4783 node: SyntaxNode,
4784 children: Arc<[SyntaxNode]>,
4785}
4786impl ConditionExpr {
4787 pub const INDEX_EXPR: usize = 0;
4788 pub fn new_green(db: &dyn SyntaxGroup, expr: ExprGreen) -> ConditionExprGreen {
4789 let children: Vec<GreenId> = vec![expr.0];
4790 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
4791 ConditionExprGreen(
4792 Arc::new(GreenNode {
4793 kind: SyntaxKind::ConditionExpr,
4794 details: GreenNodeDetails::Node { children, width },
4795 })
4796 .intern(db),
4797 )
4798 }
4799}
4800impl ConditionExpr {
4801 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
4802 Expr::from_syntax_node(db, self.children[0].clone())
4803 }
4804}
4805#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4806pub struct ConditionExprPtr(pub SyntaxStablePtrId);
4807impl ConditionExprPtr {}
4808impl TypedStablePtr for ConditionExprPtr {
4809 type SyntaxNode = ConditionExpr;
4810 fn untyped(&self) -> SyntaxStablePtrId {
4811 self.0
4812 }
4813 fn lookup(&self, db: &dyn SyntaxGroup) -> ConditionExpr {
4814 ConditionExpr::from_syntax_node(db, self.0.lookup(db))
4815 }
4816}
4817impl From<ConditionExprPtr> for SyntaxStablePtrId {
4818 fn from(ptr: ConditionExprPtr) -> Self {
4819 ptr.untyped()
4820 }
4821}
4822#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4823pub struct ConditionExprGreen(pub GreenId);
4824impl TypedSyntaxNode for ConditionExpr {
4825 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ConditionExpr);
4826 type StablePtr = ConditionExprPtr;
4827 type Green = ConditionExprGreen;
4828 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4829 ConditionExprGreen(
4830 Arc::new(GreenNode {
4831 kind: SyntaxKind::ConditionExpr,
4832 details: GreenNodeDetails::Node {
4833 children: vec![Expr::missing(db).0],
4834 width: TextWidth::default(),
4835 },
4836 })
4837 .intern(db),
4838 )
4839 }
4840 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4841 let kind = node.kind(db);
4842 assert_eq!(
4843 kind,
4844 SyntaxKind::ConditionExpr,
4845 "Unexpected SyntaxKind {:?}. Expected {:?}.",
4846 kind,
4847 SyntaxKind::ConditionExpr
4848 );
4849 let children = db.get_children(node.clone());
4850 Self { node, children }
4851 }
4852 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4853 let kind = node.kind(db);
4854 if kind == SyntaxKind::ConditionExpr {
4855 Some(Self::from_syntax_node(db, node))
4856 } else {
4857 None
4858 }
4859 }
4860 fn as_syntax_node(&self) -> SyntaxNode {
4861 self.node.clone()
4862 }
4863 fn stable_ptr(&self) -> Self::StablePtr {
4864 ConditionExprPtr(self.node.0.stable_ptr)
4865 }
4866}
4867impl From<&ConditionExpr> for SyntaxStablePtrId {
4868 fn from(node: &ConditionExpr) -> Self {
4869 node.stable_ptr().untyped()
4870 }
4871}
4872#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4873pub enum BlockOrIf {
4874 Block(ExprBlock),
4875 If(ExprIf),
4876}
4877#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4878pub struct BlockOrIfPtr(pub SyntaxStablePtrId);
4879impl TypedStablePtr for BlockOrIfPtr {
4880 type SyntaxNode = BlockOrIf;
4881 fn untyped(&self) -> SyntaxStablePtrId {
4882 self.0
4883 }
4884 fn lookup(&self, db: &dyn SyntaxGroup) -> BlockOrIf {
4885 BlockOrIf::from_syntax_node(db, self.0.lookup(db))
4886 }
4887}
4888impl From<BlockOrIfPtr> for SyntaxStablePtrId {
4889 fn from(ptr: BlockOrIfPtr) -> Self {
4890 ptr.untyped()
4891 }
4892}
4893impl From<ExprBlockPtr> for BlockOrIfPtr {
4894 fn from(value: ExprBlockPtr) -> Self {
4895 Self(value.0)
4896 }
4897}
4898impl From<ExprIfPtr> for BlockOrIfPtr {
4899 fn from(value: ExprIfPtr) -> Self {
4900 Self(value.0)
4901 }
4902}
4903impl From<ExprBlockGreen> for BlockOrIfGreen {
4904 fn from(value: ExprBlockGreen) -> Self {
4905 Self(value.0)
4906 }
4907}
4908impl From<ExprIfGreen> for BlockOrIfGreen {
4909 fn from(value: ExprIfGreen) -> Self {
4910 Self(value.0)
4911 }
4912}
4913#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4914pub struct BlockOrIfGreen(pub GreenId);
4915impl TypedSyntaxNode for BlockOrIf {
4916 const OPTIONAL_KIND: Option<SyntaxKind> = None;
4917 type StablePtr = BlockOrIfPtr;
4918 type Green = BlockOrIfGreen;
4919 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4920 panic!("No missing variant.");
4921 }
4922 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4923 let kind = node.kind(db);
4924 match kind {
4925 SyntaxKind::ExprBlock => BlockOrIf::Block(ExprBlock::from_syntax_node(db, node)),
4926 SyntaxKind::ExprIf => BlockOrIf::If(ExprIf::from_syntax_node(db, node)),
4927 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "BlockOrIf"),
4928 }
4929 }
4930 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4931 let kind = node.kind(db);
4932 match kind {
4933 SyntaxKind::ExprBlock => Some(BlockOrIf::Block(ExprBlock::from_syntax_node(db, node))),
4934 SyntaxKind::ExprIf => Some(BlockOrIf::If(ExprIf::from_syntax_node(db, node))),
4935 _ => None,
4936 }
4937 }
4938 fn as_syntax_node(&self) -> SyntaxNode {
4939 match self {
4940 BlockOrIf::Block(x) => x.as_syntax_node(),
4941 BlockOrIf::If(x) => x.as_syntax_node(),
4942 }
4943 }
4944 fn stable_ptr(&self) -> Self::StablePtr {
4945 BlockOrIfPtr(self.as_syntax_node().0.stable_ptr)
4946 }
4947}
4948impl From<&BlockOrIf> for SyntaxStablePtrId {
4949 fn from(node: &BlockOrIf) -> Self {
4950 node.stable_ptr().untyped()
4951 }
4952}
4953impl BlockOrIf {
4954 pub fn is_variant(kind: SyntaxKind) -> bool {
4956 matches!(kind, SyntaxKind::ExprBlock | SyntaxKind::ExprIf)
4957 }
4958}
4959#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4960pub struct ExprLoop {
4961 node: SyntaxNode,
4962 children: Arc<[SyntaxNode]>,
4963}
4964impl ExprLoop {
4965 pub const INDEX_LOOP_KW: usize = 0;
4966 pub const INDEX_BODY: usize = 1;
4967 pub fn new_green(
4968 db: &dyn SyntaxGroup,
4969 loop_kw: TerminalLoopGreen,
4970 body: ExprBlockGreen,
4971 ) -> ExprLoopGreen {
4972 let children: Vec<GreenId> = vec![loop_kw.0, body.0];
4973 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
4974 ExprLoopGreen(
4975 Arc::new(GreenNode {
4976 kind: SyntaxKind::ExprLoop,
4977 details: GreenNodeDetails::Node { children, width },
4978 })
4979 .intern(db),
4980 )
4981 }
4982}
4983impl ExprLoop {
4984 pub fn loop_kw(&self, db: &dyn SyntaxGroup) -> TerminalLoop {
4985 TerminalLoop::from_syntax_node(db, self.children[0].clone())
4986 }
4987 pub fn body(&self, db: &dyn SyntaxGroup) -> ExprBlock {
4988 ExprBlock::from_syntax_node(db, self.children[1].clone())
4989 }
4990}
4991#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4992pub struct ExprLoopPtr(pub SyntaxStablePtrId);
4993impl ExprLoopPtr {}
4994impl TypedStablePtr for ExprLoopPtr {
4995 type SyntaxNode = ExprLoop;
4996 fn untyped(&self) -> SyntaxStablePtrId {
4997 self.0
4998 }
4999 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprLoop {
5000 ExprLoop::from_syntax_node(db, self.0.lookup(db))
5001 }
5002}
5003impl From<ExprLoopPtr> for SyntaxStablePtrId {
5004 fn from(ptr: ExprLoopPtr) -> Self {
5005 ptr.untyped()
5006 }
5007}
5008#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5009pub struct ExprLoopGreen(pub GreenId);
5010impl TypedSyntaxNode for ExprLoop {
5011 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprLoop);
5012 type StablePtr = ExprLoopPtr;
5013 type Green = ExprLoopGreen;
5014 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5015 ExprLoopGreen(
5016 Arc::new(GreenNode {
5017 kind: SyntaxKind::ExprLoop,
5018 details: GreenNodeDetails::Node {
5019 children: vec![TerminalLoop::missing(db).0, ExprBlock::missing(db).0],
5020 width: TextWidth::default(),
5021 },
5022 })
5023 .intern(db),
5024 )
5025 }
5026 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5027 let kind = node.kind(db);
5028 assert_eq!(
5029 kind,
5030 SyntaxKind::ExprLoop,
5031 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5032 kind,
5033 SyntaxKind::ExprLoop
5034 );
5035 let children = db.get_children(node.clone());
5036 Self { node, children }
5037 }
5038 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5039 let kind = node.kind(db);
5040 if kind == SyntaxKind::ExprLoop { Some(Self::from_syntax_node(db, node)) } else { None }
5041 }
5042 fn as_syntax_node(&self) -> SyntaxNode {
5043 self.node.clone()
5044 }
5045 fn stable_ptr(&self) -> Self::StablePtr {
5046 ExprLoopPtr(self.node.0.stable_ptr)
5047 }
5048}
5049impl From<&ExprLoop> for SyntaxStablePtrId {
5050 fn from(node: &ExprLoop) -> Self {
5051 node.stable_ptr().untyped()
5052 }
5053}
5054#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5055pub struct ExprWhile {
5056 node: SyntaxNode,
5057 children: Arc<[SyntaxNode]>,
5058}
5059impl ExprWhile {
5060 pub const INDEX_WHILE_KW: usize = 0;
5061 pub const INDEX_CONDITION: usize = 1;
5062 pub const INDEX_BODY: usize = 2;
5063 pub fn new_green(
5064 db: &dyn SyntaxGroup,
5065 while_kw: TerminalWhileGreen,
5066 condition: ConditionGreen,
5067 body: ExprBlockGreen,
5068 ) -> ExprWhileGreen {
5069 let children: Vec<GreenId> = vec![while_kw.0, condition.0, body.0];
5070 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
5071 ExprWhileGreen(
5072 Arc::new(GreenNode {
5073 kind: SyntaxKind::ExprWhile,
5074 details: GreenNodeDetails::Node { children, width },
5075 })
5076 .intern(db),
5077 )
5078 }
5079}
5080impl ExprWhile {
5081 pub fn while_kw(&self, db: &dyn SyntaxGroup) -> TerminalWhile {
5082 TerminalWhile::from_syntax_node(db, self.children[0].clone())
5083 }
5084 pub fn condition(&self, db: &dyn SyntaxGroup) -> Condition {
5085 Condition::from_syntax_node(db, self.children[1].clone())
5086 }
5087 pub fn body(&self, db: &dyn SyntaxGroup) -> ExprBlock {
5088 ExprBlock::from_syntax_node(db, self.children[2].clone())
5089 }
5090}
5091#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5092pub struct ExprWhilePtr(pub SyntaxStablePtrId);
5093impl ExprWhilePtr {}
5094impl TypedStablePtr for ExprWhilePtr {
5095 type SyntaxNode = ExprWhile;
5096 fn untyped(&self) -> SyntaxStablePtrId {
5097 self.0
5098 }
5099 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprWhile {
5100 ExprWhile::from_syntax_node(db, self.0.lookup(db))
5101 }
5102}
5103impl From<ExprWhilePtr> for SyntaxStablePtrId {
5104 fn from(ptr: ExprWhilePtr) -> Self {
5105 ptr.untyped()
5106 }
5107}
5108#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5109pub struct ExprWhileGreen(pub GreenId);
5110impl TypedSyntaxNode for ExprWhile {
5111 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprWhile);
5112 type StablePtr = ExprWhilePtr;
5113 type Green = ExprWhileGreen;
5114 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5115 ExprWhileGreen(
5116 Arc::new(GreenNode {
5117 kind: SyntaxKind::ExprWhile,
5118 details: GreenNodeDetails::Node {
5119 children: vec![
5120 TerminalWhile::missing(db).0,
5121 Condition::missing(db).0,
5122 ExprBlock::missing(db).0,
5123 ],
5124 width: TextWidth::default(),
5125 },
5126 })
5127 .intern(db),
5128 )
5129 }
5130 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5131 let kind = node.kind(db);
5132 assert_eq!(
5133 kind,
5134 SyntaxKind::ExprWhile,
5135 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5136 kind,
5137 SyntaxKind::ExprWhile
5138 );
5139 let children = db.get_children(node.clone());
5140 Self { node, children }
5141 }
5142 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5143 let kind = node.kind(db);
5144 if kind == SyntaxKind::ExprWhile { Some(Self::from_syntax_node(db, node)) } else { None }
5145 }
5146 fn as_syntax_node(&self) -> SyntaxNode {
5147 self.node.clone()
5148 }
5149 fn stable_ptr(&self) -> Self::StablePtr {
5150 ExprWhilePtr(self.node.0.stable_ptr)
5151 }
5152}
5153impl From<&ExprWhile> for SyntaxStablePtrId {
5154 fn from(node: &ExprWhile) -> Self {
5155 node.stable_ptr().untyped()
5156 }
5157}
5158#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5159pub struct ExprFor {
5160 node: SyntaxNode,
5161 children: Arc<[SyntaxNode]>,
5162}
5163impl ExprFor {
5164 pub const INDEX_FOR_KW: usize = 0;
5165 pub const INDEX_PATTERN: usize = 1;
5166 pub const INDEX_IDENTIFIER: usize = 2;
5167 pub const INDEX_EXPR: usize = 3;
5168 pub const INDEX_BODY: usize = 4;
5169 pub fn new_green(
5170 db: &dyn SyntaxGroup,
5171 for_kw: TerminalForGreen,
5172 pattern: PatternGreen,
5173 identifier: TerminalIdentifierGreen,
5174 expr: ExprGreen,
5175 body: ExprBlockGreen,
5176 ) -> ExprForGreen {
5177 let children: Vec<GreenId> = vec![for_kw.0, pattern.0, identifier.0, expr.0, body.0];
5178 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
5179 ExprForGreen(
5180 Arc::new(GreenNode {
5181 kind: SyntaxKind::ExprFor,
5182 details: GreenNodeDetails::Node { children, width },
5183 })
5184 .intern(db),
5185 )
5186 }
5187}
5188impl ExprFor {
5189 pub fn for_kw(&self, db: &dyn SyntaxGroup) -> TerminalFor {
5190 TerminalFor::from_syntax_node(db, self.children[0].clone())
5191 }
5192 pub fn pattern(&self, db: &dyn SyntaxGroup) -> Pattern {
5193 Pattern::from_syntax_node(db, self.children[1].clone())
5194 }
5195 pub fn identifier(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
5196 TerminalIdentifier::from_syntax_node(db, self.children[2].clone())
5197 }
5198 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
5199 Expr::from_syntax_node(db, self.children[3].clone())
5200 }
5201 pub fn body(&self, db: &dyn SyntaxGroup) -> ExprBlock {
5202 ExprBlock::from_syntax_node(db, self.children[4].clone())
5203 }
5204}
5205#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5206pub struct ExprForPtr(pub SyntaxStablePtrId);
5207impl ExprForPtr {
5208 pub fn pattern_green(self, db: &dyn SyntaxGroup) -> PatternGreen {
5209 let ptr = self.0.lookup_intern(db);
5210 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
5211 PatternGreen(key_fields[0])
5212 } else {
5213 panic!("Unexpected key field query on root.");
5214 }
5215 }
5216 pub fn identifier_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
5217 let ptr = self.0.lookup_intern(db);
5218 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
5219 TerminalIdentifierGreen(key_fields[1])
5220 } else {
5221 panic!("Unexpected key field query on root.");
5222 }
5223 }
5224}
5225impl TypedStablePtr for ExprForPtr {
5226 type SyntaxNode = ExprFor;
5227 fn untyped(&self) -> SyntaxStablePtrId {
5228 self.0
5229 }
5230 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprFor {
5231 ExprFor::from_syntax_node(db, self.0.lookup(db))
5232 }
5233}
5234impl From<ExprForPtr> for SyntaxStablePtrId {
5235 fn from(ptr: ExprForPtr) -> Self {
5236 ptr.untyped()
5237 }
5238}
5239#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5240pub struct ExprForGreen(pub GreenId);
5241impl TypedSyntaxNode for ExprFor {
5242 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprFor);
5243 type StablePtr = ExprForPtr;
5244 type Green = ExprForGreen;
5245 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5246 ExprForGreen(
5247 Arc::new(GreenNode {
5248 kind: SyntaxKind::ExprFor,
5249 details: GreenNodeDetails::Node {
5250 children: vec![
5251 TerminalFor::missing(db).0,
5252 Pattern::missing(db).0,
5253 TerminalIdentifier::missing(db).0,
5254 Expr::missing(db).0,
5255 ExprBlock::missing(db).0,
5256 ],
5257 width: TextWidth::default(),
5258 },
5259 })
5260 .intern(db),
5261 )
5262 }
5263 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5264 let kind = node.kind(db);
5265 assert_eq!(
5266 kind,
5267 SyntaxKind::ExprFor,
5268 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5269 kind,
5270 SyntaxKind::ExprFor
5271 );
5272 let children = db.get_children(node.clone());
5273 Self { node, children }
5274 }
5275 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5276 let kind = node.kind(db);
5277 if kind == SyntaxKind::ExprFor { Some(Self::from_syntax_node(db, node)) } else { None }
5278 }
5279 fn as_syntax_node(&self) -> SyntaxNode {
5280 self.node.clone()
5281 }
5282 fn stable_ptr(&self) -> Self::StablePtr {
5283 ExprForPtr(self.node.0.stable_ptr)
5284 }
5285}
5286impl From<&ExprFor> for SyntaxStablePtrId {
5287 fn from(node: &ExprFor) -> Self {
5288 node.stable_ptr().untyped()
5289 }
5290}
5291#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5292pub struct ElseClause {
5293 node: SyntaxNode,
5294 children: Arc<[SyntaxNode]>,
5295}
5296impl ElseClause {
5297 pub const INDEX_ELSE_KW: usize = 0;
5298 pub const INDEX_ELSE_BLOCK_OR_IF: usize = 1;
5299 pub fn new_green(
5300 db: &dyn SyntaxGroup,
5301 else_kw: TerminalElseGreen,
5302 else_block_or_if: BlockOrIfGreen,
5303 ) -> ElseClauseGreen {
5304 let children: Vec<GreenId> = vec![else_kw.0, else_block_or_if.0];
5305 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
5306 ElseClauseGreen(
5307 Arc::new(GreenNode {
5308 kind: SyntaxKind::ElseClause,
5309 details: GreenNodeDetails::Node { children, width },
5310 })
5311 .intern(db),
5312 )
5313 }
5314}
5315impl ElseClause {
5316 pub fn else_kw(&self, db: &dyn SyntaxGroup) -> TerminalElse {
5317 TerminalElse::from_syntax_node(db, self.children[0].clone())
5318 }
5319 pub fn else_block_or_if(&self, db: &dyn SyntaxGroup) -> BlockOrIf {
5320 BlockOrIf::from_syntax_node(db, self.children[1].clone())
5321 }
5322}
5323#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5324pub struct ElseClausePtr(pub SyntaxStablePtrId);
5325impl ElseClausePtr {}
5326impl TypedStablePtr for ElseClausePtr {
5327 type SyntaxNode = ElseClause;
5328 fn untyped(&self) -> SyntaxStablePtrId {
5329 self.0
5330 }
5331 fn lookup(&self, db: &dyn SyntaxGroup) -> ElseClause {
5332 ElseClause::from_syntax_node(db, self.0.lookup(db))
5333 }
5334}
5335impl From<ElseClausePtr> for SyntaxStablePtrId {
5336 fn from(ptr: ElseClausePtr) -> Self {
5337 ptr.untyped()
5338 }
5339}
5340#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5341pub struct ElseClauseGreen(pub GreenId);
5342impl TypedSyntaxNode for ElseClause {
5343 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ElseClause);
5344 type StablePtr = ElseClausePtr;
5345 type Green = ElseClauseGreen;
5346 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5347 ElseClauseGreen(
5348 Arc::new(GreenNode {
5349 kind: SyntaxKind::ElseClause,
5350 details: GreenNodeDetails::Node {
5351 children: vec![TerminalElse::missing(db).0, BlockOrIf::missing(db).0],
5352 width: TextWidth::default(),
5353 },
5354 })
5355 .intern(db),
5356 )
5357 }
5358 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5359 let kind = node.kind(db);
5360 assert_eq!(
5361 kind,
5362 SyntaxKind::ElseClause,
5363 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5364 kind,
5365 SyntaxKind::ElseClause
5366 );
5367 let children = db.get_children(node.clone());
5368 Self { node, children }
5369 }
5370 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5371 let kind = node.kind(db);
5372 if kind == SyntaxKind::ElseClause { Some(Self::from_syntax_node(db, node)) } else { None }
5373 }
5374 fn as_syntax_node(&self) -> SyntaxNode {
5375 self.node.clone()
5376 }
5377 fn stable_ptr(&self) -> Self::StablePtr {
5378 ElseClausePtr(self.node.0.stable_ptr)
5379 }
5380}
5381impl From<&ElseClause> for SyntaxStablePtrId {
5382 fn from(node: &ElseClause) -> Self {
5383 node.stable_ptr().untyped()
5384 }
5385}
5386#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5387pub enum OptionElseClause {
5388 Empty(OptionElseClauseEmpty),
5389 ElseClause(ElseClause),
5390}
5391#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5392pub struct OptionElseClausePtr(pub SyntaxStablePtrId);
5393impl TypedStablePtr for OptionElseClausePtr {
5394 type SyntaxNode = OptionElseClause;
5395 fn untyped(&self) -> SyntaxStablePtrId {
5396 self.0
5397 }
5398 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionElseClause {
5399 OptionElseClause::from_syntax_node(db, self.0.lookup(db))
5400 }
5401}
5402impl From<OptionElseClausePtr> for SyntaxStablePtrId {
5403 fn from(ptr: OptionElseClausePtr) -> Self {
5404 ptr.untyped()
5405 }
5406}
5407impl From<OptionElseClauseEmptyPtr> for OptionElseClausePtr {
5408 fn from(value: OptionElseClauseEmptyPtr) -> Self {
5409 Self(value.0)
5410 }
5411}
5412impl From<ElseClausePtr> for OptionElseClausePtr {
5413 fn from(value: ElseClausePtr) -> Self {
5414 Self(value.0)
5415 }
5416}
5417impl From<OptionElseClauseEmptyGreen> for OptionElseClauseGreen {
5418 fn from(value: OptionElseClauseEmptyGreen) -> Self {
5419 Self(value.0)
5420 }
5421}
5422impl From<ElseClauseGreen> for OptionElseClauseGreen {
5423 fn from(value: ElseClauseGreen) -> Self {
5424 Self(value.0)
5425 }
5426}
5427#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5428pub struct OptionElseClauseGreen(pub GreenId);
5429impl TypedSyntaxNode for OptionElseClause {
5430 const OPTIONAL_KIND: Option<SyntaxKind> = None;
5431 type StablePtr = OptionElseClausePtr;
5432 type Green = OptionElseClauseGreen;
5433 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5434 panic!("No missing variant.");
5435 }
5436 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5437 let kind = node.kind(db);
5438 match kind {
5439 SyntaxKind::OptionElseClauseEmpty => {
5440 OptionElseClause::Empty(OptionElseClauseEmpty::from_syntax_node(db, node))
5441 }
5442 SyntaxKind::ElseClause => {
5443 OptionElseClause::ElseClause(ElseClause::from_syntax_node(db, node))
5444 }
5445 _ => panic!(
5446 "Unexpected syntax kind {:?} when constructing {}.",
5447 kind, "OptionElseClause"
5448 ),
5449 }
5450 }
5451 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5452 let kind = node.kind(db);
5453 match kind {
5454 SyntaxKind::OptionElseClauseEmpty => {
5455 Some(OptionElseClause::Empty(OptionElseClauseEmpty::from_syntax_node(db, node)))
5456 }
5457 SyntaxKind::ElseClause => {
5458 Some(OptionElseClause::ElseClause(ElseClause::from_syntax_node(db, node)))
5459 }
5460 _ => None,
5461 }
5462 }
5463 fn as_syntax_node(&self) -> SyntaxNode {
5464 match self {
5465 OptionElseClause::Empty(x) => x.as_syntax_node(),
5466 OptionElseClause::ElseClause(x) => x.as_syntax_node(),
5467 }
5468 }
5469 fn stable_ptr(&self) -> Self::StablePtr {
5470 OptionElseClausePtr(self.as_syntax_node().0.stable_ptr)
5471 }
5472}
5473impl From<&OptionElseClause> for SyntaxStablePtrId {
5474 fn from(node: &OptionElseClause) -> Self {
5475 node.stable_ptr().untyped()
5476 }
5477}
5478impl OptionElseClause {
5479 pub fn is_variant(kind: SyntaxKind) -> bool {
5481 matches!(kind, SyntaxKind::OptionElseClauseEmpty | SyntaxKind::ElseClause)
5482 }
5483}
5484#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5485pub struct OptionElseClauseEmpty {
5486 node: SyntaxNode,
5487 children: Arc<[SyntaxNode]>,
5488}
5489impl OptionElseClauseEmpty {
5490 pub fn new_green(db: &dyn SyntaxGroup) -> OptionElseClauseEmptyGreen {
5491 let children: Vec<GreenId> = vec![];
5492 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
5493 OptionElseClauseEmptyGreen(
5494 Arc::new(GreenNode {
5495 kind: SyntaxKind::OptionElseClauseEmpty,
5496 details: GreenNodeDetails::Node { children, width },
5497 })
5498 .intern(db),
5499 )
5500 }
5501}
5502impl OptionElseClauseEmpty {}
5503#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5504pub struct OptionElseClauseEmptyPtr(pub SyntaxStablePtrId);
5505impl OptionElseClauseEmptyPtr {}
5506impl TypedStablePtr for OptionElseClauseEmptyPtr {
5507 type SyntaxNode = OptionElseClauseEmpty;
5508 fn untyped(&self) -> SyntaxStablePtrId {
5509 self.0
5510 }
5511 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionElseClauseEmpty {
5512 OptionElseClauseEmpty::from_syntax_node(db, self.0.lookup(db))
5513 }
5514}
5515impl From<OptionElseClauseEmptyPtr> for SyntaxStablePtrId {
5516 fn from(ptr: OptionElseClauseEmptyPtr) -> Self {
5517 ptr.untyped()
5518 }
5519}
5520#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5521pub struct OptionElseClauseEmptyGreen(pub GreenId);
5522impl TypedSyntaxNode for OptionElseClauseEmpty {
5523 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionElseClauseEmpty);
5524 type StablePtr = OptionElseClauseEmptyPtr;
5525 type Green = OptionElseClauseEmptyGreen;
5526 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5527 OptionElseClauseEmptyGreen(
5528 Arc::new(GreenNode {
5529 kind: SyntaxKind::OptionElseClauseEmpty,
5530 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
5531 })
5532 .intern(db),
5533 )
5534 }
5535 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5536 let kind = node.kind(db);
5537 assert_eq!(
5538 kind,
5539 SyntaxKind::OptionElseClauseEmpty,
5540 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5541 kind,
5542 SyntaxKind::OptionElseClauseEmpty
5543 );
5544 let children = db.get_children(node.clone());
5545 Self { node, children }
5546 }
5547 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5548 let kind = node.kind(db);
5549 if kind == SyntaxKind::OptionElseClauseEmpty {
5550 Some(Self::from_syntax_node(db, node))
5551 } else {
5552 None
5553 }
5554 }
5555 fn as_syntax_node(&self) -> SyntaxNode {
5556 self.node.clone()
5557 }
5558 fn stable_ptr(&self) -> Self::StablePtr {
5559 OptionElseClauseEmptyPtr(self.node.0.stable_ptr)
5560 }
5561}
5562impl From<&OptionElseClauseEmpty> for SyntaxStablePtrId {
5563 fn from(node: &OptionElseClauseEmpty) -> Self {
5564 node.stable_ptr().untyped()
5565 }
5566}
5567#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5568pub struct ExprErrorPropagate {
5569 node: SyntaxNode,
5570 children: Arc<[SyntaxNode]>,
5571}
5572impl ExprErrorPropagate {
5573 pub const INDEX_EXPR: usize = 0;
5574 pub const INDEX_OP: usize = 1;
5575 pub fn new_green(
5576 db: &dyn SyntaxGroup,
5577 expr: ExprGreen,
5578 op: TerminalQuestionMarkGreen,
5579 ) -> ExprErrorPropagateGreen {
5580 let children: Vec<GreenId> = vec![expr.0, op.0];
5581 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
5582 ExprErrorPropagateGreen(
5583 Arc::new(GreenNode {
5584 kind: SyntaxKind::ExprErrorPropagate,
5585 details: GreenNodeDetails::Node { children, width },
5586 })
5587 .intern(db),
5588 )
5589 }
5590}
5591impl ExprErrorPropagate {
5592 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
5593 Expr::from_syntax_node(db, self.children[0].clone())
5594 }
5595 pub fn op(&self, db: &dyn SyntaxGroup) -> TerminalQuestionMark {
5596 TerminalQuestionMark::from_syntax_node(db, self.children[1].clone())
5597 }
5598}
5599#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5600pub struct ExprErrorPropagatePtr(pub SyntaxStablePtrId);
5601impl ExprErrorPropagatePtr {}
5602impl TypedStablePtr for ExprErrorPropagatePtr {
5603 type SyntaxNode = ExprErrorPropagate;
5604 fn untyped(&self) -> SyntaxStablePtrId {
5605 self.0
5606 }
5607 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprErrorPropagate {
5608 ExprErrorPropagate::from_syntax_node(db, self.0.lookup(db))
5609 }
5610}
5611impl From<ExprErrorPropagatePtr> for SyntaxStablePtrId {
5612 fn from(ptr: ExprErrorPropagatePtr) -> Self {
5613 ptr.untyped()
5614 }
5615}
5616#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5617pub struct ExprErrorPropagateGreen(pub GreenId);
5618impl TypedSyntaxNode for ExprErrorPropagate {
5619 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprErrorPropagate);
5620 type StablePtr = ExprErrorPropagatePtr;
5621 type Green = ExprErrorPropagateGreen;
5622 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5623 ExprErrorPropagateGreen(
5624 Arc::new(GreenNode {
5625 kind: SyntaxKind::ExprErrorPropagate,
5626 details: GreenNodeDetails::Node {
5627 children: vec![Expr::missing(db).0, TerminalQuestionMark::missing(db).0],
5628 width: TextWidth::default(),
5629 },
5630 })
5631 .intern(db),
5632 )
5633 }
5634 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5635 let kind = node.kind(db);
5636 assert_eq!(
5637 kind,
5638 SyntaxKind::ExprErrorPropagate,
5639 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5640 kind,
5641 SyntaxKind::ExprErrorPropagate
5642 );
5643 let children = db.get_children(node.clone());
5644 Self { node, children }
5645 }
5646 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5647 let kind = node.kind(db);
5648 if kind == SyntaxKind::ExprErrorPropagate {
5649 Some(Self::from_syntax_node(db, node))
5650 } else {
5651 None
5652 }
5653 }
5654 fn as_syntax_node(&self) -> SyntaxNode {
5655 self.node.clone()
5656 }
5657 fn stable_ptr(&self) -> Self::StablePtr {
5658 ExprErrorPropagatePtr(self.node.0.stable_ptr)
5659 }
5660}
5661impl From<&ExprErrorPropagate> for SyntaxStablePtrId {
5662 fn from(node: &ExprErrorPropagate) -> Self {
5663 node.stable_ptr().untyped()
5664 }
5665}
5666#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5667pub struct ExprIndexed {
5668 node: SyntaxNode,
5669 children: Arc<[SyntaxNode]>,
5670}
5671impl ExprIndexed {
5672 pub const INDEX_EXPR: usize = 0;
5673 pub const INDEX_LBRACK: usize = 1;
5674 pub const INDEX_INDEX_EXPR: usize = 2;
5675 pub const INDEX_RBRACK: usize = 3;
5676 pub fn new_green(
5677 db: &dyn SyntaxGroup,
5678 expr: ExprGreen,
5679 lbrack: TerminalLBrackGreen,
5680 index_expr: ExprGreen,
5681 rbrack: TerminalRBrackGreen,
5682 ) -> ExprIndexedGreen {
5683 let children: Vec<GreenId> = vec![expr.0, lbrack.0, index_expr.0, rbrack.0];
5684 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
5685 ExprIndexedGreen(
5686 Arc::new(GreenNode {
5687 kind: SyntaxKind::ExprIndexed,
5688 details: GreenNodeDetails::Node { children, width },
5689 })
5690 .intern(db),
5691 )
5692 }
5693}
5694impl ExprIndexed {
5695 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
5696 Expr::from_syntax_node(db, self.children[0].clone())
5697 }
5698 pub fn lbrack(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
5699 TerminalLBrack::from_syntax_node(db, self.children[1].clone())
5700 }
5701 pub fn index_expr(&self, db: &dyn SyntaxGroup) -> Expr {
5702 Expr::from_syntax_node(db, self.children[2].clone())
5703 }
5704 pub fn rbrack(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
5705 TerminalRBrack::from_syntax_node(db, self.children[3].clone())
5706 }
5707}
5708#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5709pub struct ExprIndexedPtr(pub SyntaxStablePtrId);
5710impl ExprIndexedPtr {}
5711impl TypedStablePtr for ExprIndexedPtr {
5712 type SyntaxNode = ExprIndexed;
5713 fn untyped(&self) -> SyntaxStablePtrId {
5714 self.0
5715 }
5716 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprIndexed {
5717 ExprIndexed::from_syntax_node(db, self.0.lookup(db))
5718 }
5719}
5720impl From<ExprIndexedPtr> for SyntaxStablePtrId {
5721 fn from(ptr: ExprIndexedPtr) -> Self {
5722 ptr.untyped()
5723 }
5724}
5725#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5726pub struct ExprIndexedGreen(pub GreenId);
5727impl TypedSyntaxNode for ExprIndexed {
5728 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprIndexed);
5729 type StablePtr = ExprIndexedPtr;
5730 type Green = ExprIndexedGreen;
5731 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5732 ExprIndexedGreen(
5733 Arc::new(GreenNode {
5734 kind: SyntaxKind::ExprIndexed,
5735 details: GreenNodeDetails::Node {
5736 children: vec![
5737 Expr::missing(db).0,
5738 TerminalLBrack::missing(db).0,
5739 Expr::missing(db).0,
5740 TerminalRBrack::missing(db).0,
5741 ],
5742 width: TextWidth::default(),
5743 },
5744 })
5745 .intern(db),
5746 )
5747 }
5748 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5749 let kind = node.kind(db);
5750 assert_eq!(
5751 kind,
5752 SyntaxKind::ExprIndexed,
5753 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5754 kind,
5755 SyntaxKind::ExprIndexed
5756 );
5757 let children = db.get_children(node.clone());
5758 Self { node, children }
5759 }
5760 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5761 let kind = node.kind(db);
5762 if kind == SyntaxKind::ExprIndexed { Some(Self::from_syntax_node(db, node)) } else { None }
5763 }
5764 fn as_syntax_node(&self) -> SyntaxNode {
5765 self.node.clone()
5766 }
5767 fn stable_ptr(&self) -> Self::StablePtr {
5768 ExprIndexedPtr(self.node.0.stable_ptr)
5769 }
5770}
5771impl From<&ExprIndexed> for SyntaxStablePtrId {
5772 fn from(node: &ExprIndexed) -> Self {
5773 node.stable_ptr().untyped()
5774 }
5775}
5776#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5777pub struct ExprInlineMacro {
5778 node: SyntaxNode,
5779 children: Arc<[SyntaxNode]>,
5780}
5781impl ExprInlineMacro {
5782 pub const INDEX_PATH: usize = 0;
5783 pub const INDEX_BANG: usize = 1;
5784 pub const INDEX_ARGUMENTS: usize = 2;
5785 pub fn new_green(
5786 db: &dyn SyntaxGroup,
5787 path: ExprPathGreen,
5788 bang: TerminalNotGreen,
5789 arguments: WrappedArgListGreen,
5790 ) -> ExprInlineMacroGreen {
5791 let children: Vec<GreenId> = vec![path.0, bang.0, arguments.0];
5792 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
5793 ExprInlineMacroGreen(
5794 Arc::new(GreenNode {
5795 kind: SyntaxKind::ExprInlineMacro,
5796 details: GreenNodeDetails::Node { children, width },
5797 })
5798 .intern(db),
5799 )
5800 }
5801}
5802impl ExprInlineMacro {
5803 pub fn path(&self, db: &dyn SyntaxGroup) -> ExprPath {
5804 ExprPath::from_syntax_node(db, self.children[0].clone())
5805 }
5806 pub fn bang(&self, db: &dyn SyntaxGroup) -> TerminalNot {
5807 TerminalNot::from_syntax_node(db, self.children[1].clone())
5808 }
5809 pub fn arguments(&self, db: &dyn SyntaxGroup) -> WrappedArgList {
5810 WrappedArgList::from_syntax_node(db, self.children[2].clone())
5811 }
5812}
5813#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5814pub struct ExprInlineMacroPtr(pub SyntaxStablePtrId);
5815impl ExprInlineMacroPtr {}
5816impl TypedStablePtr for ExprInlineMacroPtr {
5817 type SyntaxNode = ExprInlineMacro;
5818 fn untyped(&self) -> SyntaxStablePtrId {
5819 self.0
5820 }
5821 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprInlineMacro {
5822 ExprInlineMacro::from_syntax_node(db, self.0.lookup(db))
5823 }
5824}
5825impl From<ExprInlineMacroPtr> for SyntaxStablePtrId {
5826 fn from(ptr: ExprInlineMacroPtr) -> Self {
5827 ptr.untyped()
5828 }
5829}
5830#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5831pub struct ExprInlineMacroGreen(pub GreenId);
5832impl TypedSyntaxNode for ExprInlineMacro {
5833 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprInlineMacro);
5834 type StablePtr = ExprInlineMacroPtr;
5835 type Green = ExprInlineMacroGreen;
5836 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5837 ExprInlineMacroGreen(
5838 Arc::new(GreenNode {
5839 kind: SyntaxKind::ExprInlineMacro,
5840 details: GreenNodeDetails::Node {
5841 children: vec![
5842 ExprPath::missing(db).0,
5843 TerminalNot::missing(db).0,
5844 WrappedArgList::missing(db).0,
5845 ],
5846 width: TextWidth::default(),
5847 },
5848 })
5849 .intern(db),
5850 )
5851 }
5852 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5853 let kind = node.kind(db);
5854 assert_eq!(
5855 kind,
5856 SyntaxKind::ExprInlineMacro,
5857 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5858 kind,
5859 SyntaxKind::ExprInlineMacro
5860 );
5861 let children = db.get_children(node.clone());
5862 Self { node, children }
5863 }
5864 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5865 let kind = node.kind(db);
5866 if kind == SyntaxKind::ExprInlineMacro {
5867 Some(Self::from_syntax_node(db, node))
5868 } else {
5869 None
5870 }
5871 }
5872 fn as_syntax_node(&self) -> SyntaxNode {
5873 self.node.clone()
5874 }
5875 fn stable_ptr(&self) -> Self::StablePtr {
5876 ExprInlineMacroPtr(self.node.0.stable_ptr)
5877 }
5878}
5879impl From<&ExprInlineMacro> for SyntaxStablePtrId {
5880 fn from(node: &ExprInlineMacro) -> Self {
5881 node.stable_ptr().untyped()
5882 }
5883}
5884#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5885pub struct ExprFixedSizeArray {
5886 node: SyntaxNode,
5887 children: Arc<[SyntaxNode]>,
5888}
5889impl ExprFixedSizeArray {
5890 pub const INDEX_LBRACK: usize = 0;
5891 pub const INDEX_EXPRS: usize = 1;
5892 pub const INDEX_SIZE: usize = 2;
5893 pub const INDEX_RBRACK: usize = 3;
5894 pub fn new_green(
5895 db: &dyn SyntaxGroup,
5896 lbrack: TerminalLBrackGreen,
5897 exprs: ExprListGreen,
5898 size: OptionFixedSizeArraySizeGreen,
5899 rbrack: TerminalRBrackGreen,
5900 ) -> ExprFixedSizeArrayGreen {
5901 let children: Vec<GreenId> = vec![lbrack.0, exprs.0, size.0, rbrack.0];
5902 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
5903 ExprFixedSizeArrayGreen(
5904 Arc::new(GreenNode {
5905 kind: SyntaxKind::ExprFixedSizeArray,
5906 details: GreenNodeDetails::Node { children, width },
5907 })
5908 .intern(db),
5909 )
5910 }
5911}
5912impl ExprFixedSizeArray {
5913 pub fn lbrack(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
5914 TerminalLBrack::from_syntax_node(db, self.children[0].clone())
5915 }
5916 pub fn exprs(&self, db: &dyn SyntaxGroup) -> ExprList {
5917 ExprList::from_syntax_node(db, self.children[1].clone())
5918 }
5919 pub fn size(&self, db: &dyn SyntaxGroup) -> OptionFixedSizeArraySize {
5920 OptionFixedSizeArraySize::from_syntax_node(db, self.children[2].clone())
5921 }
5922 pub fn rbrack(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
5923 TerminalRBrack::from_syntax_node(db, self.children[3].clone())
5924 }
5925}
5926#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5927pub struct ExprFixedSizeArrayPtr(pub SyntaxStablePtrId);
5928impl ExprFixedSizeArrayPtr {}
5929impl TypedStablePtr for ExprFixedSizeArrayPtr {
5930 type SyntaxNode = ExprFixedSizeArray;
5931 fn untyped(&self) -> SyntaxStablePtrId {
5932 self.0
5933 }
5934 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprFixedSizeArray {
5935 ExprFixedSizeArray::from_syntax_node(db, self.0.lookup(db))
5936 }
5937}
5938impl From<ExprFixedSizeArrayPtr> for SyntaxStablePtrId {
5939 fn from(ptr: ExprFixedSizeArrayPtr) -> Self {
5940 ptr.untyped()
5941 }
5942}
5943#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5944pub struct ExprFixedSizeArrayGreen(pub GreenId);
5945impl TypedSyntaxNode for ExprFixedSizeArray {
5946 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprFixedSizeArray);
5947 type StablePtr = ExprFixedSizeArrayPtr;
5948 type Green = ExprFixedSizeArrayGreen;
5949 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5950 ExprFixedSizeArrayGreen(
5951 Arc::new(GreenNode {
5952 kind: SyntaxKind::ExprFixedSizeArray,
5953 details: GreenNodeDetails::Node {
5954 children: vec![
5955 TerminalLBrack::missing(db).0,
5956 ExprList::missing(db).0,
5957 OptionFixedSizeArraySize::missing(db).0,
5958 TerminalRBrack::missing(db).0,
5959 ],
5960 width: TextWidth::default(),
5961 },
5962 })
5963 .intern(db),
5964 )
5965 }
5966 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5967 let kind = node.kind(db);
5968 assert_eq!(
5969 kind,
5970 SyntaxKind::ExprFixedSizeArray,
5971 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5972 kind,
5973 SyntaxKind::ExprFixedSizeArray
5974 );
5975 let children = db.get_children(node.clone());
5976 Self { node, children }
5977 }
5978 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5979 let kind = node.kind(db);
5980 if kind == SyntaxKind::ExprFixedSizeArray {
5981 Some(Self::from_syntax_node(db, node))
5982 } else {
5983 None
5984 }
5985 }
5986 fn as_syntax_node(&self) -> SyntaxNode {
5987 self.node.clone()
5988 }
5989 fn stable_ptr(&self) -> Self::StablePtr {
5990 ExprFixedSizeArrayPtr(self.node.0.stable_ptr)
5991 }
5992}
5993impl From<&ExprFixedSizeArray> for SyntaxStablePtrId {
5994 fn from(node: &ExprFixedSizeArray) -> Self {
5995 node.stable_ptr().untyped()
5996 }
5997}
5998#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5999pub struct FixedSizeArraySize {
6000 node: SyntaxNode,
6001 children: Arc<[SyntaxNode]>,
6002}
6003impl FixedSizeArraySize {
6004 pub const INDEX_SEMICOLON: usize = 0;
6005 pub const INDEX_SIZE: usize = 1;
6006 pub fn new_green(
6007 db: &dyn SyntaxGroup,
6008 semicolon: TerminalSemicolonGreen,
6009 size: ExprGreen,
6010 ) -> FixedSizeArraySizeGreen {
6011 let children: Vec<GreenId> = vec![semicolon.0, size.0];
6012 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
6013 FixedSizeArraySizeGreen(
6014 Arc::new(GreenNode {
6015 kind: SyntaxKind::FixedSizeArraySize,
6016 details: GreenNodeDetails::Node { children, width },
6017 })
6018 .intern(db),
6019 )
6020 }
6021}
6022impl FixedSizeArraySize {
6023 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
6024 TerminalSemicolon::from_syntax_node(db, self.children[0].clone())
6025 }
6026 pub fn size(&self, db: &dyn SyntaxGroup) -> Expr {
6027 Expr::from_syntax_node(db, self.children[1].clone())
6028 }
6029}
6030#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6031pub struct FixedSizeArraySizePtr(pub SyntaxStablePtrId);
6032impl FixedSizeArraySizePtr {}
6033impl TypedStablePtr for FixedSizeArraySizePtr {
6034 type SyntaxNode = FixedSizeArraySize;
6035 fn untyped(&self) -> SyntaxStablePtrId {
6036 self.0
6037 }
6038 fn lookup(&self, db: &dyn SyntaxGroup) -> FixedSizeArraySize {
6039 FixedSizeArraySize::from_syntax_node(db, self.0.lookup(db))
6040 }
6041}
6042impl From<FixedSizeArraySizePtr> for SyntaxStablePtrId {
6043 fn from(ptr: FixedSizeArraySizePtr) -> Self {
6044 ptr.untyped()
6045 }
6046}
6047#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6048pub struct FixedSizeArraySizeGreen(pub GreenId);
6049impl TypedSyntaxNode for FixedSizeArraySize {
6050 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::FixedSizeArraySize);
6051 type StablePtr = FixedSizeArraySizePtr;
6052 type Green = FixedSizeArraySizeGreen;
6053 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6054 FixedSizeArraySizeGreen(
6055 Arc::new(GreenNode {
6056 kind: SyntaxKind::FixedSizeArraySize,
6057 details: GreenNodeDetails::Node {
6058 children: vec![TerminalSemicolon::missing(db).0, Expr::missing(db).0],
6059 width: TextWidth::default(),
6060 },
6061 })
6062 .intern(db),
6063 )
6064 }
6065 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6066 let kind = node.kind(db);
6067 assert_eq!(
6068 kind,
6069 SyntaxKind::FixedSizeArraySize,
6070 "Unexpected SyntaxKind {:?}. Expected {:?}.",
6071 kind,
6072 SyntaxKind::FixedSizeArraySize
6073 );
6074 let children = db.get_children(node.clone());
6075 Self { node, children }
6076 }
6077 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6078 let kind = node.kind(db);
6079 if kind == SyntaxKind::FixedSizeArraySize {
6080 Some(Self::from_syntax_node(db, node))
6081 } else {
6082 None
6083 }
6084 }
6085 fn as_syntax_node(&self) -> SyntaxNode {
6086 self.node.clone()
6087 }
6088 fn stable_ptr(&self) -> Self::StablePtr {
6089 FixedSizeArraySizePtr(self.node.0.stable_ptr)
6090 }
6091}
6092impl From<&FixedSizeArraySize> for SyntaxStablePtrId {
6093 fn from(node: &FixedSizeArraySize) -> Self {
6094 node.stable_ptr().untyped()
6095 }
6096}
6097#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6098pub enum OptionFixedSizeArraySize {
6099 Empty(OptionFixedSizeArraySizeEmpty),
6100 FixedSizeArraySize(FixedSizeArraySize),
6101}
6102#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6103pub struct OptionFixedSizeArraySizePtr(pub SyntaxStablePtrId);
6104impl TypedStablePtr for OptionFixedSizeArraySizePtr {
6105 type SyntaxNode = OptionFixedSizeArraySize;
6106 fn untyped(&self) -> SyntaxStablePtrId {
6107 self.0
6108 }
6109 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionFixedSizeArraySize {
6110 OptionFixedSizeArraySize::from_syntax_node(db, self.0.lookup(db))
6111 }
6112}
6113impl From<OptionFixedSizeArraySizePtr> for SyntaxStablePtrId {
6114 fn from(ptr: OptionFixedSizeArraySizePtr) -> Self {
6115 ptr.untyped()
6116 }
6117}
6118impl From<OptionFixedSizeArraySizeEmptyPtr> for OptionFixedSizeArraySizePtr {
6119 fn from(value: OptionFixedSizeArraySizeEmptyPtr) -> Self {
6120 Self(value.0)
6121 }
6122}
6123impl From<FixedSizeArraySizePtr> for OptionFixedSizeArraySizePtr {
6124 fn from(value: FixedSizeArraySizePtr) -> Self {
6125 Self(value.0)
6126 }
6127}
6128impl From<OptionFixedSizeArraySizeEmptyGreen> for OptionFixedSizeArraySizeGreen {
6129 fn from(value: OptionFixedSizeArraySizeEmptyGreen) -> Self {
6130 Self(value.0)
6131 }
6132}
6133impl From<FixedSizeArraySizeGreen> for OptionFixedSizeArraySizeGreen {
6134 fn from(value: FixedSizeArraySizeGreen) -> Self {
6135 Self(value.0)
6136 }
6137}
6138#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6139pub struct OptionFixedSizeArraySizeGreen(pub GreenId);
6140impl TypedSyntaxNode for OptionFixedSizeArraySize {
6141 const OPTIONAL_KIND: Option<SyntaxKind> = None;
6142 type StablePtr = OptionFixedSizeArraySizePtr;
6143 type Green = OptionFixedSizeArraySizeGreen;
6144 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6145 panic!("No missing variant.");
6146 }
6147 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6148 let kind = node.kind(db);
6149 match kind {
6150 SyntaxKind::OptionFixedSizeArraySizeEmpty => OptionFixedSizeArraySize::Empty(
6151 OptionFixedSizeArraySizeEmpty::from_syntax_node(db, node),
6152 ),
6153 SyntaxKind::FixedSizeArraySize => OptionFixedSizeArraySize::FixedSizeArraySize(
6154 FixedSizeArraySize::from_syntax_node(db, node),
6155 ),
6156 _ => panic!(
6157 "Unexpected syntax kind {:?} when constructing {}.",
6158 kind, "OptionFixedSizeArraySize"
6159 ),
6160 }
6161 }
6162 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6163 let kind = node.kind(db);
6164 match kind {
6165 SyntaxKind::OptionFixedSizeArraySizeEmpty => Some(OptionFixedSizeArraySize::Empty(
6166 OptionFixedSizeArraySizeEmpty::from_syntax_node(db, node),
6167 )),
6168 SyntaxKind::FixedSizeArraySize => Some(OptionFixedSizeArraySize::FixedSizeArraySize(
6169 FixedSizeArraySize::from_syntax_node(db, node),
6170 )),
6171 _ => None,
6172 }
6173 }
6174 fn as_syntax_node(&self) -> SyntaxNode {
6175 match self {
6176 OptionFixedSizeArraySize::Empty(x) => x.as_syntax_node(),
6177 OptionFixedSizeArraySize::FixedSizeArraySize(x) => x.as_syntax_node(),
6178 }
6179 }
6180 fn stable_ptr(&self) -> Self::StablePtr {
6181 OptionFixedSizeArraySizePtr(self.as_syntax_node().0.stable_ptr)
6182 }
6183}
6184impl From<&OptionFixedSizeArraySize> for SyntaxStablePtrId {
6185 fn from(node: &OptionFixedSizeArraySize) -> Self {
6186 node.stable_ptr().untyped()
6187 }
6188}
6189impl OptionFixedSizeArraySize {
6190 pub fn is_variant(kind: SyntaxKind) -> bool {
6192 matches!(kind, SyntaxKind::OptionFixedSizeArraySizeEmpty | SyntaxKind::FixedSizeArraySize)
6193 }
6194}
6195#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6196pub struct OptionFixedSizeArraySizeEmpty {
6197 node: SyntaxNode,
6198 children: Arc<[SyntaxNode]>,
6199}
6200impl OptionFixedSizeArraySizeEmpty {
6201 pub fn new_green(db: &dyn SyntaxGroup) -> OptionFixedSizeArraySizeEmptyGreen {
6202 let children: Vec<GreenId> = vec![];
6203 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
6204 OptionFixedSizeArraySizeEmptyGreen(
6205 Arc::new(GreenNode {
6206 kind: SyntaxKind::OptionFixedSizeArraySizeEmpty,
6207 details: GreenNodeDetails::Node { children, width },
6208 })
6209 .intern(db),
6210 )
6211 }
6212}
6213impl OptionFixedSizeArraySizeEmpty {}
6214#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6215pub struct OptionFixedSizeArraySizeEmptyPtr(pub SyntaxStablePtrId);
6216impl OptionFixedSizeArraySizeEmptyPtr {}
6217impl TypedStablePtr for OptionFixedSizeArraySizeEmptyPtr {
6218 type SyntaxNode = OptionFixedSizeArraySizeEmpty;
6219 fn untyped(&self) -> SyntaxStablePtrId {
6220 self.0
6221 }
6222 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionFixedSizeArraySizeEmpty {
6223 OptionFixedSizeArraySizeEmpty::from_syntax_node(db, self.0.lookup(db))
6224 }
6225}
6226impl From<OptionFixedSizeArraySizeEmptyPtr> for SyntaxStablePtrId {
6227 fn from(ptr: OptionFixedSizeArraySizeEmptyPtr) -> Self {
6228 ptr.untyped()
6229 }
6230}
6231#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6232pub struct OptionFixedSizeArraySizeEmptyGreen(pub GreenId);
6233impl TypedSyntaxNode for OptionFixedSizeArraySizeEmpty {
6234 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionFixedSizeArraySizeEmpty);
6235 type StablePtr = OptionFixedSizeArraySizeEmptyPtr;
6236 type Green = OptionFixedSizeArraySizeEmptyGreen;
6237 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6238 OptionFixedSizeArraySizeEmptyGreen(
6239 Arc::new(GreenNode {
6240 kind: SyntaxKind::OptionFixedSizeArraySizeEmpty,
6241 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
6242 })
6243 .intern(db),
6244 )
6245 }
6246 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6247 let kind = node.kind(db);
6248 assert_eq!(
6249 kind,
6250 SyntaxKind::OptionFixedSizeArraySizeEmpty,
6251 "Unexpected SyntaxKind {:?}. Expected {:?}.",
6252 kind,
6253 SyntaxKind::OptionFixedSizeArraySizeEmpty
6254 );
6255 let children = db.get_children(node.clone());
6256 Self { node, children }
6257 }
6258 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6259 let kind = node.kind(db);
6260 if kind == SyntaxKind::OptionFixedSizeArraySizeEmpty {
6261 Some(Self::from_syntax_node(db, node))
6262 } else {
6263 None
6264 }
6265 }
6266 fn as_syntax_node(&self) -> SyntaxNode {
6267 self.node.clone()
6268 }
6269 fn stable_ptr(&self) -> Self::StablePtr {
6270 OptionFixedSizeArraySizeEmptyPtr(self.node.0.stable_ptr)
6271 }
6272}
6273impl From<&OptionFixedSizeArraySizeEmpty> for SyntaxStablePtrId {
6274 fn from(node: &OptionFixedSizeArraySizeEmpty) -> Self {
6275 node.stable_ptr().untyped()
6276 }
6277}
6278#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6279pub struct ExprClosure {
6280 node: SyntaxNode,
6281 children: Arc<[SyntaxNode]>,
6282}
6283impl ExprClosure {
6284 pub const INDEX_WRAPPER: usize = 0;
6285 pub const INDEX_RET_TY: usize = 1;
6286 pub const INDEX_OPTIONAL_NO_PANIC: usize = 2;
6287 pub const INDEX_EXPR: usize = 3;
6288 pub fn new_green(
6289 db: &dyn SyntaxGroup,
6290 wrapper: ClosureParamWrapperGreen,
6291 ret_ty: OptionReturnTypeClauseGreen,
6292 optional_no_panic: OptionTerminalNoPanicGreen,
6293 expr: ExprGreen,
6294 ) -> ExprClosureGreen {
6295 let children: Vec<GreenId> = vec![wrapper.0, ret_ty.0, optional_no_panic.0, expr.0];
6296 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
6297 ExprClosureGreen(
6298 Arc::new(GreenNode {
6299 kind: SyntaxKind::ExprClosure,
6300 details: GreenNodeDetails::Node { children, width },
6301 })
6302 .intern(db),
6303 )
6304 }
6305}
6306impl ExprClosure {
6307 pub fn wrapper(&self, db: &dyn SyntaxGroup) -> ClosureParamWrapper {
6308 ClosureParamWrapper::from_syntax_node(db, self.children[0].clone())
6309 }
6310 pub fn ret_ty(&self, db: &dyn SyntaxGroup) -> OptionReturnTypeClause {
6311 OptionReturnTypeClause::from_syntax_node(db, self.children[1].clone())
6312 }
6313 pub fn optional_no_panic(&self, db: &dyn SyntaxGroup) -> OptionTerminalNoPanic {
6314 OptionTerminalNoPanic::from_syntax_node(db, self.children[2].clone())
6315 }
6316 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
6317 Expr::from_syntax_node(db, self.children[3].clone())
6318 }
6319}
6320#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6321pub struct ExprClosurePtr(pub SyntaxStablePtrId);
6322impl ExprClosurePtr {}
6323impl TypedStablePtr for ExprClosurePtr {
6324 type SyntaxNode = ExprClosure;
6325 fn untyped(&self) -> SyntaxStablePtrId {
6326 self.0
6327 }
6328 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprClosure {
6329 ExprClosure::from_syntax_node(db, self.0.lookup(db))
6330 }
6331}
6332impl From<ExprClosurePtr> for SyntaxStablePtrId {
6333 fn from(ptr: ExprClosurePtr) -> Self {
6334 ptr.untyped()
6335 }
6336}
6337#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6338pub struct ExprClosureGreen(pub GreenId);
6339impl TypedSyntaxNode for ExprClosure {
6340 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprClosure);
6341 type StablePtr = ExprClosurePtr;
6342 type Green = ExprClosureGreen;
6343 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6344 ExprClosureGreen(
6345 Arc::new(GreenNode {
6346 kind: SyntaxKind::ExprClosure,
6347 details: GreenNodeDetails::Node {
6348 children: vec![
6349 ClosureParamWrapper::missing(db).0,
6350 OptionReturnTypeClause::missing(db).0,
6351 OptionTerminalNoPanic::missing(db).0,
6352 Expr::missing(db).0,
6353 ],
6354 width: TextWidth::default(),
6355 },
6356 })
6357 .intern(db),
6358 )
6359 }
6360 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6361 let kind = node.kind(db);
6362 assert_eq!(
6363 kind,
6364 SyntaxKind::ExprClosure,
6365 "Unexpected SyntaxKind {:?}. Expected {:?}.",
6366 kind,
6367 SyntaxKind::ExprClosure
6368 );
6369 let children = db.get_children(node.clone());
6370 Self { node, children }
6371 }
6372 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6373 let kind = node.kind(db);
6374 if kind == SyntaxKind::ExprClosure { Some(Self::from_syntax_node(db, node)) } else { None }
6375 }
6376 fn as_syntax_node(&self) -> SyntaxNode {
6377 self.node.clone()
6378 }
6379 fn stable_ptr(&self) -> Self::StablePtr {
6380 ExprClosurePtr(self.node.0.stable_ptr)
6381 }
6382}
6383impl From<&ExprClosure> for SyntaxStablePtrId {
6384 fn from(node: &ExprClosure) -> Self {
6385 node.stable_ptr().untyped()
6386 }
6387}
6388#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6389pub enum ClosureParamWrapper {
6390 Nullary(TerminalOrOr),
6391 NAry(ClosureParamWrapperNAry),
6392}
6393#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6394pub struct ClosureParamWrapperPtr(pub SyntaxStablePtrId);
6395impl TypedStablePtr for ClosureParamWrapperPtr {
6396 type SyntaxNode = ClosureParamWrapper;
6397 fn untyped(&self) -> SyntaxStablePtrId {
6398 self.0
6399 }
6400 fn lookup(&self, db: &dyn SyntaxGroup) -> ClosureParamWrapper {
6401 ClosureParamWrapper::from_syntax_node(db, self.0.lookup(db))
6402 }
6403}
6404impl From<ClosureParamWrapperPtr> for SyntaxStablePtrId {
6405 fn from(ptr: ClosureParamWrapperPtr) -> Self {
6406 ptr.untyped()
6407 }
6408}
6409impl From<TerminalOrOrPtr> for ClosureParamWrapperPtr {
6410 fn from(value: TerminalOrOrPtr) -> Self {
6411 Self(value.0)
6412 }
6413}
6414impl From<ClosureParamWrapperNAryPtr> for ClosureParamWrapperPtr {
6415 fn from(value: ClosureParamWrapperNAryPtr) -> Self {
6416 Self(value.0)
6417 }
6418}
6419impl From<TerminalOrOrGreen> for ClosureParamWrapperGreen {
6420 fn from(value: TerminalOrOrGreen) -> Self {
6421 Self(value.0)
6422 }
6423}
6424impl From<ClosureParamWrapperNAryGreen> for ClosureParamWrapperGreen {
6425 fn from(value: ClosureParamWrapperNAryGreen) -> Self {
6426 Self(value.0)
6427 }
6428}
6429#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6430pub struct ClosureParamWrapperGreen(pub GreenId);
6431impl TypedSyntaxNode for ClosureParamWrapper {
6432 const OPTIONAL_KIND: Option<SyntaxKind> = None;
6433 type StablePtr = ClosureParamWrapperPtr;
6434 type Green = ClosureParamWrapperGreen;
6435 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6436 panic!("No missing variant.");
6437 }
6438 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6439 let kind = node.kind(db);
6440 match kind {
6441 SyntaxKind::TerminalOrOr => {
6442 ClosureParamWrapper::Nullary(TerminalOrOr::from_syntax_node(db, node))
6443 }
6444 SyntaxKind::ClosureParamWrapperNAry => {
6445 ClosureParamWrapper::NAry(ClosureParamWrapperNAry::from_syntax_node(db, node))
6446 }
6447 _ => panic!(
6448 "Unexpected syntax kind {:?} when constructing {}.",
6449 kind, "ClosureParamWrapper"
6450 ),
6451 }
6452 }
6453 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6454 let kind = node.kind(db);
6455 match kind {
6456 SyntaxKind::TerminalOrOr => {
6457 Some(ClosureParamWrapper::Nullary(TerminalOrOr::from_syntax_node(db, node)))
6458 }
6459 SyntaxKind::ClosureParamWrapperNAry => {
6460 Some(ClosureParamWrapper::NAry(ClosureParamWrapperNAry::from_syntax_node(db, node)))
6461 }
6462 _ => None,
6463 }
6464 }
6465 fn as_syntax_node(&self) -> SyntaxNode {
6466 match self {
6467 ClosureParamWrapper::Nullary(x) => x.as_syntax_node(),
6468 ClosureParamWrapper::NAry(x) => x.as_syntax_node(),
6469 }
6470 }
6471 fn stable_ptr(&self) -> Self::StablePtr {
6472 ClosureParamWrapperPtr(self.as_syntax_node().0.stable_ptr)
6473 }
6474}
6475impl From<&ClosureParamWrapper> for SyntaxStablePtrId {
6476 fn from(node: &ClosureParamWrapper) -> Self {
6477 node.stable_ptr().untyped()
6478 }
6479}
6480impl ClosureParamWrapper {
6481 pub fn is_variant(kind: SyntaxKind) -> bool {
6483 matches!(kind, SyntaxKind::TerminalOrOr | SyntaxKind::ClosureParamWrapperNAry)
6484 }
6485}
6486#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6487pub struct ClosureParamWrapperNAry {
6488 node: SyntaxNode,
6489 children: Arc<[SyntaxNode]>,
6490}
6491impl ClosureParamWrapperNAry {
6492 pub const INDEX_LEFTOR: usize = 0;
6493 pub const INDEX_PARAMS: usize = 1;
6494 pub const INDEX_RIGHTOR: usize = 2;
6495 pub fn new_green(
6496 db: &dyn SyntaxGroup,
6497 leftor: TerminalOrGreen,
6498 params: ParamListGreen,
6499 rightor: TerminalOrGreen,
6500 ) -> ClosureParamWrapperNAryGreen {
6501 let children: Vec<GreenId> = vec![leftor.0, params.0, rightor.0];
6502 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
6503 ClosureParamWrapperNAryGreen(
6504 Arc::new(GreenNode {
6505 kind: SyntaxKind::ClosureParamWrapperNAry,
6506 details: GreenNodeDetails::Node { children, width },
6507 })
6508 .intern(db),
6509 )
6510 }
6511}
6512impl ClosureParamWrapperNAry {
6513 pub fn leftor(&self, db: &dyn SyntaxGroup) -> TerminalOr {
6514 TerminalOr::from_syntax_node(db, self.children[0].clone())
6515 }
6516 pub fn params(&self, db: &dyn SyntaxGroup) -> ParamList {
6517 ParamList::from_syntax_node(db, self.children[1].clone())
6518 }
6519 pub fn rightor(&self, db: &dyn SyntaxGroup) -> TerminalOr {
6520 TerminalOr::from_syntax_node(db, self.children[2].clone())
6521 }
6522}
6523#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6524pub struct ClosureParamWrapperNAryPtr(pub SyntaxStablePtrId);
6525impl ClosureParamWrapperNAryPtr {}
6526impl TypedStablePtr for ClosureParamWrapperNAryPtr {
6527 type SyntaxNode = ClosureParamWrapperNAry;
6528 fn untyped(&self) -> SyntaxStablePtrId {
6529 self.0
6530 }
6531 fn lookup(&self, db: &dyn SyntaxGroup) -> ClosureParamWrapperNAry {
6532 ClosureParamWrapperNAry::from_syntax_node(db, self.0.lookup(db))
6533 }
6534}
6535impl From<ClosureParamWrapperNAryPtr> for SyntaxStablePtrId {
6536 fn from(ptr: ClosureParamWrapperNAryPtr) -> Self {
6537 ptr.untyped()
6538 }
6539}
6540#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6541pub struct ClosureParamWrapperNAryGreen(pub GreenId);
6542impl TypedSyntaxNode for ClosureParamWrapperNAry {
6543 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ClosureParamWrapperNAry);
6544 type StablePtr = ClosureParamWrapperNAryPtr;
6545 type Green = ClosureParamWrapperNAryGreen;
6546 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6547 ClosureParamWrapperNAryGreen(
6548 Arc::new(GreenNode {
6549 kind: SyntaxKind::ClosureParamWrapperNAry,
6550 details: GreenNodeDetails::Node {
6551 children: vec![
6552 TerminalOr::missing(db).0,
6553 ParamList::missing(db).0,
6554 TerminalOr::missing(db).0,
6555 ],
6556 width: TextWidth::default(),
6557 },
6558 })
6559 .intern(db),
6560 )
6561 }
6562 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6563 let kind = node.kind(db);
6564 assert_eq!(
6565 kind,
6566 SyntaxKind::ClosureParamWrapperNAry,
6567 "Unexpected SyntaxKind {:?}. Expected {:?}.",
6568 kind,
6569 SyntaxKind::ClosureParamWrapperNAry
6570 );
6571 let children = db.get_children(node.clone());
6572 Self { node, children }
6573 }
6574 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6575 let kind = node.kind(db);
6576 if kind == SyntaxKind::ClosureParamWrapperNAry {
6577 Some(Self::from_syntax_node(db, node))
6578 } else {
6579 None
6580 }
6581 }
6582 fn as_syntax_node(&self) -> SyntaxNode {
6583 self.node.clone()
6584 }
6585 fn stable_ptr(&self) -> Self::StablePtr {
6586 ClosureParamWrapperNAryPtr(self.node.0.stable_ptr)
6587 }
6588}
6589impl From<&ClosureParamWrapperNAry> for SyntaxStablePtrId {
6590 fn from(node: &ClosureParamWrapperNAry) -> Self {
6591 node.stable_ptr().untyped()
6592 }
6593}
6594#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6595pub struct StructArgExpr {
6596 node: SyntaxNode,
6597 children: Arc<[SyntaxNode]>,
6598}
6599impl StructArgExpr {
6600 pub const INDEX_COLON: usize = 0;
6601 pub const INDEX_EXPR: usize = 1;
6602 pub fn new_green(
6603 db: &dyn SyntaxGroup,
6604 colon: TerminalColonGreen,
6605 expr: ExprGreen,
6606 ) -> StructArgExprGreen {
6607 let children: Vec<GreenId> = vec![colon.0, expr.0];
6608 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
6609 StructArgExprGreen(
6610 Arc::new(GreenNode {
6611 kind: SyntaxKind::StructArgExpr,
6612 details: GreenNodeDetails::Node { children, width },
6613 })
6614 .intern(db),
6615 )
6616 }
6617}
6618impl StructArgExpr {
6619 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
6620 TerminalColon::from_syntax_node(db, self.children[0].clone())
6621 }
6622 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
6623 Expr::from_syntax_node(db, self.children[1].clone())
6624 }
6625}
6626#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6627pub struct StructArgExprPtr(pub SyntaxStablePtrId);
6628impl StructArgExprPtr {}
6629impl TypedStablePtr for StructArgExprPtr {
6630 type SyntaxNode = StructArgExpr;
6631 fn untyped(&self) -> SyntaxStablePtrId {
6632 self.0
6633 }
6634 fn lookup(&self, db: &dyn SyntaxGroup) -> StructArgExpr {
6635 StructArgExpr::from_syntax_node(db, self.0.lookup(db))
6636 }
6637}
6638impl From<StructArgExprPtr> for SyntaxStablePtrId {
6639 fn from(ptr: StructArgExprPtr) -> Self {
6640 ptr.untyped()
6641 }
6642}
6643#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6644pub struct StructArgExprGreen(pub GreenId);
6645impl TypedSyntaxNode for StructArgExpr {
6646 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StructArgExpr);
6647 type StablePtr = StructArgExprPtr;
6648 type Green = StructArgExprGreen;
6649 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6650 StructArgExprGreen(
6651 Arc::new(GreenNode {
6652 kind: SyntaxKind::StructArgExpr,
6653 details: GreenNodeDetails::Node {
6654 children: vec![TerminalColon::missing(db).0, Expr::missing(db).0],
6655 width: TextWidth::default(),
6656 },
6657 })
6658 .intern(db),
6659 )
6660 }
6661 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6662 let kind = node.kind(db);
6663 assert_eq!(
6664 kind,
6665 SyntaxKind::StructArgExpr,
6666 "Unexpected SyntaxKind {:?}. Expected {:?}.",
6667 kind,
6668 SyntaxKind::StructArgExpr
6669 );
6670 let children = db.get_children(node.clone());
6671 Self { node, children }
6672 }
6673 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6674 let kind = node.kind(db);
6675 if kind == SyntaxKind::StructArgExpr {
6676 Some(Self::from_syntax_node(db, node))
6677 } else {
6678 None
6679 }
6680 }
6681 fn as_syntax_node(&self) -> SyntaxNode {
6682 self.node.clone()
6683 }
6684 fn stable_ptr(&self) -> Self::StablePtr {
6685 StructArgExprPtr(self.node.0.stable_ptr)
6686 }
6687}
6688impl From<&StructArgExpr> for SyntaxStablePtrId {
6689 fn from(node: &StructArgExpr) -> Self {
6690 node.stable_ptr().untyped()
6691 }
6692}
6693#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6694pub enum OptionStructArgExpr {
6695 Empty(OptionStructArgExprEmpty),
6696 StructArgExpr(StructArgExpr),
6697}
6698#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6699pub struct OptionStructArgExprPtr(pub SyntaxStablePtrId);
6700impl TypedStablePtr for OptionStructArgExprPtr {
6701 type SyntaxNode = OptionStructArgExpr;
6702 fn untyped(&self) -> SyntaxStablePtrId {
6703 self.0
6704 }
6705 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionStructArgExpr {
6706 OptionStructArgExpr::from_syntax_node(db, self.0.lookup(db))
6707 }
6708}
6709impl From<OptionStructArgExprPtr> for SyntaxStablePtrId {
6710 fn from(ptr: OptionStructArgExprPtr) -> Self {
6711 ptr.untyped()
6712 }
6713}
6714impl From<OptionStructArgExprEmptyPtr> for OptionStructArgExprPtr {
6715 fn from(value: OptionStructArgExprEmptyPtr) -> Self {
6716 Self(value.0)
6717 }
6718}
6719impl From<StructArgExprPtr> for OptionStructArgExprPtr {
6720 fn from(value: StructArgExprPtr) -> Self {
6721 Self(value.0)
6722 }
6723}
6724impl From<OptionStructArgExprEmptyGreen> for OptionStructArgExprGreen {
6725 fn from(value: OptionStructArgExprEmptyGreen) -> Self {
6726 Self(value.0)
6727 }
6728}
6729impl From<StructArgExprGreen> for OptionStructArgExprGreen {
6730 fn from(value: StructArgExprGreen) -> Self {
6731 Self(value.0)
6732 }
6733}
6734#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6735pub struct OptionStructArgExprGreen(pub GreenId);
6736impl TypedSyntaxNode for OptionStructArgExpr {
6737 const OPTIONAL_KIND: Option<SyntaxKind> = None;
6738 type StablePtr = OptionStructArgExprPtr;
6739 type Green = OptionStructArgExprGreen;
6740 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6741 panic!("No missing variant.");
6742 }
6743 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6744 let kind = node.kind(db);
6745 match kind {
6746 SyntaxKind::OptionStructArgExprEmpty => {
6747 OptionStructArgExpr::Empty(OptionStructArgExprEmpty::from_syntax_node(db, node))
6748 }
6749 SyntaxKind::StructArgExpr => {
6750 OptionStructArgExpr::StructArgExpr(StructArgExpr::from_syntax_node(db, node))
6751 }
6752 _ => panic!(
6753 "Unexpected syntax kind {:?} when constructing {}.",
6754 kind, "OptionStructArgExpr"
6755 ),
6756 }
6757 }
6758 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6759 let kind = node.kind(db);
6760 match kind {
6761 SyntaxKind::OptionStructArgExprEmpty => Some(OptionStructArgExpr::Empty(
6762 OptionStructArgExprEmpty::from_syntax_node(db, node),
6763 )),
6764 SyntaxKind::StructArgExpr => {
6765 Some(OptionStructArgExpr::StructArgExpr(StructArgExpr::from_syntax_node(db, node)))
6766 }
6767 _ => None,
6768 }
6769 }
6770 fn as_syntax_node(&self) -> SyntaxNode {
6771 match self {
6772 OptionStructArgExpr::Empty(x) => x.as_syntax_node(),
6773 OptionStructArgExpr::StructArgExpr(x) => x.as_syntax_node(),
6774 }
6775 }
6776 fn stable_ptr(&self) -> Self::StablePtr {
6777 OptionStructArgExprPtr(self.as_syntax_node().0.stable_ptr)
6778 }
6779}
6780impl From<&OptionStructArgExpr> for SyntaxStablePtrId {
6781 fn from(node: &OptionStructArgExpr) -> Self {
6782 node.stable_ptr().untyped()
6783 }
6784}
6785impl OptionStructArgExpr {
6786 pub fn is_variant(kind: SyntaxKind) -> bool {
6788 matches!(kind, SyntaxKind::OptionStructArgExprEmpty | SyntaxKind::StructArgExpr)
6789 }
6790}
6791#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6792pub struct OptionStructArgExprEmpty {
6793 node: SyntaxNode,
6794 children: Arc<[SyntaxNode]>,
6795}
6796impl OptionStructArgExprEmpty {
6797 pub fn new_green(db: &dyn SyntaxGroup) -> OptionStructArgExprEmptyGreen {
6798 let children: Vec<GreenId> = vec![];
6799 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
6800 OptionStructArgExprEmptyGreen(
6801 Arc::new(GreenNode {
6802 kind: SyntaxKind::OptionStructArgExprEmpty,
6803 details: GreenNodeDetails::Node { children, width },
6804 })
6805 .intern(db),
6806 )
6807 }
6808}
6809impl OptionStructArgExprEmpty {}
6810#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6811pub struct OptionStructArgExprEmptyPtr(pub SyntaxStablePtrId);
6812impl OptionStructArgExprEmptyPtr {}
6813impl TypedStablePtr for OptionStructArgExprEmptyPtr {
6814 type SyntaxNode = OptionStructArgExprEmpty;
6815 fn untyped(&self) -> SyntaxStablePtrId {
6816 self.0
6817 }
6818 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionStructArgExprEmpty {
6819 OptionStructArgExprEmpty::from_syntax_node(db, self.0.lookup(db))
6820 }
6821}
6822impl From<OptionStructArgExprEmptyPtr> for SyntaxStablePtrId {
6823 fn from(ptr: OptionStructArgExprEmptyPtr) -> Self {
6824 ptr.untyped()
6825 }
6826}
6827#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6828pub struct OptionStructArgExprEmptyGreen(pub GreenId);
6829impl TypedSyntaxNode for OptionStructArgExprEmpty {
6830 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionStructArgExprEmpty);
6831 type StablePtr = OptionStructArgExprEmptyPtr;
6832 type Green = OptionStructArgExprEmptyGreen;
6833 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6834 OptionStructArgExprEmptyGreen(
6835 Arc::new(GreenNode {
6836 kind: SyntaxKind::OptionStructArgExprEmpty,
6837 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
6838 })
6839 .intern(db),
6840 )
6841 }
6842 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6843 let kind = node.kind(db);
6844 assert_eq!(
6845 kind,
6846 SyntaxKind::OptionStructArgExprEmpty,
6847 "Unexpected SyntaxKind {:?}. Expected {:?}.",
6848 kind,
6849 SyntaxKind::OptionStructArgExprEmpty
6850 );
6851 let children = db.get_children(node.clone());
6852 Self { node, children }
6853 }
6854 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6855 let kind = node.kind(db);
6856 if kind == SyntaxKind::OptionStructArgExprEmpty {
6857 Some(Self::from_syntax_node(db, node))
6858 } else {
6859 None
6860 }
6861 }
6862 fn as_syntax_node(&self) -> SyntaxNode {
6863 self.node.clone()
6864 }
6865 fn stable_ptr(&self) -> Self::StablePtr {
6866 OptionStructArgExprEmptyPtr(self.node.0.stable_ptr)
6867 }
6868}
6869impl From<&OptionStructArgExprEmpty> for SyntaxStablePtrId {
6870 fn from(node: &OptionStructArgExprEmpty) -> Self {
6871 node.stable_ptr().untyped()
6872 }
6873}
6874#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6875pub struct StructArgSingle {
6876 node: SyntaxNode,
6877 children: Arc<[SyntaxNode]>,
6878}
6879impl StructArgSingle {
6880 pub const INDEX_IDENTIFIER: usize = 0;
6881 pub const INDEX_ARG_EXPR: usize = 1;
6882 pub fn new_green(
6883 db: &dyn SyntaxGroup,
6884 identifier: TerminalIdentifierGreen,
6885 arg_expr: OptionStructArgExprGreen,
6886 ) -> StructArgSingleGreen {
6887 let children: Vec<GreenId> = vec![identifier.0, arg_expr.0];
6888 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
6889 StructArgSingleGreen(
6890 Arc::new(GreenNode {
6891 kind: SyntaxKind::StructArgSingle,
6892 details: GreenNodeDetails::Node { children, width },
6893 })
6894 .intern(db),
6895 )
6896 }
6897}
6898impl StructArgSingle {
6899 pub fn identifier(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
6900 TerminalIdentifier::from_syntax_node(db, self.children[0].clone())
6901 }
6902 pub fn arg_expr(&self, db: &dyn SyntaxGroup) -> OptionStructArgExpr {
6903 OptionStructArgExpr::from_syntax_node(db, self.children[1].clone())
6904 }
6905}
6906#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6907pub struct StructArgSinglePtr(pub SyntaxStablePtrId);
6908impl StructArgSinglePtr {
6909 pub fn identifier_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
6910 let ptr = self.0.lookup_intern(db);
6911 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
6912 TerminalIdentifierGreen(key_fields[0])
6913 } else {
6914 panic!("Unexpected key field query on root.");
6915 }
6916 }
6917}
6918impl TypedStablePtr for StructArgSinglePtr {
6919 type SyntaxNode = StructArgSingle;
6920 fn untyped(&self) -> SyntaxStablePtrId {
6921 self.0
6922 }
6923 fn lookup(&self, db: &dyn SyntaxGroup) -> StructArgSingle {
6924 StructArgSingle::from_syntax_node(db, self.0.lookup(db))
6925 }
6926}
6927impl From<StructArgSinglePtr> for SyntaxStablePtrId {
6928 fn from(ptr: StructArgSinglePtr) -> Self {
6929 ptr.untyped()
6930 }
6931}
6932#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6933pub struct StructArgSingleGreen(pub GreenId);
6934impl TypedSyntaxNode for StructArgSingle {
6935 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StructArgSingle);
6936 type StablePtr = StructArgSinglePtr;
6937 type Green = StructArgSingleGreen;
6938 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6939 StructArgSingleGreen(
6940 Arc::new(GreenNode {
6941 kind: SyntaxKind::StructArgSingle,
6942 details: GreenNodeDetails::Node {
6943 children: vec![
6944 TerminalIdentifier::missing(db).0,
6945 OptionStructArgExpr::missing(db).0,
6946 ],
6947 width: TextWidth::default(),
6948 },
6949 })
6950 .intern(db),
6951 )
6952 }
6953 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6954 let kind = node.kind(db);
6955 assert_eq!(
6956 kind,
6957 SyntaxKind::StructArgSingle,
6958 "Unexpected SyntaxKind {:?}. Expected {:?}.",
6959 kind,
6960 SyntaxKind::StructArgSingle
6961 );
6962 let children = db.get_children(node.clone());
6963 Self { node, children }
6964 }
6965 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6966 let kind = node.kind(db);
6967 if kind == SyntaxKind::StructArgSingle {
6968 Some(Self::from_syntax_node(db, node))
6969 } else {
6970 None
6971 }
6972 }
6973 fn as_syntax_node(&self) -> SyntaxNode {
6974 self.node.clone()
6975 }
6976 fn stable_ptr(&self) -> Self::StablePtr {
6977 StructArgSinglePtr(self.node.0.stable_ptr)
6978 }
6979}
6980impl From<&StructArgSingle> for SyntaxStablePtrId {
6981 fn from(node: &StructArgSingle) -> Self {
6982 node.stable_ptr().untyped()
6983 }
6984}
6985#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6986pub struct StructArgTail {
6987 node: SyntaxNode,
6988 children: Arc<[SyntaxNode]>,
6989}
6990impl StructArgTail {
6991 pub const INDEX_DOTDOT: usize = 0;
6992 pub const INDEX_EXPRESSION: usize = 1;
6993 pub fn new_green(
6994 db: &dyn SyntaxGroup,
6995 dotdot: TerminalDotDotGreen,
6996 expression: ExprGreen,
6997 ) -> StructArgTailGreen {
6998 let children: Vec<GreenId> = vec![dotdot.0, expression.0];
6999 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
7000 StructArgTailGreen(
7001 Arc::new(GreenNode {
7002 kind: SyntaxKind::StructArgTail,
7003 details: GreenNodeDetails::Node { children, width },
7004 })
7005 .intern(db),
7006 )
7007 }
7008}
7009impl StructArgTail {
7010 pub fn dotdot(&self, db: &dyn SyntaxGroup) -> TerminalDotDot {
7011 TerminalDotDot::from_syntax_node(db, self.children[0].clone())
7012 }
7013 pub fn expression(&self, db: &dyn SyntaxGroup) -> Expr {
7014 Expr::from_syntax_node(db, self.children[1].clone())
7015 }
7016}
7017#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7018pub struct StructArgTailPtr(pub SyntaxStablePtrId);
7019impl StructArgTailPtr {}
7020impl TypedStablePtr for StructArgTailPtr {
7021 type SyntaxNode = StructArgTail;
7022 fn untyped(&self) -> SyntaxStablePtrId {
7023 self.0
7024 }
7025 fn lookup(&self, db: &dyn SyntaxGroup) -> StructArgTail {
7026 StructArgTail::from_syntax_node(db, self.0.lookup(db))
7027 }
7028}
7029impl From<StructArgTailPtr> for SyntaxStablePtrId {
7030 fn from(ptr: StructArgTailPtr) -> Self {
7031 ptr.untyped()
7032 }
7033}
7034#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7035pub struct StructArgTailGreen(pub GreenId);
7036impl TypedSyntaxNode for StructArgTail {
7037 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StructArgTail);
7038 type StablePtr = StructArgTailPtr;
7039 type Green = StructArgTailGreen;
7040 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7041 StructArgTailGreen(
7042 Arc::new(GreenNode {
7043 kind: SyntaxKind::StructArgTail,
7044 details: GreenNodeDetails::Node {
7045 children: vec![TerminalDotDot::missing(db).0, Expr::missing(db).0],
7046 width: TextWidth::default(),
7047 },
7048 })
7049 .intern(db),
7050 )
7051 }
7052 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7053 let kind = node.kind(db);
7054 assert_eq!(
7055 kind,
7056 SyntaxKind::StructArgTail,
7057 "Unexpected SyntaxKind {:?}. Expected {:?}.",
7058 kind,
7059 SyntaxKind::StructArgTail
7060 );
7061 let children = db.get_children(node.clone());
7062 Self { node, children }
7063 }
7064 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7065 let kind = node.kind(db);
7066 if kind == SyntaxKind::StructArgTail {
7067 Some(Self::from_syntax_node(db, node))
7068 } else {
7069 None
7070 }
7071 }
7072 fn as_syntax_node(&self) -> SyntaxNode {
7073 self.node.clone()
7074 }
7075 fn stable_ptr(&self) -> Self::StablePtr {
7076 StructArgTailPtr(self.node.0.stable_ptr)
7077 }
7078}
7079impl From<&StructArgTail> for SyntaxStablePtrId {
7080 fn from(node: &StructArgTail) -> Self {
7081 node.stable_ptr().untyped()
7082 }
7083}
7084#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7085pub enum StructArg {
7086 StructArgSingle(StructArgSingle),
7087 StructArgTail(StructArgTail),
7088}
7089#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7090pub struct StructArgPtr(pub SyntaxStablePtrId);
7091impl TypedStablePtr for StructArgPtr {
7092 type SyntaxNode = StructArg;
7093 fn untyped(&self) -> SyntaxStablePtrId {
7094 self.0
7095 }
7096 fn lookup(&self, db: &dyn SyntaxGroup) -> StructArg {
7097 StructArg::from_syntax_node(db, self.0.lookup(db))
7098 }
7099}
7100impl From<StructArgPtr> for SyntaxStablePtrId {
7101 fn from(ptr: StructArgPtr) -> Self {
7102 ptr.untyped()
7103 }
7104}
7105impl From<StructArgSinglePtr> for StructArgPtr {
7106 fn from(value: StructArgSinglePtr) -> Self {
7107 Self(value.0)
7108 }
7109}
7110impl From<StructArgTailPtr> for StructArgPtr {
7111 fn from(value: StructArgTailPtr) -> Self {
7112 Self(value.0)
7113 }
7114}
7115impl From<StructArgSingleGreen> for StructArgGreen {
7116 fn from(value: StructArgSingleGreen) -> Self {
7117 Self(value.0)
7118 }
7119}
7120impl From<StructArgTailGreen> for StructArgGreen {
7121 fn from(value: StructArgTailGreen) -> Self {
7122 Self(value.0)
7123 }
7124}
7125#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7126pub struct StructArgGreen(pub GreenId);
7127impl TypedSyntaxNode for StructArg {
7128 const OPTIONAL_KIND: Option<SyntaxKind> = None;
7129 type StablePtr = StructArgPtr;
7130 type Green = StructArgGreen;
7131 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7132 panic!("No missing variant.");
7133 }
7134 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7135 let kind = node.kind(db);
7136 match kind {
7137 SyntaxKind::StructArgSingle => {
7138 StructArg::StructArgSingle(StructArgSingle::from_syntax_node(db, node))
7139 }
7140 SyntaxKind::StructArgTail => {
7141 StructArg::StructArgTail(StructArgTail::from_syntax_node(db, node))
7142 }
7143 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "StructArg"),
7144 }
7145 }
7146 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7147 let kind = node.kind(db);
7148 match kind {
7149 SyntaxKind::StructArgSingle => {
7150 Some(StructArg::StructArgSingle(StructArgSingle::from_syntax_node(db, node)))
7151 }
7152 SyntaxKind::StructArgTail => {
7153 Some(StructArg::StructArgTail(StructArgTail::from_syntax_node(db, node)))
7154 }
7155 _ => None,
7156 }
7157 }
7158 fn as_syntax_node(&self) -> SyntaxNode {
7159 match self {
7160 StructArg::StructArgSingle(x) => x.as_syntax_node(),
7161 StructArg::StructArgTail(x) => x.as_syntax_node(),
7162 }
7163 }
7164 fn stable_ptr(&self) -> Self::StablePtr {
7165 StructArgPtr(self.as_syntax_node().0.stable_ptr)
7166 }
7167}
7168impl From<&StructArg> for SyntaxStablePtrId {
7169 fn from(node: &StructArg) -> Self {
7170 node.stable_ptr().untyped()
7171 }
7172}
7173impl StructArg {
7174 pub fn is_variant(kind: SyntaxKind) -> bool {
7176 matches!(kind, SyntaxKind::StructArgSingle | SyntaxKind::StructArgTail)
7177 }
7178}
7179#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7180pub struct StructArgList(ElementList<StructArg, 2>);
7181impl Deref for StructArgList {
7182 type Target = ElementList<StructArg, 2>;
7183 fn deref(&self) -> &Self::Target {
7184 &self.0
7185 }
7186}
7187impl StructArgList {
7188 pub fn new_green(
7189 db: &dyn SyntaxGroup,
7190 children: Vec<StructArgListElementOrSeparatorGreen>,
7191 ) -> StructArgListGreen {
7192 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
7193 StructArgListGreen(
7194 Arc::new(GreenNode {
7195 kind: SyntaxKind::StructArgList,
7196 details: GreenNodeDetails::Node {
7197 children: children.iter().map(|x| x.id()).collect(),
7198 width,
7199 },
7200 })
7201 .intern(db),
7202 )
7203 }
7204}
7205#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7206pub struct StructArgListPtr(pub SyntaxStablePtrId);
7207impl TypedStablePtr for StructArgListPtr {
7208 type SyntaxNode = StructArgList;
7209 fn untyped(&self) -> SyntaxStablePtrId {
7210 self.0
7211 }
7212 fn lookup(&self, db: &dyn SyntaxGroup) -> StructArgList {
7213 StructArgList::from_syntax_node(db, self.0.lookup(db))
7214 }
7215}
7216impl From<StructArgListPtr> for SyntaxStablePtrId {
7217 fn from(ptr: StructArgListPtr) -> Self {
7218 ptr.untyped()
7219 }
7220}
7221#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7222pub enum StructArgListElementOrSeparatorGreen {
7223 Separator(TerminalCommaGreen),
7224 Element(StructArgGreen),
7225}
7226impl From<TerminalCommaGreen> for StructArgListElementOrSeparatorGreen {
7227 fn from(value: TerminalCommaGreen) -> Self {
7228 StructArgListElementOrSeparatorGreen::Separator(value)
7229 }
7230}
7231impl From<StructArgGreen> for StructArgListElementOrSeparatorGreen {
7232 fn from(value: StructArgGreen) -> Self {
7233 StructArgListElementOrSeparatorGreen::Element(value)
7234 }
7235}
7236impl StructArgListElementOrSeparatorGreen {
7237 fn id(&self) -> GreenId {
7238 match self {
7239 StructArgListElementOrSeparatorGreen::Separator(green) => green.0,
7240 StructArgListElementOrSeparatorGreen::Element(green) => green.0,
7241 }
7242 }
7243}
7244#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7245pub struct StructArgListGreen(pub GreenId);
7246impl TypedSyntaxNode for StructArgList {
7247 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StructArgList);
7248 type StablePtr = StructArgListPtr;
7249 type Green = StructArgListGreen;
7250 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7251 StructArgListGreen(
7252 Arc::new(GreenNode {
7253 kind: SyntaxKind::StructArgList,
7254 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
7255 })
7256 .intern(db),
7257 )
7258 }
7259 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7260 Self(ElementList::new(node))
7261 }
7262 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7263 if node.kind(db) == SyntaxKind::StructArgList {
7264 Some(Self(ElementList::new(node)))
7265 } else {
7266 None
7267 }
7268 }
7269 fn as_syntax_node(&self) -> SyntaxNode {
7270 self.node.clone()
7271 }
7272 fn stable_ptr(&self) -> Self::StablePtr {
7273 StructArgListPtr(self.node.0.stable_ptr)
7274 }
7275}
7276impl From<&StructArgList> for SyntaxStablePtrId {
7277 fn from(node: &StructArgList) -> Self {
7278 node.stable_ptr().untyped()
7279 }
7280}
7281#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7282pub struct ArgListBraced {
7283 node: SyntaxNode,
7284 children: Arc<[SyntaxNode]>,
7285}
7286impl ArgListBraced {
7287 pub const INDEX_LBRACE: usize = 0;
7288 pub const INDEX_ARGUMENTS: usize = 1;
7289 pub const INDEX_RBRACE: usize = 2;
7290 pub fn new_green(
7291 db: &dyn SyntaxGroup,
7292 lbrace: TerminalLBraceGreen,
7293 arguments: ArgListGreen,
7294 rbrace: TerminalRBraceGreen,
7295 ) -> ArgListBracedGreen {
7296 let children: Vec<GreenId> = vec![lbrace.0, arguments.0, rbrace.0];
7297 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
7298 ArgListBracedGreen(
7299 Arc::new(GreenNode {
7300 kind: SyntaxKind::ArgListBraced,
7301 details: GreenNodeDetails::Node { children, width },
7302 })
7303 .intern(db),
7304 )
7305 }
7306}
7307impl ArgListBraced {
7308 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
7309 TerminalLBrace::from_syntax_node(db, self.children[0].clone())
7310 }
7311 pub fn arguments(&self, db: &dyn SyntaxGroup) -> ArgList {
7312 ArgList::from_syntax_node(db, self.children[1].clone())
7313 }
7314 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
7315 TerminalRBrace::from_syntax_node(db, self.children[2].clone())
7316 }
7317}
7318#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7319pub struct ArgListBracedPtr(pub SyntaxStablePtrId);
7320impl ArgListBracedPtr {}
7321impl TypedStablePtr for ArgListBracedPtr {
7322 type SyntaxNode = ArgListBraced;
7323 fn untyped(&self) -> SyntaxStablePtrId {
7324 self.0
7325 }
7326 fn lookup(&self, db: &dyn SyntaxGroup) -> ArgListBraced {
7327 ArgListBraced::from_syntax_node(db, self.0.lookup(db))
7328 }
7329}
7330impl From<ArgListBracedPtr> for SyntaxStablePtrId {
7331 fn from(ptr: ArgListBracedPtr) -> Self {
7332 ptr.untyped()
7333 }
7334}
7335#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7336pub struct ArgListBracedGreen(pub GreenId);
7337impl TypedSyntaxNode for ArgListBraced {
7338 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ArgListBraced);
7339 type StablePtr = ArgListBracedPtr;
7340 type Green = ArgListBracedGreen;
7341 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7342 ArgListBracedGreen(
7343 Arc::new(GreenNode {
7344 kind: SyntaxKind::ArgListBraced,
7345 details: GreenNodeDetails::Node {
7346 children: vec![
7347 TerminalLBrace::missing(db).0,
7348 ArgList::missing(db).0,
7349 TerminalRBrace::missing(db).0,
7350 ],
7351 width: TextWidth::default(),
7352 },
7353 })
7354 .intern(db),
7355 )
7356 }
7357 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7358 let kind = node.kind(db);
7359 assert_eq!(
7360 kind,
7361 SyntaxKind::ArgListBraced,
7362 "Unexpected SyntaxKind {:?}. Expected {:?}.",
7363 kind,
7364 SyntaxKind::ArgListBraced
7365 );
7366 let children = db.get_children(node.clone());
7367 Self { node, children }
7368 }
7369 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7370 let kind = node.kind(db);
7371 if kind == SyntaxKind::ArgListBraced {
7372 Some(Self::from_syntax_node(db, node))
7373 } else {
7374 None
7375 }
7376 }
7377 fn as_syntax_node(&self) -> SyntaxNode {
7378 self.node.clone()
7379 }
7380 fn stable_ptr(&self) -> Self::StablePtr {
7381 ArgListBracedPtr(self.node.0.stable_ptr)
7382 }
7383}
7384impl From<&ArgListBraced> for SyntaxStablePtrId {
7385 fn from(node: &ArgListBraced) -> Self {
7386 node.stable_ptr().untyped()
7387 }
7388}
7389#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7390pub struct ArgListBracketed {
7391 node: SyntaxNode,
7392 children: Arc<[SyntaxNode]>,
7393}
7394impl ArgListBracketed {
7395 pub const INDEX_LBRACK: usize = 0;
7396 pub const INDEX_ARGUMENTS: usize = 1;
7397 pub const INDEX_RBRACK: usize = 2;
7398 pub fn new_green(
7399 db: &dyn SyntaxGroup,
7400 lbrack: TerminalLBrackGreen,
7401 arguments: ArgListGreen,
7402 rbrack: TerminalRBrackGreen,
7403 ) -> ArgListBracketedGreen {
7404 let children: Vec<GreenId> = vec![lbrack.0, arguments.0, rbrack.0];
7405 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
7406 ArgListBracketedGreen(
7407 Arc::new(GreenNode {
7408 kind: SyntaxKind::ArgListBracketed,
7409 details: GreenNodeDetails::Node { children, width },
7410 })
7411 .intern(db),
7412 )
7413 }
7414}
7415impl ArgListBracketed {
7416 pub fn lbrack(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
7417 TerminalLBrack::from_syntax_node(db, self.children[0].clone())
7418 }
7419 pub fn arguments(&self, db: &dyn SyntaxGroup) -> ArgList {
7420 ArgList::from_syntax_node(db, self.children[1].clone())
7421 }
7422 pub fn rbrack(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
7423 TerminalRBrack::from_syntax_node(db, self.children[2].clone())
7424 }
7425}
7426#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7427pub struct ArgListBracketedPtr(pub SyntaxStablePtrId);
7428impl ArgListBracketedPtr {}
7429impl TypedStablePtr for ArgListBracketedPtr {
7430 type SyntaxNode = ArgListBracketed;
7431 fn untyped(&self) -> SyntaxStablePtrId {
7432 self.0
7433 }
7434 fn lookup(&self, db: &dyn SyntaxGroup) -> ArgListBracketed {
7435 ArgListBracketed::from_syntax_node(db, self.0.lookup(db))
7436 }
7437}
7438impl From<ArgListBracketedPtr> for SyntaxStablePtrId {
7439 fn from(ptr: ArgListBracketedPtr) -> Self {
7440 ptr.untyped()
7441 }
7442}
7443#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7444pub struct ArgListBracketedGreen(pub GreenId);
7445impl TypedSyntaxNode for ArgListBracketed {
7446 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ArgListBracketed);
7447 type StablePtr = ArgListBracketedPtr;
7448 type Green = ArgListBracketedGreen;
7449 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7450 ArgListBracketedGreen(
7451 Arc::new(GreenNode {
7452 kind: SyntaxKind::ArgListBracketed,
7453 details: GreenNodeDetails::Node {
7454 children: vec![
7455 TerminalLBrack::missing(db).0,
7456 ArgList::missing(db).0,
7457 TerminalRBrack::missing(db).0,
7458 ],
7459 width: TextWidth::default(),
7460 },
7461 })
7462 .intern(db),
7463 )
7464 }
7465 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7466 let kind = node.kind(db);
7467 assert_eq!(
7468 kind,
7469 SyntaxKind::ArgListBracketed,
7470 "Unexpected SyntaxKind {:?}. Expected {:?}.",
7471 kind,
7472 SyntaxKind::ArgListBracketed
7473 );
7474 let children = db.get_children(node.clone());
7475 Self { node, children }
7476 }
7477 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7478 let kind = node.kind(db);
7479 if kind == SyntaxKind::ArgListBracketed {
7480 Some(Self::from_syntax_node(db, node))
7481 } else {
7482 None
7483 }
7484 }
7485 fn as_syntax_node(&self) -> SyntaxNode {
7486 self.node.clone()
7487 }
7488 fn stable_ptr(&self) -> Self::StablePtr {
7489 ArgListBracketedPtr(self.node.0.stable_ptr)
7490 }
7491}
7492impl From<&ArgListBracketed> for SyntaxStablePtrId {
7493 fn from(node: &ArgListBracketed) -> Self {
7494 node.stable_ptr().untyped()
7495 }
7496}
7497#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7498pub enum WrappedArgList {
7499 BracketedArgList(ArgListBracketed),
7500 ParenthesizedArgList(ArgListParenthesized),
7501 BracedArgList(ArgListBraced),
7502 Missing(WrappedArgListMissing),
7503}
7504#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7505pub struct WrappedArgListPtr(pub SyntaxStablePtrId);
7506impl TypedStablePtr for WrappedArgListPtr {
7507 type SyntaxNode = WrappedArgList;
7508 fn untyped(&self) -> SyntaxStablePtrId {
7509 self.0
7510 }
7511 fn lookup(&self, db: &dyn SyntaxGroup) -> WrappedArgList {
7512 WrappedArgList::from_syntax_node(db, self.0.lookup(db))
7513 }
7514}
7515impl From<WrappedArgListPtr> for SyntaxStablePtrId {
7516 fn from(ptr: WrappedArgListPtr) -> Self {
7517 ptr.untyped()
7518 }
7519}
7520impl From<ArgListBracketedPtr> for WrappedArgListPtr {
7521 fn from(value: ArgListBracketedPtr) -> Self {
7522 Self(value.0)
7523 }
7524}
7525impl From<ArgListParenthesizedPtr> for WrappedArgListPtr {
7526 fn from(value: ArgListParenthesizedPtr) -> Self {
7527 Self(value.0)
7528 }
7529}
7530impl From<ArgListBracedPtr> for WrappedArgListPtr {
7531 fn from(value: ArgListBracedPtr) -> Self {
7532 Self(value.0)
7533 }
7534}
7535impl From<WrappedArgListMissingPtr> for WrappedArgListPtr {
7536 fn from(value: WrappedArgListMissingPtr) -> Self {
7537 Self(value.0)
7538 }
7539}
7540impl From<ArgListBracketedGreen> for WrappedArgListGreen {
7541 fn from(value: ArgListBracketedGreen) -> Self {
7542 Self(value.0)
7543 }
7544}
7545impl From<ArgListParenthesizedGreen> for WrappedArgListGreen {
7546 fn from(value: ArgListParenthesizedGreen) -> Self {
7547 Self(value.0)
7548 }
7549}
7550impl From<ArgListBracedGreen> for WrappedArgListGreen {
7551 fn from(value: ArgListBracedGreen) -> Self {
7552 Self(value.0)
7553 }
7554}
7555impl From<WrappedArgListMissingGreen> for WrappedArgListGreen {
7556 fn from(value: WrappedArgListMissingGreen) -> Self {
7557 Self(value.0)
7558 }
7559}
7560#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7561pub struct WrappedArgListGreen(pub GreenId);
7562impl TypedSyntaxNode for WrappedArgList {
7563 const OPTIONAL_KIND: Option<SyntaxKind> = None;
7564 type StablePtr = WrappedArgListPtr;
7565 type Green = WrappedArgListGreen;
7566 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7567 WrappedArgListGreen(WrappedArgListMissing::missing(db).0)
7568 }
7569 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7570 let kind = node.kind(db);
7571 match kind {
7572 SyntaxKind::ArgListBracketed => {
7573 WrappedArgList::BracketedArgList(ArgListBracketed::from_syntax_node(db, node))
7574 }
7575 SyntaxKind::ArgListParenthesized => WrappedArgList::ParenthesizedArgList(
7576 ArgListParenthesized::from_syntax_node(db, node),
7577 ),
7578 SyntaxKind::ArgListBraced => {
7579 WrappedArgList::BracedArgList(ArgListBraced::from_syntax_node(db, node))
7580 }
7581 SyntaxKind::WrappedArgListMissing => {
7582 WrappedArgList::Missing(WrappedArgListMissing::from_syntax_node(db, node))
7583 }
7584 _ => {
7585 panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "WrappedArgList")
7586 }
7587 }
7588 }
7589 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7590 let kind = node.kind(db);
7591 match kind {
7592 SyntaxKind::ArgListBracketed => {
7593 Some(WrappedArgList::BracketedArgList(ArgListBracketed::from_syntax_node(db, node)))
7594 }
7595 SyntaxKind::ArgListParenthesized => Some(WrappedArgList::ParenthesizedArgList(
7596 ArgListParenthesized::from_syntax_node(db, node),
7597 )),
7598 SyntaxKind::ArgListBraced => {
7599 Some(WrappedArgList::BracedArgList(ArgListBraced::from_syntax_node(db, node)))
7600 }
7601 SyntaxKind::WrappedArgListMissing => {
7602 Some(WrappedArgList::Missing(WrappedArgListMissing::from_syntax_node(db, node)))
7603 }
7604 _ => None,
7605 }
7606 }
7607 fn as_syntax_node(&self) -> SyntaxNode {
7608 match self {
7609 WrappedArgList::BracketedArgList(x) => x.as_syntax_node(),
7610 WrappedArgList::ParenthesizedArgList(x) => x.as_syntax_node(),
7611 WrappedArgList::BracedArgList(x) => x.as_syntax_node(),
7612 WrappedArgList::Missing(x) => x.as_syntax_node(),
7613 }
7614 }
7615 fn stable_ptr(&self) -> Self::StablePtr {
7616 WrappedArgListPtr(self.as_syntax_node().0.stable_ptr)
7617 }
7618}
7619impl From<&WrappedArgList> for SyntaxStablePtrId {
7620 fn from(node: &WrappedArgList) -> Self {
7621 node.stable_ptr().untyped()
7622 }
7623}
7624impl WrappedArgList {
7625 pub fn is_variant(kind: SyntaxKind) -> bool {
7627 matches!(
7628 kind,
7629 SyntaxKind::ArgListBracketed
7630 | SyntaxKind::ArgListParenthesized
7631 | SyntaxKind::ArgListBraced
7632 | SyntaxKind::WrappedArgListMissing
7633 )
7634 }
7635}
7636#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7637pub struct WrappedArgListMissing {
7638 node: SyntaxNode,
7639 children: Arc<[SyntaxNode]>,
7640}
7641impl WrappedArgListMissing {
7642 pub fn new_green(db: &dyn SyntaxGroup) -> WrappedArgListMissingGreen {
7643 let children: Vec<GreenId> = vec![];
7644 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
7645 WrappedArgListMissingGreen(
7646 Arc::new(GreenNode {
7647 kind: SyntaxKind::WrappedArgListMissing,
7648 details: GreenNodeDetails::Node { children, width },
7649 })
7650 .intern(db),
7651 )
7652 }
7653}
7654impl WrappedArgListMissing {}
7655#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7656pub struct WrappedArgListMissingPtr(pub SyntaxStablePtrId);
7657impl WrappedArgListMissingPtr {}
7658impl TypedStablePtr for WrappedArgListMissingPtr {
7659 type SyntaxNode = WrappedArgListMissing;
7660 fn untyped(&self) -> SyntaxStablePtrId {
7661 self.0
7662 }
7663 fn lookup(&self, db: &dyn SyntaxGroup) -> WrappedArgListMissing {
7664 WrappedArgListMissing::from_syntax_node(db, self.0.lookup(db))
7665 }
7666}
7667impl From<WrappedArgListMissingPtr> for SyntaxStablePtrId {
7668 fn from(ptr: WrappedArgListMissingPtr) -> Self {
7669 ptr.untyped()
7670 }
7671}
7672#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7673pub struct WrappedArgListMissingGreen(pub GreenId);
7674impl TypedSyntaxNode for WrappedArgListMissing {
7675 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::WrappedArgListMissing);
7676 type StablePtr = WrappedArgListMissingPtr;
7677 type Green = WrappedArgListMissingGreen;
7678 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7679 WrappedArgListMissingGreen(
7680 Arc::new(GreenNode {
7681 kind: SyntaxKind::WrappedArgListMissing,
7682 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
7683 })
7684 .intern(db),
7685 )
7686 }
7687 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7688 let kind = node.kind(db);
7689 assert_eq!(
7690 kind,
7691 SyntaxKind::WrappedArgListMissing,
7692 "Unexpected SyntaxKind {:?}. Expected {:?}.",
7693 kind,
7694 SyntaxKind::WrappedArgListMissing
7695 );
7696 let children = db.get_children(node.clone());
7697 Self { node, children }
7698 }
7699 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7700 let kind = node.kind(db);
7701 if kind == SyntaxKind::WrappedArgListMissing {
7702 Some(Self::from_syntax_node(db, node))
7703 } else {
7704 None
7705 }
7706 }
7707 fn as_syntax_node(&self) -> SyntaxNode {
7708 self.node.clone()
7709 }
7710 fn stable_ptr(&self) -> Self::StablePtr {
7711 WrappedArgListMissingPtr(self.node.0.stable_ptr)
7712 }
7713}
7714impl From<&WrappedArgListMissing> for SyntaxStablePtrId {
7715 fn from(node: &WrappedArgListMissing) -> Self {
7716 node.stable_ptr().untyped()
7717 }
7718}
7719#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7720pub enum Pattern {
7721 Underscore(TerminalUnderscore),
7722 Literal(TerminalLiteralNumber),
7723 False(TerminalFalse),
7724 True(TerminalTrue),
7725 ShortString(TerminalShortString),
7726 String(TerminalString),
7727 Identifier(PatternIdentifier),
7728 Struct(PatternStruct),
7729 Tuple(PatternTuple),
7730 Enum(PatternEnum),
7731 FixedSizeArray(PatternFixedSizeArray),
7732 Path(ExprPath),
7733}
7734#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7735pub struct PatternPtr(pub SyntaxStablePtrId);
7736impl TypedStablePtr for PatternPtr {
7737 type SyntaxNode = Pattern;
7738 fn untyped(&self) -> SyntaxStablePtrId {
7739 self.0
7740 }
7741 fn lookup(&self, db: &dyn SyntaxGroup) -> Pattern {
7742 Pattern::from_syntax_node(db, self.0.lookup(db))
7743 }
7744}
7745impl From<PatternPtr> for SyntaxStablePtrId {
7746 fn from(ptr: PatternPtr) -> Self {
7747 ptr.untyped()
7748 }
7749}
7750impl From<TerminalUnderscorePtr> for PatternPtr {
7751 fn from(value: TerminalUnderscorePtr) -> Self {
7752 Self(value.0)
7753 }
7754}
7755impl From<TerminalLiteralNumberPtr> for PatternPtr {
7756 fn from(value: TerminalLiteralNumberPtr) -> Self {
7757 Self(value.0)
7758 }
7759}
7760impl From<TerminalFalsePtr> for PatternPtr {
7761 fn from(value: TerminalFalsePtr) -> Self {
7762 Self(value.0)
7763 }
7764}
7765impl From<TerminalTruePtr> for PatternPtr {
7766 fn from(value: TerminalTruePtr) -> Self {
7767 Self(value.0)
7768 }
7769}
7770impl From<TerminalShortStringPtr> for PatternPtr {
7771 fn from(value: TerminalShortStringPtr) -> Self {
7772 Self(value.0)
7773 }
7774}
7775impl From<TerminalStringPtr> for PatternPtr {
7776 fn from(value: TerminalStringPtr) -> Self {
7777 Self(value.0)
7778 }
7779}
7780impl From<PatternIdentifierPtr> for PatternPtr {
7781 fn from(value: PatternIdentifierPtr) -> Self {
7782 Self(value.0)
7783 }
7784}
7785impl From<PatternStructPtr> for PatternPtr {
7786 fn from(value: PatternStructPtr) -> Self {
7787 Self(value.0)
7788 }
7789}
7790impl From<PatternTuplePtr> for PatternPtr {
7791 fn from(value: PatternTuplePtr) -> Self {
7792 Self(value.0)
7793 }
7794}
7795impl From<PatternEnumPtr> for PatternPtr {
7796 fn from(value: PatternEnumPtr) -> Self {
7797 Self(value.0)
7798 }
7799}
7800impl From<PatternFixedSizeArrayPtr> for PatternPtr {
7801 fn from(value: PatternFixedSizeArrayPtr) -> Self {
7802 Self(value.0)
7803 }
7804}
7805impl From<ExprPathPtr> for PatternPtr {
7806 fn from(value: ExprPathPtr) -> Self {
7807 Self(value.0)
7808 }
7809}
7810impl From<TerminalUnderscoreGreen> for PatternGreen {
7811 fn from(value: TerminalUnderscoreGreen) -> Self {
7812 Self(value.0)
7813 }
7814}
7815impl From<TerminalLiteralNumberGreen> for PatternGreen {
7816 fn from(value: TerminalLiteralNumberGreen) -> Self {
7817 Self(value.0)
7818 }
7819}
7820impl From<TerminalFalseGreen> for PatternGreen {
7821 fn from(value: TerminalFalseGreen) -> Self {
7822 Self(value.0)
7823 }
7824}
7825impl From<TerminalTrueGreen> for PatternGreen {
7826 fn from(value: TerminalTrueGreen) -> Self {
7827 Self(value.0)
7828 }
7829}
7830impl From<TerminalShortStringGreen> for PatternGreen {
7831 fn from(value: TerminalShortStringGreen) -> Self {
7832 Self(value.0)
7833 }
7834}
7835impl From<TerminalStringGreen> for PatternGreen {
7836 fn from(value: TerminalStringGreen) -> Self {
7837 Self(value.0)
7838 }
7839}
7840impl From<PatternIdentifierGreen> for PatternGreen {
7841 fn from(value: PatternIdentifierGreen) -> Self {
7842 Self(value.0)
7843 }
7844}
7845impl From<PatternStructGreen> for PatternGreen {
7846 fn from(value: PatternStructGreen) -> Self {
7847 Self(value.0)
7848 }
7849}
7850impl From<PatternTupleGreen> for PatternGreen {
7851 fn from(value: PatternTupleGreen) -> Self {
7852 Self(value.0)
7853 }
7854}
7855impl From<PatternEnumGreen> for PatternGreen {
7856 fn from(value: PatternEnumGreen) -> Self {
7857 Self(value.0)
7858 }
7859}
7860impl From<PatternFixedSizeArrayGreen> for PatternGreen {
7861 fn from(value: PatternFixedSizeArrayGreen) -> Self {
7862 Self(value.0)
7863 }
7864}
7865impl From<ExprPathGreen> for PatternGreen {
7866 fn from(value: ExprPathGreen) -> Self {
7867 Self(value.0)
7868 }
7869}
7870#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7871pub struct PatternGreen(pub GreenId);
7872impl TypedSyntaxNode for Pattern {
7873 const OPTIONAL_KIND: Option<SyntaxKind> = None;
7874 type StablePtr = PatternPtr;
7875 type Green = PatternGreen;
7876 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7877 panic!("No missing variant.");
7878 }
7879 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7880 let kind = node.kind(db);
7881 match kind {
7882 SyntaxKind::TerminalUnderscore => {
7883 Pattern::Underscore(TerminalUnderscore::from_syntax_node(db, node))
7884 }
7885 SyntaxKind::TerminalLiteralNumber => {
7886 Pattern::Literal(TerminalLiteralNumber::from_syntax_node(db, node))
7887 }
7888 SyntaxKind::TerminalFalse => Pattern::False(TerminalFalse::from_syntax_node(db, node)),
7889 SyntaxKind::TerminalTrue => Pattern::True(TerminalTrue::from_syntax_node(db, node)),
7890 SyntaxKind::TerminalShortString => {
7891 Pattern::ShortString(TerminalShortString::from_syntax_node(db, node))
7892 }
7893 SyntaxKind::TerminalString => {
7894 Pattern::String(TerminalString::from_syntax_node(db, node))
7895 }
7896 SyntaxKind::PatternIdentifier => {
7897 Pattern::Identifier(PatternIdentifier::from_syntax_node(db, node))
7898 }
7899 SyntaxKind::PatternStruct => Pattern::Struct(PatternStruct::from_syntax_node(db, node)),
7900 SyntaxKind::PatternTuple => Pattern::Tuple(PatternTuple::from_syntax_node(db, node)),
7901 SyntaxKind::PatternEnum => Pattern::Enum(PatternEnum::from_syntax_node(db, node)),
7902 SyntaxKind::PatternFixedSizeArray => {
7903 Pattern::FixedSizeArray(PatternFixedSizeArray::from_syntax_node(db, node))
7904 }
7905 SyntaxKind::ExprPath => Pattern::Path(ExprPath::from_syntax_node(db, node)),
7906 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "Pattern"),
7907 }
7908 }
7909 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7910 let kind = node.kind(db);
7911 match kind {
7912 SyntaxKind::TerminalUnderscore => {
7913 Some(Pattern::Underscore(TerminalUnderscore::from_syntax_node(db, node)))
7914 }
7915 SyntaxKind::TerminalLiteralNumber => {
7916 Some(Pattern::Literal(TerminalLiteralNumber::from_syntax_node(db, node)))
7917 }
7918 SyntaxKind::TerminalFalse => {
7919 Some(Pattern::False(TerminalFalse::from_syntax_node(db, node)))
7920 }
7921 SyntaxKind::TerminalTrue => {
7922 Some(Pattern::True(TerminalTrue::from_syntax_node(db, node)))
7923 }
7924 SyntaxKind::TerminalShortString => {
7925 Some(Pattern::ShortString(TerminalShortString::from_syntax_node(db, node)))
7926 }
7927 SyntaxKind::TerminalString => {
7928 Some(Pattern::String(TerminalString::from_syntax_node(db, node)))
7929 }
7930 SyntaxKind::PatternIdentifier => {
7931 Some(Pattern::Identifier(PatternIdentifier::from_syntax_node(db, node)))
7932 }
7933 SyntaxKind::PatternStruct => {
7934 Some(Pattern::Struct(PatternStruct::from_syntax_node(db, node)))
7935 }
7936 SyntaxKind::PatternTuple => {
7937 Some(Pattern::Tuple(PatternTuple::from_syntax_node(db, node)))
7938 }
7939 SyntaxKind::PatternEnum => Some(Pattern::Enum(PatternEnum::from_syntax_node(db, node))),
7940 SyntaxKind::PatternFixedSizeArray => {
7941 Some(Pattern::FixedSizeArray(PatternFixedSizeArray::from_syntax_node(db, node)))
7942 }
7943 SyntaxKind::ExprPath => Some(Pattern::Path(ExprPath::from_syntax_node(db, node))),
7944 _ => None,
7945 }
7946 }
7947 fn as_syntax_node(&self) -> SyntaxNode {
7948 match self {
7949 Pattern::Underscore(x) => x.as_syntax_node(),
7950 Pattern::Literal(x) => x.as_syntax_node(),
7951 Pattern::False(x) => x.as_syntax_node(),
7952 Pattern::True(x) => x.as_syntax_node(),
7953 Pattern::ShortString(x) => x.as_syntax_node(),
7954 Pattern::String(x) => x.as_syntax_node(),
7955 Pattern::Identifier(x) => x.as_syntax_node(),
7956 Pattern::Struct(x) => x.as_syntax_node(),
7957 Pattern::Tuple(x) => x.as_syntax_node(),
7958 Pattern::Enum(x) => x.as_syntax_node(),
7959 Pattern::FixedSizeArray(x) => x.as_syntax_node(),
7960 Pattern::Path(x) => x.as_syntax_node(),
7961 }
7962 }
7963 fn stable_ptr(&self) -> Self::StablePtr {
7964 PatternPtr(self.as_syntax_node().0.stable_ptr)
7965 }
7966}
7967impl From<&Pattern> for SyntaxStablePtrId {
7968 fn from(node: &Pattern) -> Self {
7969 node.stable_ptr().untyped()
7970 }
7971}
7972impl Pattern {
7973 pub fn is_variant(kind: SyntaxKind) -> bool {
7975 matches!(
7976 kind,
7977 SyntaxKind::TerminalUnderscore
7978 | SyntaxKind::TerminalLiteralNumber
7979 | SyntaxKind::TerminalFalse
7980 | SyntaxKind::TerminalTrue
7981 | SyntaxKind::TerminalShortString
7982 | SyntaxKind::TerminalString
7983 | SyntaxKind::PatternIdentifier
7984 | SyntaxKind::PatternStruct
7985 | SyntaxKind::PatternTuple
7986 | SyntaxKind::PatternEnum
7987 | SyntaxKind::PatternFixedSizeArray
7988 | SyntaxKind::ExprPath
7989 )
7990 }
7991}
7992#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7993pub struct PatternIdentifier {
7994 node: SyntaxNode,
7995 children: Arc<[SyntaxNode]>,
7996}
7997impl PatternIdentifier {
7998 pub const INDEX_MODIFIERS: usize = 0;
7999 pub const INDEX_NAME: usize = 1;
8000 pub fn new_green(
8001 db: &dyn SyntaxGroup,
8002 modifiers: ModifierListGreen,
8003 name: TerminalIdentifierGreen,
8004 ) -> PatternIdentifierGreen {
8005 let children: Vec<GreenId> = vec![modifiers.0, name.0];
8006 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
8007 PatternIdentifierGreen(
8008 Arc::new(GreenNode {
8009 kind: SyntaxKind::PatternIdentifier,
8010 details: GreenNodeDetails::Node { children, width },
8011 })
8012 .intern(db),
8013 )
8014 }
8015}
8016impl PatternIdentifier {
8017 pub fn modifiers(&self, db: &dyn SyntaxGroup) -> ModifierList {
8018 ModifierList::from_syntax_node(db, self.children[0].clone())
8019 }
8020 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
8021 TerminalIdentifier::from_syntax_node(db, self.children[1].clone())
8022 }
8023}
8024#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8025pub struct PatternIdentifierPtr(pub SyntaxStablePtrId);
8026impl PatternIdentifierPtr {
8027 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
8028 let ptr = self.0.lookup_intern(db);
8029 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
8030 TerminalIdentifierGreen(key_fields[0])
8031 } else {
8032 panic!("Unexpected key field query on root.");
8033 }
8034 }
8035}
8036impl TypedStablePtr for PatternIdentifierPtr {
8037 type SyntaxNode = PatternIdentifier;
8038 fn untyped(&self) -> SyntaxStablePtrId {
8039 self.0
8040 }
8041 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternIdentifier {
8042 PatternIdentifier::from_syntax_node(db, self.0.lookup(db))
8043 }
8044}
8045impl From<PatternIdentifierPtr> for SyntaxStablePtrId {
8046 fn from(ptr: PatternIdentifierPtr) -> Self {
8047 ptr.untyped()
8048 }
8049}
8050#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8051pub struct PatternIdentifierGreen(pub GreenId);
8052impl TypedSyntaxNode for PatternIdentifier {
8053 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternIdentifier);
8054 type StablePtr = PatternIdentifierPtr;
8055 type Green = PatternIdentifierGreen;
8056 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8057 PatternIdentifierGreen(
8058 Arc::new(GreenNode {
8059 kind: SyntaxKind::PatternIdentifier,
8060 details: GreenNodeDetails::Node {
8061 children: vec![ModifierList::missing(db).0, TerminalIdentifier::missing(db).0],
8062 width: TextWidth::default(),
8063 },
8064 })
8065 .intern(db),
8066 )
8067 }
8068 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8069 let kind = node.kind(db);
8070 assert_eq!(
8071 kind,
8072 SyntaxKind::PatternIdentifier,
8073 "Unexpected SyntaxKind {:?}. Expected {:?}.",
8074 kind,
8075 SyntaxKind::PatternIdentifier
8076 );
8077 let children = db.get_children(node.clone());
8078 Self { node, children }
8079 }
8080 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8081 let kind = node.kind(db);
8082 if kind == SyntaxKind::PatternIdentifier {
8083 Some(Self::from_syntax_node(db, node))
8084 } else {
8085 None
8086 }
8087 }
8088 fn as_syntax_node(&self) -> SyntaxNode {
8089 self.node.clone()
8090 }
8091 fn stable_ptr(&self) -> Self::StablePtr {
8092 PatternIdentifierPtr(self.node.0.stable_ptr)
8093 }
8094}
8095impl From<&PatternIdentifier> for SyntaxStablePtrId {
8096 fn from(node: &PatternIdentifier) -> Self {
8097 node.stable_ptr().untyped()
8098 }
8099}
8100#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8101pub struct PatternStruct {
8102 node: SyntaxNode,
8103 children: Arc<[SyntaxNode]>,
8104}
8105impl PatternStruct {
8106 pub const INDEX_PATH: usize = 0;
8107 pub const INDEX_LBRACE: usize = 1;
8108 pub const INDEX_PARAMS: usize = 2;
8109 pub const INDEX_RBRACE: usize = 3;
8110 pub fn new_green(
8111 db: &dyn SyntaxGroup,
8112 path: ExprPathGreen,
8113 lbrace: TerminalLBraceGreen,
8114 params: PatternStructParamListGreen,
8115 rbrace: TerminalRBraceGreen,
8116 ) -> PatternStructGreen {
8117 let children: Vec<GreenId> = vec![path.0, lbrace.0, params.0, rbrace.0];
8118 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
8119 PatternStructGreen(
8120 Arc::new(GreenNode {
8121 kind: SyntaxKind::PatternStruct,
8122 details: GreenNodeDetails::Node { children, width },
8123 })
8124 .intern(db),
8125 )
8126 }
8127}
8128impl PatternStruct {
8129 pub fn path(&self, db: &dyn SyntaxGroup) -> ExprPath {
8130 ExprPath::from_syntax_node(db, self.children[0].clone())
8131 }
8132 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
8133 TerminalLBrace::from_syntax_node(db, self.children[1].clone())
8134 }
8135 pub fn params(&self, db: &dyn SyntaxGroup) -> PatternStructParamList {
8136 PatternStructParamList::from_syntax_node(db, self.children[2].clone())
8137 }
8138 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
8139 TerminalRBrace::from_syntax_node(db, self.children[3].clone())
8140 }
8141}
8142#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8143pub struct PatternStructPtr(pub SyntaxStablePtrId);
8144impl PatternStructPtr {}
8145impl TypedStablePtr for PatternStructPtr {
8146 type SyntaxNode = PatternStruct;
8147 fn untyped(&self) -> SyntaxStablePtrId {
8148 self.0
8149 }
8150 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternStruct {
8151 PatternStruct::from_syntax_node(db, self.0.lookup(db))
8152 }
8153}
8154impl From<PatternStructPtr> for SyntaxStablePtrId {
8155 fn from(ptr: PatternStructPtr) -> Self {
8156 ptr.untyped()
8157 }
8158}
8159#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8160pub struct PatternStructGreen(pub GreenId);
8161impl TypedSyntaxNode for PatternStruct {
8162 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternStruct);
8163 type StablePtr = PatternStructPtr;
8164 type Green = PatternStructGreen;
8165 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8166 PatternStructGreen(
8167 Arc::new(GreenNode {
8168 kind: SyntaxKind::PatternStruct,
8169 details: GreenNodeDetails::Node {
8170 children: vec![
8171 ExprPath::missing(db).0,
8172 TerminalLBrace::missing(db).0,
8173 PatternStructParamList::missing(db).0,
8174 TerminalRBrace::missing(db).0,
8175 ],
8176 width: TextWidth::default(),
8177 },
8178 })
8179 .intern(db),
8180 )
8181 }
8182 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8183 let kind = node.kind(db);
8184 assert_eq!(
8185 kind,
8186 SyntaxKind::PatternStruct,
8187 "Unexpected SyntaxKind {:?}. Expected {:?}.",
8188 kind,
8189 SyntaxKind::PatternStruct
8190 );
8191 let children = db.get_children(node.clone());
8192 Self { node, children }
8193 }
8194 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8195 let kind = node.kind(db);
8196 if kind == SyntaxKind::PatternStruct {
8197 Some(Self::from_syntax_node(db, node))
8198 } else {
8199 None
8200 }
8201 }
8202 fn as_syntax_node(&self) -> SyntaxNode {
8203 self.node.clone()
8204 }
8205 fn stable_ptr(&self) -> Self::StablePtr {
8206 PatternStructPtr(self.node.0.stable_ptr)
8207 }
8208}
8209impl From<&PatternStruct> for SyntaxStablePtrId {
8210 fn from(node: &PatternStruct) -> Self {
8211 node.stable_ptr().untyped()
8212 }
8213}
8214#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8215pub struct PatternStructParamList(ElementList<PatternStructParam, 2>);
8216impl Deref for PatternStructParamList {
8217 type Target = ElementList<PatternStructParam, 2>;
8218 fn deref(&self) -> &Self::Target {
8219 &self.0
8220 }
8221}
8222impl PatternStructParamList {
8223 pub fn new_green(
8224 db: &dyn SyntaxGroup,
8225 children: Vec<PatternStructParamListElementOrSeparatorGreen>,
8226 ) -> PatternStructParamListGreen {
8227 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
8228 PatternStructParamListGreen(
8229 Arc::new(GreenNode {
8230 kind: SyntaxKind::PatternStructParamList,
8231 details: GreenNodeDetails::Node {
8232 children: children.iter().map(|x| x.id()).collect(),
8233 width,
8234 },
8235 })
8236 .intern(db),
8237 )
8238 }
8239}
8240#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8241pub struct PatternStructParamListPtr(pub SyntaxStablePtrId);
8242impl TypedStablePtr for PatternStructParamListPtr {
8243 type SyntaxNode = PatternStructParamList;
8244 fn untyped(&self) -> SyntaxStablePtrId {
8245 self.0
8246 }
8247 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternStructParamList {
8248 PatternStructParamList::from_syntax_node(db, self.0.lookup(db))
8249 }
8250}
8251impl From<PatternStructParamListPtr> for SyntaxStablePtrId {
8252 fn from(ptr: PatternStructParamListPtr) -> Self {
8253 ptr.untyped()
8254 }
8255}
8256#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8257pub enum PatternStructParamListElementOrSeparatorGreen {
8258 Separator(TerminalCommaGreen),
8259 Element(PatternStructParamGreen),
8260}
8261impl From<TerminalCommaGreen> for PatternStructParamListElementOrSeparatorGreen {
8262 fn from(value: TerminalCommaGreen) -> Self {
8263 PatternStructParamListElementOrSeparatorGreen::Separator(value)
8264 }
8265}
8266impl From<PatternStructParamGreen> for PatternStructParamListElementOrSeparatorGreen {
8267 fn from(value: PatternStructParamGreen) -> Self {
8268 PatternStructParamListElementOrSeparatorGreen::Element(value)
8269 }
8270}
8271impl PatternStructParamListElementOrSeparatorGreen {
8272 fn id(&self) -> GreenId {
8273 match self {
8274 PatternStructParamListElementOrSeparatorGreen::Separator(green) => green.0,
8275 PatternStructParamListElementOrSeparatorGreen::Element(green) => green.0,
8276 }
8277 }
8278}
8279#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8280pub struct PatternStructParamListGreen(pub GreenId);
8281impl TypedSyntaxNode for PatternStructParamList {
8282 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternStructParamList);
8283 type StablePtr = PatternStructParamListPtr;
8284 type Green = PatternStructParamListGreen;
8285 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8286 PatternStructParamListGreen(
8287 Arc::new(GreenNode {
8288 kind: SyntaxKind::PatternStructParamList,
8289 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
8290 })
8291 .intern(db),
8292 )
8293 }
8294 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8295 Self(ElementList::new(node))
8296 }
8297 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8298 if node.kind(db) == SyntaxKind::PatternStructParamList {
8299 Some(Self(ElementList::new(node)))
8300 } else {
8301 None
8302 }
8303 }
8304 fn as_syntax_node(&self) -> SyntaxNode {
8305 self.node.clone()
8306 }
8307 fn stable_ptr(&self) -> Self::StablePtr {
8308 PatternStructParamListPtr(self.node.0.stable_ptr)
8309 }
8310}
8311impl From<&PatternStructParamList> for SyntaxStablePtrId {
8312 fn from(node: &PatternStructParamList) -> Self {
8313 node.stable_ptr().untyped()
8314 }
8315}
8316#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8317pub struct PatternTuple {
8318 node: SyntaxNode,
8319 children: Arc<[SyntaxNode]>,
8320}
8321impl PatternTuple {
8322 pub const INDEX_LPAREN: usize = 0;
8323 pub const INDEX_PATTERNS: usize = 1;
8324 pub const INDEX_RPAREN: usize = 2;
8325 pub fn new_green(
8326 db: &dyn SyntaxGroup,
8327 lparen: TerminalLParenGreen,
8328 patterns: PatternListGreen,
8329 rparen: TerminalRParenGreen,
8330 ) -> PatternTupleGreen {
8331 let children: Vec<GreenId> = vec![lparen.0, patterns.0, rparen.0];
8332 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
8333 PatternTupleGreen(
8334 Arc::new(GreenNode {
8335 kind: SyntaxKind::PatternTuple,
8336 details: GreenNodeDetails::Node { children, width },
8337 })
8338 .intern(db),
8339 )
8340 }
8341}
8342impl PatternTuple {
8343 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
8344 TerminalLParen::from_syntax_node(db, self.children[0].clone())
8345 }
8346 pub fn patterns(&self, db: &dyn SyntaxGroup) -> PatternList {
8347 PatternList::from_syntax_node(db, self.children[1].clone())
8348 }
8349 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
8350 TerminalRParen::from_syntax_node(db, self.children[2].clone())
8351 }
8352}
8353#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8354pub struct PatternTuplePtr(pub SyntaxStablePtrId);
8355impl PatternTuplePtr {}
8356impl TypedStablePtr for PatternTuplePtr {
8357 type SyntaxNode = PatternTuple;
8358 fn untyped(&self) -> SyntaxStablePtrId {
8359 self.0
8360 }
8361 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternTuple {
8362 PatternTuple::from_syntax_node(db, self.0.lookup(db))
8363 }
8364}
8365impl From<PatternTuplePtr> for SyntaxStablePtrId {
8366 fn from(ptr: PatternTuplePtr) -> Self {
8367 ptr.untyped()
8368 }
8369}
8370#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8371pub struct PatternTupleGreen(pub GreenId);
8372impl TypedSyntaxNode for PatternTuple {
8373 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternTuple);
8374 type StablePtr = PatternTuplePtr;
8375 type Green = PatternTupleGreen;
8376 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8377 PatternTupleGreen(
8378 Arc::new(GreenNode {
8379 kind: SyntaxKind::PatternTuple,
8380 details: GreenNodeDetails::Node {
8381 children: vec![
8382 TerminalLParen::missing(db).0,
8383 PatternList::missing(db).0,
8384 TerminalRParen::missing(db).0,
8385 ],
8386 width: TextWidth::default(),
8387 },
8388 })
8389 .intern(db),
8390 )
8391 }
8392 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8393 let kind = node.kind(db);
8394 assert_eq!(
8395 kind,
8396 SyntaxKind::PatternTuple,
8397 "Unexpected SyntaxKind {:?}. Expected {:?}.",
8398 kind,
8399 SyntaxKind::PatternTuple
8400 );
8401 let children = db.get_children(node.clone());
8402 Self { node, children }
8403 }
8404 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8405 let kind = node.kind(db);
8406 if kind == SyntaxKind::PatternTuple { Some(Self::from_syntax_node(db, node)) } else { None }
8407 }
8408 fn as_syntax_node(&self) -> SyntaxNode {
8409 self.node.clone()
8410 }
8411 fn stable_ptr(&self) -> Self::StablePtr {
8412 PatternTuplePtr(self.node.0.stable_ptr)
8413 }
8414}
8415impl From<&PatternTuple> for SyntaxStablePtrId {
8416 fn from(node: &PatternTuple) -> Self {
8417 node.stable_ptr().untyped()
8418 }
8419}
8420#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8421pub struct PatternFixedSizeArray {
8422 node: SyntaxNode,
8423 children: Arc<[SyntaxNode]>,
8424}
8425impl PatternFixedSizeArray {
8426 pub const INDEX_LBRACK: usize = 0;
8427 pub const INDEX_PATTERNS: usize = 1;
8428 pub const INDEX_RBRACK: usize = 2;
8429 pub fn new_green(
8430 db: &dyn SyntaxGroup,
8431 lbrack: TerminalLBrackGreen,
8432 patterns: PatternListGreen,
8433 rbrack: TerminalRBrackGreen,
8434 ) -> PatternFixedSizeArrayGreen {
8435 let children: Vec<GreenId> = vec![lbrack.0, patterns.0, rbrack.0];
8436 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
8437 PatternFixedSizeArrayGreen(
8438 Arc::new(GreenNode {
8439 kind: SyntaxKind::PatternFixedSizeArray,
8440 details: GreenNodeDetails::Node { children, width },
8441 })
8442 .intern(db),
8443 )
8444 }
8445}
8446impl PatternFixedSizeArray {
8447 pub fn lbrack(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
8448 TerminalLBrack::from_syntax_node(db, self.children[0].clone())
8449 }
8450 pub fn patterns(&self, db: &dyn SyntaxGroup) -> PatternList {
8451 PatternList::from_syntax_node(db, self.children[1].clone())
8452 }
8453 pub fn rbrack(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
8454 TerminalRBrack::from_syntax_node(db, self.children[2].clone())
8455 }
8456}
8457#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8458pub struct PatternFixedSizeArrayPtr(pub SyntaxStablePtrId);
8459impl PatternFixedSizeArrayPtr {}
8460impl TypedStablePtr for PatternFixedSizeArrayPtr {
8461 type SyntaxNode = PatternFixedSizeArray;
8462 fn untyped(&self) -> SyntaxStablePtrId {
8463 self.0
8464 }
8465 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternFixedSizeArray {
8466 PatternFixedSizeArray::from_syntax_node(db, self.0.lookup(db))
8467 }
8468}
8469impl From<PatternFixedSizeArrayPtr> for SyntaxStablePtrId {
8470 fn from(ptr: PatternFixedSizeArrayPtr) -> Self {
8471 ptr.untyped()
8472 }
8473}
8474#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8475pub struct PatternFixedSizeArrayGreen(pub GreenId);
8476impl TypedSyntaxNode for PatternFixedSizeArray {
8477 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternFixedSizeArray);
8478 type StablePtr = PatternFixedSizeArrayPtr;
8479 type Green = PatternFixedSizeArrayGreen;
8480 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8481 PatternFixedSizeArrayGreen(
8482 Arc::new(GreenNode {
8483 kind: SyntaxKind::PatternFixedSizeArray,
8484 details: GreenNodeDetails::Node {
8485 children: vec![
8486 TerminalLBrack::missing(db).0,
8487 PatternList::missing(db).0,
8488 TerminalRBrack::missing(db).0,
8489 ],
8490 width: TextWidth::default(),
8491 },
8492 })
8493 .intern(db),
8494 )
8495 }
8496 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8497 let kind = node.kind(db);
8498 assert_eq!(
8499 kind,
8500 SyntaxKind::PatternFixedSizeArray,
8501 "Unexpected SyntaxKind {:?}. Expected {:?}.",
8502 kind,
8503 SyntaxKind::PatternFixedSizeArray
8504 );
8505 let children = db.get_children(node.clone());
8506 Self { node, children }
8507 }
8508 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8509 let kind = node.kind(db);
8510 if kind == SyntaxKind::PatternFixedSizeArray {
8511 Some(Self::from_syntax_node(db, node))
8512 } else {
8513 None
8514 }
8515 }
8516 fn as_syntax_node(&self) -> SyntaxNode {
8517 self.node.clone()
8518 }
8519 fn stable_ptr(&self) -> Self::StablePtr {
8520 PatternFixedSizeArrayPtr(self.node.0.stable_ptr)
8521 }
8522}
8523impl From<&PatternFixedSizeArray> for SyntaxStablePtrId {
8524 fn from(node: &PatternFixedSizeArray) -> Self {
8525 node.stable_ptr().untyped()
8526 }
8527}
8528#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8529pub struct PatternList(ElementList<Pattern, 2>);
8530impl Deref for PatternList {
8531 type Target = ElementList<Pattern, 2>;
8532 fn deref(&self) -> &Self::Target {
8533 &self.0
8534 }
8535}
8536impl PatternList {
8537 pub fn new_green(
8538 db: &dyn SyntaxGroup,
8539 children: Vec<PatternListElementOrSeparatorGreen>,
8540 ) -> PatternListGreen {
8541 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
8542 PatternListGreen(
8543 Arc::new(GreenNode {
8544 kind: SyntaxKind::PatternList,
8545 details: GreenNodeDetails::Node {
8546 children: children.iter().map(|x| x.id()).collect(),
8547 width,
8548 },
8549 })
8550 .intern(db),
8551 )
8552 }
8553}
8554#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8555pub struct PatternListPtr(pub SyntaxStablePtrId);
8556impl TypedStablePtr for PatternListPtr {
8557 type SyntaxNode = PatternList;
8558 fn untyped(&self) -> SyntaxStablePtrId {
8559 self.0
8560 }
8561 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternList {
8562 PatternList::from_syntax_node(db, self.0.lookup(db))
8563 }
8564}
8565impl From<PatternListPtr> for SyntaxStablePtrId {
8566 fn from(ptr: PatternListPtr) -> Self {
8567 ptr.untyped()
8568 }
8569}
8570#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8571pub enum PatternListElementOrSeparatorGreen {
8572 Separator(TerminalCommaGreen),
8573 Element(PatternGreen),
8574}
8575impl From<TerminalCommaGreen> for PatternListElementOrSeparatorGreen {
8576 fn from(value: TerminalCommaGreen) -> Self {
8577 PatternListElementOrSeparatorGreen::Separator(value)
8578 }
8579}
8580impl From<PatternGreen> for PatternListElementOrSeparatorGreen {
8581 fn from(value: PatternGreen) -> Self {
8582 PatternListElementOrSeparatorGreen::Element(value)
8583 }
8584}
8585impl PatternListElementOrSeparatorGreen {
8586 fn id(&self) -> GreenId {
8587 match self {
8588 PatternListElementOrSeparatorGreen::Separator(green) => green.0,
8589 PatternListElementOrSeparatorGreen::Element(green) => green.0,
8590 }
8591 }
8592}
8593#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8594pub struct PatternListGreen(pub GreenId);
8595impl TypedSyntaxNode for PatternList {
8596 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternList);
8597 type StablePtr = PatternListPtr;
8598 type Green = PatternListGreen;
8599 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8600 PatternListGreen(
8601 Arc::new(GreenNode {
8602 kind: SyntaxKind::PatternList,
8603 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
8604 })
8605 .intern(db),
8606 )
8607 }
8608 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8609 Self(ElementList::new(node))
8610 }
8611 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8612 if node.kind(db) == SyntaxKind::PatternList {
8613 Some(Self(ElementList::new(node)))
8614 } else {
8615 None
8616 }
8617 }
8618 fn as_syntax_node(&self) -> SyntaxNode {
8619 self.node.clone()
8620 }
8621 fn stable_ptr(&self) -> Self::StablePtr {
8622 PatternListPtr(self.node.0.stable_ptr)
8623 }
8624}
8625impl From<&PatternList> for SyntaxStablePtrId {
8626 fn from(node: &PatternList) -> Self {
8627 node.stable_ptr().untyped()
8628 }
8629}
8630#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8631pub struct PatternListOr(ElementList<Pattern, 2>);
8632impl Deref for PatternListOr {
8633 type Target = ElementList<Pattern, 2>;
8634 fn deref(&self) -> &Self::Target {
8635 &self.0
8636 }
8637}
8638impl PatternListOr {
8639 pub fn new_green(
8640 db: &dyn SyntaxGroup,
8641 children: Vec<PatternListOrElementOrSeparatorGreen>,
8642 ) -> PatternListOrGreen {
8643 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
8644 PatternListOrGreen(
8645 Arc::new(GreenNode {
8646 kind: SyntaxKind::PatternListOr,
8647 details: GreenNodeDetails::Node {
8648 children: children.iter().map(|x| x.id()).collect(),
8649 width,
8650 },
8651 })
8652 .intern(db),
8653 )
8654 }
8655}
8656#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8657pub struct PatternListOrPtr(pub SyntaxStablePtrId);
8658impl TypedStablePtr for PatternListOrPtr {
8659 type SyntaxNode = PatternListOr;
8660 fn untyped(&self) -> SyntaxStablePtrId {
8661 self.0
8662 }
8663 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternListOr {
8664 PatternListOr::from_syntax_node(db, self.0.lookup(db))
8665 }
8666}
8667impl From<PatternListOrPtr> for SyntaxStablePtrId {
8668 fn from(ptr: PatternListOrPtr) -> Self {
8669 ptr.untyped()
8670 }
8671}
8672#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8673pub enum PatternListOrElementOrSeparatorGreen {
8674 Separator(TerminalOrGreen),
8675 Element(PatternGreen),
8676}
8677impl From<TerminalOrGreen> for PatternListOrElementOrSeparatorGreen {
8678 fn from(value: TerminalOrGreen) -> Self {
8679 PatternListOrElementOrSeparatorGreen::Separator(value)
8680 }
8681}
8682impl From<PatternGreen> for PatternListOrElementOrSeparatorGreen {
8683 fn from(value: PatternGreen) -> Self {
8684 PatternListOrElementOrSeparatorGreen::Element(value)
8685 }
8686}
8687impl PatternListOrElementOrSeparatorGreen {
8688 fn id(&self) -> GreenId {
8689 match self {
8690 PatternListOrElementOrSeparatorGreen::Separator(green) => green.0,
8691 PatternListOrElementOrSeparatorGreen::Element(green) => green.0,
8692 }
8693 }
8694}
8695#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8696pub struct PatternListOrGreen(pub GreenId);
8697impl TypedSyntaxNode for PatternListOr {
8698 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternListOr);
8699 type StablePtr = PatternListOrPtr;
8700 type Green = PatternListOrGreen;
8701 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8702 PatternListOrGreen(
8703 Arc::new(GreenNode {
8704 kind: SyntaxKind::PatternListOr,
8705 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
8706 })
8707 .intern(db),
8708 )
8709 }
8710 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8711 Self(ElementList::new(node))
8712 }
8713 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8714 if node.kind(db) == SyntaxKind::PatternListOr {
8715 Some(Self(ElementList::new(node)))
8716 } else {
8717 None
8718 }
8719 }
8720 fn as_syntax_node(&self) -> SyntaxNode {
8721 self.node.clone()
8722 }
8723 fn stable_ptr(&self) -> Self::StablePtr {
8724 PatternListOrPtr(self.node.0.stable_ptr)
8725 }
8726}
8727impl From<&PatternListOr> for SyntaxStablePtrId {
8728 fn from(node: &PatternListOr) -> Self {
8729 node.stable_ptr().untyped()
8730 }
8731}
8732#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8733pub enum PatternStructParam {
8734 Single(PatternIdentifier),
8735 WithExpr(PatternStructParamWithExpr),
8736 Tail(TerminalDotDot),
8737}
8738#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8739pub struct PatternStructParamPtr(pub SyntaxStablePtrId);
8740impl TypedStablePtr for PatternStructParamPtr {
8741 type SyntaxNode = PatternStructParam;
8742 fn untyped(&self) -> SyntaxStablePtrId {
8743 self.0
8744 }
8745 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternStructParam {
8746 PatternStructParam::from_syntax_node(db, self.0.lookup(db))
8747 }
8748}
8749impl From<PatternStructParamPtr> for SyntaxStablePtrId {
8750 fn from(ptr: PatternStructParamPtr) -> Self {
8751 ptr.untyped()
8752 }
8753}
8754impl From<PatternIdentifierPtr> for PatternStructParamPtr {
8755 fn from(value: PatternIdentifierPtr) -> Self {
8756 Self(value.0)
8757 }
8758}
8759impl From<PatternStructParamWithExprPtr> for PatternStructParamPtr {
8760 fn from(value: PatternStructParamWithExprPtr) -> Self {
8761 Self(value.0)
8762 }
8763}
8764impl From<TerminalDotDotPtr> for PatternStructParamPtr {
8765 fn from(value: TerminalDotDotPtr) -> Self {
8766 Self(value.0)
8767 }
8768}
8769impl From<PatternIdentifierGreen> for PatternStructParamGreen {
8770 fn from(value: PatternIdentifierGreen) -> Self {
8771 Self(value.0)
8772 }
8773}
8774impl From<PatternStructParamWithExprGreen> for PatternStructParamGreen {
8775 fn from(value: PatternStructParamWithExprGreen) -> Self {
8776 Self(value.0)
8777 }
8778}
8779impl From<TerminalDotDotGreen> for PatternStructParamGreen {
8780 fn from(value: TerminalDotDotGreen) -> Self {
8781 Self(value.0)
8782 }
8783}
8784#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8785pub struct PatternStructParamGreen(pub GreenId);
8786impl TypedSyntaxNode for PatternStructParam {
8787 const OPTIONAL_KIND: Option<SyntaxKind> = None;
8788 type StablePtr = PatternStructParamPtr;
8789 type Green = PatternStructParamGreen;
8790 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8791 panic!("No missing variant.");
8792 }
8793 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8794 let kind = node.kind(db);
8795 match kind {
8796 SyntaxKind::PatternIdentifier => {
8797 PatternStructParam::Single(PatternIdentifier::from_syntax_node(db, node))
8798 }
8799 SyntaxKind::PatternStructParamWithExpr => {
8800 PatternStructParam::WithExpr(PatternStructParamWithExpr::from_syntax_node(db, node))
8801 }
8802 SyntaxKind::TerminalDotDot => {
8803 PatternStructParam::Tail(TerminalDotDot::from_syntax_node(db, node))
8804 }
8805 _ => panic!(
8806 "Unexpected syntax kind {:?} when constructing {}.",
8807 kind, "PatternStructParam"
8808 ),
8809 }
8810 }
8811 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8812 let kind = node.kind(db);
8813 match kind {
8814 SyntaxKind::PatternIdentifier => {
8815 Some(PatternStructParam::Single(PatternIdentifier::from_syntax_node(db, node)))
8816 }
8817 SyntaxKind::PatternStructParamWithExpr => Some(PatternStructParam::WithExpr(
8818 PatternStructParamWithExpr::from_syntax_node(db, node),
8819 )),
8820 SyntaxKind::TerminalDotDot => {
8821 Some(PatternStructParam::Tail(TerminalDotDot::from_syntax_node(db, node)))
8822 }
8823 _ => None,
8824 }
8825 }
8826 fn as_syntax_node(&self) -> SyntaxNode {
8827 match self {
8828 PatternStructParam::Single(x) => x.as_syntax_node(),
8829 PatternStructParam::WithExpr(x) => x.as_syntax_node(),
8830 PatternStructParam::Tail(x) => x.as_syntax_node(),
8831 }
8832 }
8833 fn stable_ptr(&self) -> Self::StablePtr {
8834 PatternStructParamPtr(self.as_syntax_node().0.stable_ptr)
8835 }
8836}
8837impl From<&PatternStructParam> for SyntaxStablePtrId {
8838 fn from(node: &PatternStructParam) -> Self {
8839 node.stable_ptr().untyped()
8840 }
8841}
8842impl PatternStructParam {
8843 pub fn is_variant(kind: SyntaxKind) -> bool {
8845 matches!(
8846 kind,
8847 SyntaxKind::PatternIdentifier
8848 | SyntaxKind::PatternStructParamWithExpr
8849 | SyntaxKind::TerminalDotDot
8850 )
8851 }
8852}
8853#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8854pub struct PatternStructParamWithExpr {
8855 node: SyntaxNode,
8856 children: Arc<[SyntaxNode]>,
8857}
8858impl PatternStructParamWithExpr {
8859 pub const INDEX_MODIFIERS: usize = 0;
8860 pub const INDEX_NAME: usize = 1;
8861 pub const INDEX_COLON: usize = 2;
8862 pub const INDEX_PATTERN: usize = 3;
8863 pub fn new_green(
8864 db: &dyn SyntaxGroup,
8865 modifiers: ModifierListGreen,
8866 name: TerminalIdentifierGreen,
8867 colon: TerminalColonGreen,
8868 pattern: PatternGreen,
8869 ) -> PatternStructParamWithExprGreen {
8870 let children: Vec<GreenId> = vec![modifiers.0, name.0, colon.0, pattern.0];
8871 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
8872 PatternStructParamWithExprGreen(
8873 Arc::new(GreenNode {
8874 kind: SyntaxKind::PatternStructParamWithExpr,
8875 details: GreenNodeDetails::Node { children, width },
8876 })
8877 .intern(db),
8878 )
8879 }
8880}
8881impl PatternStructParamWithExpr {
8882 pub fn modifiers(&self, db: &dyn SyntaxGroup) -> ModifierList {
8883 ModifierList::from_syntax_node(db, self.children[0].clone())
8884 }
8885 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
8886 TerminalIdentifier::from_syntax_node(db, self.children[1].clone())
8887 }
8888 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
8889 TerminalColon::from_syntax_node(db, self.children[2].clone())
8890 }
8891 pub fn pattern(&self, db: &dyn SyntaxGroup) -> Pattern {
8892 Pattern::from_syntax_node(db, self.children[3].clone())
8893 }
8894}
8895#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8896pub struct PatternStructParamWithExprPtr(pub SyntaxStablePtrId);
8897impl PatternStructParamWithExprPtr {}
8898impl TypedStablePtr for PatternStructParamWithExprPtr {
8899 type SyntaxNode = PatternStructParamWithExpr;
8900 fn untyped(&self) -> SyntaxStablePtrId {
8901 self.0
8902 }
8903 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternStructParamWithExpr {
8904 PatternStructParamWithExpr::from_syntax_node(db, self.0.lookup(db))
8905 }
8906}
8907impl From<PatternStructParamWithExprPtr> for SyntaxStablePtrId {
8908 fn from(ptr: PatternStructParamWithExprPtr) -> Self {
8909 ptr.untyped()
8910 }
8911}
8912#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8913pub struct PatternStructParamWithExprGreen(pub GreenId);
8914impl TypedSyntaxNode for PatternStructParamWithExpr {
8915 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternStructParamWithExpr);
8916 type StablePtr = PatternStructParamWithExprPtr;
8917 type Green = PatternStructParamWithExprGreen;
8918 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8919 PatternStructParamWithExprGreen(
8920 Arc::new(GreenNode {
8921 kind: SyntaxKind::PatternStructParamWithExpr,
8922 details: GreenNodeDetails::Node {
8923 children: vec![
8924 ModifierList::missing(db).0,
8925 TerminalIdentifier::missing(db).0,
8926 TerminalColon::missing(db).0,
8927 Pattern::missing(db).0,
8928 ],
8929 width: TextWidth::default(),
8930 },
8931 })
8932 .intern(db),
8933 )
8934 }
8935 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8936 let kind = node.kind(db);
8937 assert_eq!(
8938 kind,
8939 SyntaxKind::PatternStructParamWithExpr,
8940 "Unexpected SyntaxKind {:?}. Expected {:?}.",
8941 kind,
8942 SyntaxKind::PatternStructParamWithExpr
8943 );
8944 let children = db.get_children(node.clone());
8945 Self { node, children }
8946 }
8947 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8948 let kind = node.kind(db);
8949 if kind == SyntaxKind::PatternStructParamWithExpr {
8950 Some(Self::from_syntax_node(db, node))
8951 } else {
8952 None
8953 }
8954 }
8955 fn as_syntax_node(&self) -> SyntaxNode {
8956 self.node.clone()
8957 }
8958 fn stable_ptr(&self) -> Self::StablePtr {
8959 PatternStructParamWithExprPtr(self.node.0.stable_ptr)
8960 }
8961}
8962impl From<&PatternStructParamWithExpr> for SyntaxStablePtrId {
8963 fn from(node: &PatternStructParamWithExpr) -> Self {
8964 node.stable_ptr().untyped()
8965 }
8966}
8967#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8968pub struct PatternEnum {
8969 node: SyntaxNode,
8970 children: Arc<[SyntaxNode]>,
8971}
8972impl PatternEnum {
8973 pub const INDEX_PATH: usize = 0;
8974 pub const INDEX_PATTERN: usize = 1;
8975 pub fn new_green(
8976 db: &dyn SyntaxGroup,
8977 path: ExprPathGreen,
8978 pattern: OptionPatternEnumInnerPatternGreen,
8979 ) -> PatternEnumGreen {
8980 let children: Vec<GreenId> = vec![path.0, pattern.0];
8981 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
8982 PatternEnumGreen(
8983 Arc::new(GreenNode {
8984 kind: SyntaxKind::PatternEnum,
8985 details: GreenNodeDetails::Node { children, width },
8986 })
8987 .intern(db),
8988 )
8989 }
8990}
8991impl PatternEnum {
8992 pub fn path(&self, db: &dyn SyntaxGroup) -> ExprPath {
8993 ExprPath::from_syntax_node(db, self.children[0].clone())
8994 }
8995 pub fn pattern(&self, db: &dyn SyntaxGroup) -> OptionPatternEnumInnerPattern {
8996 OptionPatternEnumInnerPattern::from_syntax_node(db, self.children[1].clone())
8997 }
8998}
8999#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9000pub struct PatternEnumPtr(pub SyntaxStablePtrId);
9001impl PatternEnumPtr {}
9002impl TypedStablePtr for PatternEnumPtr {
9003 type SyntaxNode = PatternEnum;
9004 fn untyped(&self) -> SyntaxStablePtrId {
9005 self.0
9006 }
9007 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternEnum {
9008 PatternEnum::from_syntax_node(db, self.0.lookup(db))
9009 }
9010}
9011impl From<PatternEnumPtr> for SyntaxStablePtrId {
9012 fn from(ptr: PatternEnumPtr) -> Self {
9013 ptr.untyped()
9014 }
9015}
9016#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9017pub struct PatternEnumGreen(pub GreenId);
9018impl TypedSyntaxNode for PatternEnum {
9019 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternEnum);
9020 type StablePtr = PatternEnumPtr;
9021 type Green = PatternEnumGreen;
9022 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9023 PatternEnumGreen(
9024 Arc::new(GreenNode {
9025 kind: SyntaxKind::PatternEnum,
9026 details: GreenNodeDetails::Node {
9027 children: vec![
9028 ExprPath::missing(db).0,
9029 OptionPatternEnumInnerPattern::missing(db).0,
9030 ],
9031 width: TextWidth::default(),
9032 },
9033 })
9034 .intern(db),
9035 )
9036 }
9037 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9038 let kind = node.kind(db);
9039 assert_eq!(
9040 kind,
9041 SyntaxKind::PatternEnum,
9042 "Unexpected SyntaxKind {:?}. Expected {:?}.",
9043 kind,
9044 SyntaxKind::PatternEnum
9045 );
9046 let children = db.get_children(node.clone());
9047 Self { node, children }
9048 }
9049 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9050 let kind = node.kind(db);
9051 if kind == SyntaxKind::PatternEnum { Some(Self::from_syntax_node(db, node)) } else { None }
9052 }
9053 fn as_syntax_node(&self) -> SyntaxNode {
9054 self.node.clone()
9055 }
9056 fn stable_ptr(&self) -> Self::StablePtr {
9057 PatternEnumPtr(self.node.0.stable_ptr)
9058 }
9059}
9060impl From<&PatternEnum> for SyntaxStablePtrId {
9061 fn from(node: &PatternEnum) -> Self {
9062 node.stable_ptr().untyped()
9063 }
9064}
9065#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9066pub struct PatternEnumInnerPattern {
9067 node: SyntaxNode,
9068 children: Arc<[SyntaxNode]>,
9069}
9070impl PatternEnumInnerPattern {
9071 pub const INDEX_LPAREN: usize = 0;
9072 pub const INDEX_PATTERN: usize = 1;
9073 pub const INDEX_RPAREN: usize = 2;
9074 pub fn new_green(
9075 db: &dyn SyntaxGroup,
9076 lparen: TerminalLParenGreen,
9077 pattern: PatternGreen,
9078 rparen: TerminalRParenGreen,
9079 ) -> PatternEnumInnerPatternGreen {
9080 let children: Vec<GreenId> = vec![lparen.0, pattern.0, rparen.0];
9081 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
9082 PatternEnumInnerPatternGreen(
9083 Arc::new(GreenNode {
9084 kind: SyntaxKind::PatternEnumInnerPattern,
9085 details: GreenNodeDetails::Node { children, width },
9086 })
9087 .intern(db),
9088 )
9089 }
9090}
9091impl PatternEnumInnerPattern {
9092 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
9093 TerminalLParen::from_syntax_node(db, self.children[0].clone())
9094 }
9095 pub fn pattern(&self, db: &dyn SyntaxGroup) -> Pattern {
9096 Pattern::from_syntax_node(db, self.children[1].clone())
9097 }
9098 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
9099 TerminalRParen::from_syntax_node(db, self.children[2].clone())
9100 }
9101}
9102#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9103pub struct PatternEnumInnerPatternPtr(pub SyntaxStablePtrId);
9104impl PatternEnumInnerPatternPtr {}
9105impl TypedStablePtr for PatternEnumInnerPatternPtr {
9106 type SyntaxNode = PatternEnumInnerPattern;
9107 fn untyped(&self) -> SyntaxStablePtrId {
9108 self.0
9109 }
9110 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternEnumInnerPattern {
9111 PatternEnumInnerPattern::from_syntax_node(db, self.0.lookup(db))
9112 }
9113}
9114impl From<PatternEnumInnerPatternPtr> for SyntaxStablePtrId {
9115 fn from(ptr: PatternEnumInnerPatternPtr) -> Self {
9116 ptr.untyped()
9117 }
9118}
9119#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9120pub struct PatternEnumInnerPatternGreen(pub GreenId);
9121impl TypedSyntaxNode for PatternEnumInnerPattern {
9122 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternEnumInnerPattern);
9123 type StablePtr = PatternEnumInnerPatternPtr;
9124 type Green = PatternEnumInnerPatternGreen;
9125 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9126 PatternEnumInnerPatternGreen(
9127 Arc::new(GreenNode {
9128 kind: SyntaxKind::PatternEnumInnerPattern,
9129 details: GreenNodeDetails::Node {
9130 children: vec![
9131 TerminalLParen::missing(db).0,
9132 Pattern::missing(db).0,
9133 TerminalRParen::missing(db).0,
9134 ],
9135 width: TextWidth::default(),
9136 },
9137 })
9138 .intern(db),
9139 )
9140 }
9141 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9142 let kind = node.kind(db);
9143 assert_eq!(
9144 kind,
9145 SyntaxKind::PatternEnumInnerPattern,
9146 "Unexpected SyntaxKind {:?}. Expected {:?}.",
9147 kind,
9148 SyntaxKind::PatternEnumInnerPattern
9149 );
9150 let children = db.get_children(node.clone());
9151 Self { node, children }
9152 }
9153 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9154 let kind = node.kind(db);
9155 if kind == SyntaxKind::PatternEnumInnerPattern {
9156 Some(Self::from_syntax_node(db, node))
9157 } else {
9158 None
9159 }
9160 }
9161 fn as_syntax_node(&self) -> SyntaxNode {
9162 self.node.clone()
9163 }
9164 fn stable_ptr(&self) -> Self::StablePtr {
9165 PatternEnumInnerPatternPtr(self.node.0.stable_ptr)
9166 }
9167}
9168impl From<&PatternEnumInnerPattern> for SyntaxStablePtrId {
9169 fn from(node: &PatternEnumInnerPattern) -> Self {
9170 node.stable_ptr().untyped()
9171 }
9172}
9173#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9174pub enum OptionPatternEnumInnerPattern {
9175 Empty(OptionPatternEnumInnerPatternEmpty),
9176 PatternEnumInnerPattern(PatternEnumInnerPattern),
9177}
9178#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9179pub struct OptionPatternEnumInnerPatternPtr(pub SyntaxStablePtrId);
9180impl TypedStablePtr for OptionPatternEnumInnerPatternPtr {
9181 type SyntaxNode = OptionPatternEnumInnerPattern;
9182 fn untyped(&self) -> SyntaxStablePtrId {
9183 self.0
9184 }
9185 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionPatternEnumInnerPattern {
9186 OptionPatternEnumInnerPattern::from_syntax_node(db, self.0.lookup(db))
9187 }
9188}
9189impl From<OptionPatternEnumInnerPatternPtr> for SyntaxStablePtrId {
9190 fn from(ptr: OptionPatternEnumInnerPatternPtr) -> Self {
9191 ptr.untyped()
9192 }
9193}
9194impl From<OptionPatternEnumInnerPatternEmptyPtr> for OptionPatternEnumInnerPatternPtr {
9195 fn from(value: OptionPatternEnumInnerPatternEmptyPtr) -> Self {
9196 Self(value.0)
9197 }
9198}
9199impl From<PatternEnumInnerPatternPtr> for OptionPatternEnumInnerPatternPtr {
9200 fn from(value: PatternEnumInnerPatternPtr) -> Self {
9201 Self(value.0)
9202 }
9203}
9204impl From<OptionPatternEnumInnerPatternEmptyGreen> for OptionPatternEnumInnerPatternGreen {
9205 fn from(value: OptionPatternEnumInnerPatternEmptyGreen) -> Self {
9206 Self(value.0)
9207 }
9208}
9209impl From<PatternEnumInnerPatternGreen> for OptionPatternEnumInnerPatternGreen {
9210 fn from(value: PatternEnumInnerPatternGreen) -> Self {
9211 Self(value.0)
9212 }
9213}
9214#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9215pub struct OptionPatternEnumInnerPatternGreen(pub GreenId);
9216impl TypedSyntaxNode for OptionPatternEnumInnerPattern {
9217 const OPTIONAL_KIND: Option<SyntaxKind> = None;
9218 type StablePtr = OptionPatternEnumInnerPatternPtr;
9219 type Green = OptionPatternEnumInnerPatternGreen;
9220 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9221 panic!("No missing variant.");
9222 }
9223 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9224 let kind = node.kind(db);
9225 match kind {
9226 SyntaxKind::OptionPatternEnumInnerPatternEmpty => OptionPatternEnumInnerPattern::Empty(
9227 OptionPatternEnumInnerPatternEmpty::from_syntax_node(db, node),
9228 ),
9229 SyntaxKind::PatternEnumInnerPattern => {
9230 OptionPatternEnumInnerPattern::PatternEnumInnerPattern(
9231 PatternEnumInnerPattern::from_syntax_node(db, node),
9232 )
9233 }
9234 _ => panic!(
9235 "Unexpected syntax kind {:?} when constructing {}.",
9236 kind, "OptionPatternEnumInnerPattern"
9237 ),
9238 }
9239 }
9240 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9241 let kind = node.kind(db);
9242 match kind {
9243 SyntaxKind::OptionPatternEnumInnerPatternEmpty => {
9244 Some(OptionPatternEnumInnerPattern::Empty(
9245 OptionPatternEnumInnerPatternEmpty::from_syntax_node(db, node),
9246 ))
9247 }
9248 SyntaxKind::PatternEnumInnerPattern => {
9249 Some(OptionPatternEnumInnerPattern::PatternEnumInnerPattern(
9250 PatternEnumInnerPattern::from_syntax_node(db, node),
9251 ))
9252 }
9253 _ => None,
9254 }
9255 }
9256 fn as_syntax_node(&self) -> SyntaxNode {
9257 match self {
9258 OptionPatternEnumInnerPattern::Empty(x) => x.as_syntax_node(),
9259 OptionPatternEnumInnerPattern::PatternEnumInnerPattern(x) => x.as_syntax_node(),
9260 }
9261 }
9262 fn stable_ptr(&self) -> Self::StablePtr {
9263 OptionPatternEnumInnerPatternPtr(self.as_syntax_node().0.stable_ptr)
9264 }
9265}
9266impl From<&OptionPatternEnumInnerPattern> for SyntaxStablePtrId {
9267 fn from(node: &OptionPatternEnumInnerPattern) -> Self {
9268 node.stable_ptr().untyped()
9269 }
9270}
9271impl OptionPatternEnumInnerPattern {
9272 pub fn is_variant(kind: SyntaxKind) -> bool {
9274 matches!(
9275 kind,
9276 SyntaxKind::OptionPatternEnumInnerPatternEmpty | SyntaxKind::PatternEnumInnerPattern
9277 )
9278 }
9279}
9280#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9281pub struct OptionPatternEnumInnerPatternEmpty {
9282 node: SyntaxNode,
9283 children: Arc<[SyntaxNode]>,
9284}
9285impl OptionPatternEnumInnerPatternEmpty {
9286 pub fn new_green(db: &dyn SyntaxGroup) -> OptionPatternEnumInnerPatternEmptyGreen {
9287 let children: Vec<GreenId> = vec![];
9288 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
9289 OptionPatternEnumInnerPatternEmptyGreen(
9290 Arc::new(GreenNode {
9291 kind: SyntaxKind::OptionPatternEnumInnerPatternEmpty,
9292 details: GreenNodeDetails::Node { children, width },
9293 })
9294 .intern(db),
9295 )
9296 }
9297}
9298impl OptionPatternEnumInnerPatternEmpty {}
9299#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9300pub struct OptionPatternEnumInnerPatternEmptyPtr(pub SyntaxStablePtrId);
9301impl OptionPatternEnumInnerPatternEmptyPtr {}
9302impl TypedStablePtr for OptionPatternEnumInnerPatternEmptyPtr {
9303 type SyntaxNode = OptionPatternEnumInnerPatternEmpty;
9304 fn untyped(&self) -> SyntaxStablePtrId {
9305 self.0
9306 }
9307 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionPatternEnumInnerPatternEmpty {
9308 OptionPatternEnumInnerPatternEmpty::from_syntax_node(db, self.0.lookup(db))
9309 }
9310}
9311impl From<OptionPatternEnumInnerPatternEmptyPtr> for SyntaxStablePtrId {
9312 fn from(ptr: OptionPatternEnumInnerPatternEmptyPtr) -> Self {
9313 ptr.untyped()
9314 }
9315}
9316#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9317pub struct OptionPatternEnumInnerPatternEmptyGreen(pub GreenId);
9318impl TypedSyntaxNode for OptionPatternEnumInnerPatternEmpty {
9319 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionPatternEnumInnerPatternEmpty);
9320 type StablePtr = OptionPatternEnumInnerPatternEmptyPtr;
9321 type Green = OptionPatternEnumInnerPatternEmptyGreen;
9322 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9323 OptionPatternEnumInnerPatternEmptyGreen(
9324 Arc::new(GreenNode {
9325 kind: SyntaxKind::OptionPatternEnumInnerPatternEmpty,
9326 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
9327 })
9328 .intern(db),
9329 )
9330 }
9331 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9332 let kind = node.kind(db);
9333 assert_eq!(
9334 kind,
9335 SyntaxKind::OptionPatternEnumInnerPatternEmpty,
9336 "Unexpected SyntaxKind {:?}. Expected {:?}.",
9337 kind,
9338 SyntaxKind::OptionPatternEnumInnerPatternEmpty
9339 );
9340 let children = db.get_children(node.clone());
9341 Self { node, children }
9342 }
9343 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9344 let kind = node.kind(db);
9345 if kind == SyntaxKind::OptionPatternEnumInnerPatternEmpty {
9346 Some(Self::from_syntax_node(db, node))
9347 } else {
9348 None
9349 }
9350 }
9351 fn as_syntax_node(&self) -> SyntaxNode {
9352 self.node.clone()
9353 }
9354 fn stable_ptr(&self) -> Self::StablePtr {
9355 OptionPatternEnumInnerPatternEmptyPtr(self.node.0.stable_ptr)
9356 }
9357}
9358impl From<&OptionPatternEnumInnerPatternEmpty> for SyntaxStablePtrId {
9359 fn from(node: &OptionPatternEnumInnerPatternEmpty) -> Self {
9360 node.stable_ptr().untyped()
9361 }
9362}
9363#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9364pub struct TypeClause {
9365 node: SyntaxNode,
9366 children: Arc<[SyntaxNode]>,
9367}
9368impl TypeClause {
9369 pub const INDEX_COLON: usize = 0;
9370 pub const INDEX_TY: usize = 1;
9371 pub fn new_green(
9372 db: &dyn SyntaxGroup,
9373 colon: TerminalColonGreen,
9374 ty: ExprGreen,
9375 ) -> TypeClauseGreen {
9376 let children: Vec<GreenId> = vec![colon.0, ty.0];
9377 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
9378 TypeClauseGreen(
9379 Arc::new(GreenNode {
9380 kind: SyntaxKind::TypeClause,
9381 details: GreenNodeDetails::Node { children, width },
9382 })
9383 .intern(db),
9384 )
9385 }
9386}
9387impl TypeClause {
9388 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
9389 TerminalColon::from_syntax_node(db, self.children[0].clone())
9390 }
9391 pub fn ty(&self, db: &dyn SyntaxGroup) -> Expr {
9392 Expr::from_syntax_node(db, self.children[1].clone())
9393 }
9394}
9395#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9396pub struct TypeClausePtr(pub SyntaxStablePtrId);
9397impl TypeClausePtr {}
9398impl TypedStablePtr for TypeClausePtr {
9399 type SyntaxNode = TypeClause;
9400 fn untyped(&self) -> SyntaxStablePtrId {
9401 self.0
9402 }
9403 fn lookup(&self, db: &dyn SyntaxGroup) -> TypeClause {
9404 TypeClause::from_syntax_node(db, self.0.lookup(db))
9405 }
9406}
9407impl From<TypeClausePtr> for SyntaxStablePtrId {
9408 fn from(ptr: TypeClausePtr) -> Self {
9409 ptr.untyped()
9410 }
9411}
9412#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9413pub struct TypeClauseGreen(pub GreenId);
9414impl TypedSyntaxNode for TypeClause {
9415 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TypeClause);
9416 type StablePtr = TypeClausePtr;
9417 type Green = TypeClauseGreen;
9418 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9419 TypeClauseGreen(
9420 Arc::new(GreenNode {
9421 kind: SyntaxKind::TypeClause,
9422 details: GreenNodeDetails::Node {
9423 children: vec![TerminalColon::missing(db).0, Expr::missing(db).0],
9424 width: TextWidth::default(),
9425 },
9426 })
9427 .intern(db),
9428 )
9429 }
9430 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9431 let kind = node.kind(db);
9432 assert_eq!(
9433 kind,
9434 SyntaxKind::TypeClause,
9435 "Unexpected SyntaxKind {:?}. Expected {:?}.",
9436 kind,
9437 SyntaxKind::TypeClause
9438 );
9439 let children = db.get_children(node.clone());
9440 Self { node, children }
9441 }
9442 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9443 let kind = node.kind(db);
9444 if kind == SyntaxKind::TypeClause { Some(Self::from_syntax_node(db, node)) } else { None }
9445 }
9446 fn as_syntax_node(&self) -> SyntaxNode {
9447 self.node.clone()
9448 }
9449 fn stable_ptr(&self) -> Self::StablePtr {
9450 TypeClausePtr(self.node.0.stable_ptr)
9451 }
9452}
9453impl From<&TypeClause> for SyntaxStablePtrId {
9454 fn from(node: &TypeClause) -> Self {
9455 node.stable_ptr().untyped()
9456 }
9457}
9458#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9459pub enum OptionTypeClause {
9460 Empty(OptionTypeClauseEmpty),
9461 TypeClause(TypeClause),
9462}
9463#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9464pub struct OptionTypeClausePtr(pub SyntaxStablePtrId);
9465impl TypedStablePtr for OptionTypeClausePtr {
9466 type SyntaxNode = OptionTypeClause;
9467 fn untyped(&self) -> SyntaxStablePtrId {
9468 self.0
9469 }
9470 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTypeClause {
9471 OptionTypeClause::from_syntax_node(db, self.0.lookup(db))
9472 }
9473}
9474impl From<OptionTypeClausePtr> for SyntaxStablePtrId {
9475 fn from(ptr: OptionTypeClausePtr) -> Self {
9476 ptr.untyped()
9477 }
9478}
9479impl From<OptionTypeClauseEmptyPtr> for OptionTypeClausePtr {
9480 fn from(value: OptionTypeClauseEmptyPtr) -> Self {
9481 Self(value.0)
9482 }
9483}
9484impl From<TypeClausePtr> for OptionTypeClausePtr {
9485 fn from(value: TypeClausePtr) -> Self {
9486 Self(value.0)
9487 }
9488}
9489impl From<OptionTypeClauseEmptyGreen> for OptionTypeClauseGreen {
9490 fn from(value: OptionTypeClauseEmptyGreen) -> Self {
9491 Self(value.0)
9492 }
9493}
9494impl From<TypeClauseGreen> for OptionTypeClauseGreen {
9495 fn from(value: TypeClauseGreen) -> Self {
9496 Self(value.0)
9497 }
9498}
9499#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9500pub struct OptionTypeClauseGreen(pub GreenId);
9501impl TypedSyntaxNode for OptionTypeClause {
9502 const OPTIONAL_KIND: Option<SyntaxKind> = None;
9503 type StablePtr = OptionTypeClausePtr;
9504 type Green = OptionTypeClauseGreen;
9505 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9506 panic!("No missing variant.");
9507 }
9508 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9509 let kind = node.kind(db);
9510 match kind {
9511 SyntaxKind::OptionTypeClauseEmpty => {
9512 OptionTypeClause::Empty(OptionTypeClauseEmpty::from_syntax_node(db, node))
9513 }
9514 SyntaxKind::TypeClause => {
9515 OptionTypeClause::TypeClause(TypeClause::from_syntax_node(db, node))
9516 }
9517 _ => panic!(
9518 "Unexpected syntax kind {:?} when constructing {}.",
9519 kind, "OptionTypeClause"
9520 ),
9521 }
9522 }
9523 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9524 let kind = node.kind(db);
9525 match kind {
9526 SyntaxKind::OptionTypeClauseEmpty => {
9527 Some(OptionTypeClause::Empty(OptionTypeClauseEmpty::from_syntax_node(db, node)))
9528 }
9529 SyntaxKind::TypeClause => {
9530 Some(OptionTypeClause::TypeClause(TypeClause::from_syntax_node(db, node)))
9531 }
9532 _ => None,
9533 }
9534 }
9535 fn as_syntax_node(&self) -> SyntaxNode {
9536 match self {
9537 OptionTypeClause::Empty(x) => x.as_syntax_node(),
9538 OptionTypeClause::TypeClause(x) => x.as_syntax_node(),
9539 }
9540 }
9541 fn stable_ptr(&self) -> Self::StablePtr {
9542 OptionTypeClausePtr(self.as_syntax_node().0.stable_ptr)
9543 }
9544}
9545impl From<&OptionTypeClause> for SyntaxStablePtrId {
9546 fn from(node: &OptionTypeClause) -> Self {
9547 node.stable_ptr().untyped()
9548 }
9549}
9550impl OptionTypeClause {
9551 pub fn is_variant(kind: SyntaxKind) -> bool {
9553 matches!(kind, SyntaxKind::OptionTypeClauseEmpty | SyntaxKind::TypeClause)
9554 }
9555}
9556#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9557pub struct OptionTypeClauseEmpty {
9558 node: SyntaxNode,
9559 children: Arc<[SyntaxNode]>,
9560}
9561impl OptionTypeClauseEmpty {
9562 pub fn new_green(db: &dyn SyntaxGroup) -> OptionTypeClauseEmptyGreen {
9563 let children: Vec<GreenId> = vec![];
9564 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
9565 OptionTypeClauseEmptyGreen(
9566 Arc::new(GreenNode {
9567 kind: SyntaxKind::OptionTypeClauseEmpty,
9568 details: GreenNodeDetails::Node { children, width },
9569 })
9570 .intern(db),
9571 )
9572 }
9573}
9574impl OptionTypeClauseEmpty {}
9575#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9576pub struct OptionTypeClauseEmptyPtr(pub SyntaxStablePtrId);
9577impl OptionTypeClauseEmptyPtr {}
9578impl TypedStablePtr for OptionTypeClauseEmptyPtr {
9579 type SyntaxNode = OptionTypeClauseEmpty;
9580 fn untyped(&self) -> SyntaxStablePtrId {
9581 self.0
9582 }
9583 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTypeClauseEmpty {
9584 OptionTypeClauseEmpty::from_syntax_node(db, self.0.lookup(db))
9585 }
9586}
9587impl From<OptionTypeClauseEmptyPtr> for SyntaxStablePtrId {
9588 fn from(ptr: OptionTypeClauseEmptyPtr) -> Self {
9589 ptr.untyped()
9590 }
9591}
9592#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9593pub struct OptionTypeClauseEmptyGreen(pub GreenId);
9594impl TypedSyntaxNode for OptionTypeClauseEmpty {
9595 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionTypeClauseEmpty);
9596 type StablePtr = OptionTypeClauseEmptyPtr;
9597 type Green = OptionTypeClauseEmptyGreen;
9598 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9599 OptionTypeClauseEmptyGreen(
9600 Arc::new(GreenNode {
9601 kind: SyntaxKind::OptionTypeClauseEmpty,
9602 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
9603 })
9604 .intern(db),
9605 )
9606 }
9607 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9608 let kind = node.kind(db);
9609 assert_eq!(
9610 kind,
9611 SyntaxKind::OptionTypeClauseEmpty,
9612 "Unexpected SyntaxKind {:?}. Expected {:?}.",
9613 kind,
9614 SyntaxKind::OptionTypeClauseEmpty
9615 );
9616 let children = db.get_children(node.clone());
9617 Self { node, children }
9618 }
9619 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9620 let kind = node.kind(db);
9621 if kind == SyntaxKind::OptionTypeClauseEmpty {
9622 Some(Self::from_syntax_node(db, node))
9623 } else {
9624 None
9625 }
9626 }
9627 fn as_syntax_node(&self) -> SyntaxNode {
9628 self.node.clone()
9629 }
9630 fn stable_ptr(&self) -> Self::StablePtr {
9631 OptionTypeClauseEmptyPtr(self.node.0.stable_ptr)
9632 }
9633}
9634impl From<&OptionTypeClauseEmpty> for SyntaxStablePtrId {
9635 fn from(node: &OptionTypeClauseEmpty) -> Self {
9636 node.stable_ptr().untyped()
9637 }
9638}
9639#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9640pub struct ReturnTypeClause {
9641 node: SyntaxNode,
9642 children: Arc<[SyntaxNode]>,
9643}
9644impl ReturnTypeClause {
9645 pub const INDEX_ARROW: usize = 0;
9646 pub const INDEX_TY: usize = 1;
9647 pub fn new_green(
9648 db: &dyn SyntaxGroup,
9649 arrow: TerminalArrowGreen,
9650 ty: ExprGreen,
9651 ) -> ReturnTypeClauseGreen {
9652 let children: Vec<GreenId> = vec![arrow.0, ty.0];
9653 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
9654 ReturnTypeClauseGreen(
9655 Arc::new(GreenNode {
9656 kind: SyntaxKind::ReturnTypeClause,
9657 details: GreenNodeDetails::Node { children, width },
9658 })
9659 .intern(db),
9660 )
9661 }
9662}
9663impl ReturnTypeClause {
9664 pub fn arrow(&self, db: &dyn SyntaxGroup) -> TerminalArrow {
9665 TerminalArrow::from_syntax_node(db, self.children[0].clone())
9666 }
9667 pub fn ty(&self, db: &dyn SyntaxGroup) -> Expr {
9668 Expr::from_syntax_node(db, self.children[1].clone())
9669 }
9670}
9671#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9672pub struct ReturnTypeClausePtr(pub SyntaxStablePtrId);
9673impl ReturnTypeClausePtr {}
9674impl TypedStablePtr for ReturnTypeClausePtr {
9675 type SyntaxNode = ReturnTypeClause;
9676 fn untyped(&self) -> SyntaxStablePtrId {
9677 self.0
9678 }
9679 fn lookup(&self, db: &dyn SyntaxGroup) -> ReturnTypeClause {
9680 ReturnTypeClause::from_syntax_node(db, self.0.lookup(db))
9681 }
9682}
9683impl From<ReturnTypeClausePtr> for SyntaxStablePtrId {
9684 fn from(ptr: ReturnTypeClausePtr) -> Self {
9685 ptr.untyped()
9686 }
9687}
9688#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9689pub struct ReturnTypeClauseGreen(pub GreenId);
9690impl TypedSyntaxNode for ReturnTypeClause {
9691 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ReturnTypeClause);
9692 type StablePtr = ReturnTypeClausePtr;
9693 type Green = ReturnTypeClauseGreen;
9694 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9695 ReturnTypeClauseGreen(
9696 Arc::new(GreenNode {
9697 kind: SyntaxKind::ReturnTypeClause,
9698 details: GreenNodeDetails::Node {
9699 children: vec![TerminalArrow::missing(db).0, Expr::missing(db).0],
9700 width: TextWidth::default(),
9701 },
9702 })
9703 .intern(db),
9704 )
9705 }
9706 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9707 let kind = node.kind(db);
9708 assert_eq!(
9709 kind,
9710 SyntaxKind::ReturnTypeClause,
9711 "Unexpected SyntaxKind {:?}. Expected {:?}.",
9712 kind,
9713 SyntaxKind::ReturnTypeClause
9714 );
9715 let children = db.get_children(node.clone());
9716 Self { node, children }
9717 }
9718 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9719 let kind = node.kind(db);
9720 if kind == SyntaxKind::ReturnTypeClause {
9721 Some(Self::from_syntax_node(db, node))
9722 } else {
9723 None
9724 }
9725 }
9726 fn as_syntax_node(&self) -> SyntaxNode {
9727 self.node.clone()
9728 }
9729 fn stable_ptr(&self) -> Self::StablePtr {
9730 ReturnTypeClausePtr(self.node.0.stable_ptr)
9731 }
9732}
9733impl From<&ReturnTypeClause> for SyntaxStablePtrId {
9734 fn from(node: &ReturnTypeClause) -> Self {
9735 node.stable_ptr().untyped()
9736 }
9737}
9738#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9739pub enum OptionReturnTypeClause {
9740 Empty(OptionReturnTypeClauseEmpty),
9741 ReturnTypeClause(ReturnTypeClause),
9742}
9743#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9744pub struct OptionReturnTypeClausePtr(pub SyntaxStablePtrId);
9745impl TypedStablePtr for OptionReturnTypeClausePtr {
9746 type SyntaxNode = OptionReturnTypeClause;
9747 fn untyped(&self) -> SyntaxStablePtrId {
9748 self.0
9749 }
9750 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionReturnTypeClause {
9751 OptionReturnTypeClause::from_syntax_node(db, self.0.lookup(db))
9752 }
9753}
9754impl From<OptionReturnTypeClausePtr> for SyntaxStablePtrId {
9755 fn from(ptr: OptionReturnTypeClausePtr) -> Self {
9756 ptr.untyped()
9757 }
9758}
9759impl From<OptionReturnTypeClauseEmptyPtr> for OptionReturnTypeClausePtr {
9760 fn from(value: OptionReturnTypeClauseEmptyPtr) -> Self {
9761 Self(value.0)
9762 }
9763}
9764impl From<ReturnTypeClausePtr> for OptionReturnTypeClausePtr {
9765 fn from(value: ReturnTypeClausePtr) -> Self {
9766 Self(value.0)
9767 }
9768}
9769impl From<OptionReturnTypeClauseEmptyGreen> for OptionReturnTypeClauseGreen {
9770 fn from(value: OptionReturnTypeClauseEmptyGreen) -> Self {
9771 Self(value.0)
9772 }
9773}
9774impl From<ReturnTypeClauseGreen> for OptionReturnTypeClauseGreen {
9775 fn from(value: ReturnTypeClauseGreen) -> Self {
9776 Self(value.0)
9777 }
9778}
9779#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9780pub struct OptionReturnTypeClauseGreen(pub GreenId);
9781impl TypedSyntaxNode for OptionReturnTypeClause {
9782 const OPTIONAL_KIND: Option<SyntaxKind> = None;
9783 type StablePtr = OptionReturnTypeClausePtr;
9784 type Green = OptionReturnTypeClauseGreen;
9785 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9786 panic!("No missing variant.");
9787 }
9788 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9789 let kind = node.kind(db);
9790 match kind {
9791 SyntaxKind::OptionReturnTypeClauseEmpty => OptionReturnTypeClause::Empty(
9792 OptionReturnTypeClauseEmpty::from_syntax_node(db, node),
9793 ),
9794 SyntaxKind::ReturnTypeClause => OptionReturnTypeClause::ReturnTypeClause(
9795 ReturnTypeClause::from_syntax_node(db, node),
9796 ),
9797 _ => panic!(
9798 "Unexpected syntax kind {:?} when constructing {}.",
9799 kind, "OptionReturnTypeClause"
9800 ),
9801 }
9802 }
9803 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9804 let kind = node.kind(db);
9805 match kind {
9806 SyntaxKind::OptionReturnTypeClauseEmpty => Some(OptionReturnTypeClause::Empty(
9807 OptionReturnTypeClauseEmpty::from_syntax_node(db, node),
9808 )),
9809 SyntaxKind::ReturnTypeClause => Some(OptionReturnTypeClause::ReturnTypeClause(
9810 ReturnTypeClause::from_syntax_node(db, node),
9811 )),
9812 _ => None,
9813 }
9814 }
9815 fn as_syntax_node(&self) -> SyntaxNode {
9816 match self {
9817 OptionReturnTypeClause::Empty(x) => x.as_syntax_node(),
9818 OptionReturnTypeClause::ReturnTypeClause(x) => x.as_syntax_node(),
9819 }
9820 }
9821 fn stable_ptr(&self) -> Self::StablePtr {
9822 OptionReturnTypeClausePtr(self.as_syntax_node().0.stable_ptr)
9823 }
9824}
9825impl From<&OptionReturnTypeClause> for SyntaxStablePtrId {
9826 fn from(node: &OptionReturnTypeClause) -> Self {
9827 node.stable_ptr().untyped()
9828 }
9829}
9830impl OptionReturnTypeClause {
9831 pub fn is_variant(kind: SyntaxKind) -> bool {
9833 matches!(kind, SyntaxKind::OptionReturnTypeClauseEmpty | SyntaxKind::ReturnTypeClause)
9834 }
9835}
9836#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9837pub struct OptionReturnTypeClauseEmpty {
9838 node: SyntaxNode,
9839 children: Arc<[SyntaxNode]>,
9840}
9841impl OptionReturnTypeClauseEmpty {
9842 pub fn new_green(db: &dyn SyntaxGroup) -> OptionReturnTypeClauseEmptyGreen {
9843 let children: Vec<GreenId> = vec![];
9844 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
9845 OptionReturnTypeClauseEmptyGreen(
9846 Arc::new(GreenNode {
9847 kind: SyntaxKind::OptionReturnTypeClauseEmpty,
9848 details: GreenNodeDetails::Node { children, width },
9849 })
9850 .intern(db),
9851 )
9852 }
9853}
9854impl OptionReturnTypeClauseEmpty {}
9855#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9856pub struct OptionReturnTypeClauseEmptyPtr(pub SyntaxStablePtrId);
9857impl OptionReturnTypeClauseEmptyPtr {}
9858impl TypedStablePtr for OptionReturnTypeClauseEmptyPtr {
9859 type SyntaxNode = OptionReturnTypeClauseEmpty;
9860 fn untyped(&self) -> SyntaxStablePtrId {
9861 self.0
9862 }
9863 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionReturnTypeClauseEmpty {
9864 OptionReturnTypeClauseEmpty::from_syntax_node(db, self.0.lookup(db))
9865 }
9866}
9867impl From<OptionReturnTypeClauseEmptyPtr> for SyntaxStablePtrId {
9868 fn from(ptr: OptionReturnTypeClauseEmptyPtr) -> Self {
9869 ptr.untyped()
9870 }
9871}
9872#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9873pub struct OptionReturnTypeClauseEmptyGreen(pub GreenId);
9874impl TypedSyntaxNode for OptionReturnTypeClauseEmpty {
9875 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionReturnTypeClauseEmpty);
9876 type StablePtr = OptionReturnTypeClauseEmptyPtr;
9877 type Green = OptionReturnTypeClauseEmptyGreen;
9878 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9879 OptionReturnTypeClauseEmptyGreen(
9880 Arc::new(GreenNode {
9881 kind: SyntaxKind::OptionReturnTypeClauseEmpty,
9882 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
9883 })
9884 .intern(db),
9885 )
9886 }
9887 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9888 let kind = node.kind(db);
9889 assert_eq!(
9890 kind,
9891 SyntaxKind::OptionReturnTypeClauseEmpty,
9892 "Unexpected SyntaxKind {:?}. Expected {:?}.",
9893 kind,
9894 SyntaxKind::OptionReturnTypeClauseEmpty
9895 );
9896 let children = db.get_children(node.clone());
9897 Self { node, children }
9898 }
9899 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9900 let kind = node.kind(db);
9901 if kind == SyntaxKind::OptionReturnTypeClauseEmpty {
9902 Some(Self::from_syntax_node(db, node))
9903 } else {
9904 None
9905 }
9906 }
9907 fn as_syntax_node(&self) -> SyntaxNode {
9908 self.node.clone()
9909 }
9910 fn stable_ptr(&self) -> Self::StablePtr {
9911 OptionReturnTypeClauseEmptyPtr(self.node.0.stable_ptr)
9912 }
9913}
9914impl From<&OptionReturnTypeClauseEmpty> for SyntaxStablePtrId {
9915 fn from(node: &OptionReturnTypeClauseEmpty) -> Self {
9916 node.stable_ptr().untyped()
9917 }
9918}
9919#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9920pub enum Statement {
9921 Let(StatementLet),
9922 Expr(StatementExpr),
9923 Continue(StatementContinue),
9924 Return(StatementReturn),
9925 Break(StatementBreak),
9926 Item(StatementItem),
9927 Missing(StatementMissing),
9928}
9929#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9930pub struct StatementPtr(pub SyntaxStablePtrId);
9931impl TypedStablePtr for StatementPtr {
9932 type SyntaxNode = Statement;
9933 fn untyped(&self) -> SyntaxStablePtrId {
9934 self.0
9935 }
9936 fn lookup(&self, db: &dyn SyntaxGroup) -> Statement {
9937 Statement::from_syntax_node(db, self.0.lookup(db))
9938 }
9939}
9940impl From<StatementPtr> for SyntaxStablePtrId {
9941 fn from(ptr: StatementPtr) -> Self {
9942 ptr.untyped()
9943 }
9944}
9945impl From<StatementLetPtr> for StatementPtr {
9946 fn from(value: StatementLetPtr) -> Self {
9947 Self(value.0)
9948 }
9949}
9950impl From<StatementExprPtr> for StatementPtr {
9951 fn from(value: StatementExprPtr) -> Self {
9952 Self(value.0)
9953 }
9954}
9955impl From<StatementContinuePtr> for StatementPtr {
9956 fn from(value: StatementContinuePtr) -> Self {
9957 Self(value.0)
9958 }
9959}
9960impl From<StatementReturnPtr> for StatementPtr {
9961 fn from(value: StatementReturnPtr) -> Self {
9962 Self(value.0)
9963 }
9964}
9965impl From<StatementBreakPtr> for StatementPtr {
9966 fn from(value: StatementBreakPtr) -> Self {
9967 Self(value.0)
9968 }
9969}
9970impl From<StatementItemPtr> for StatementPtr {
9971 fn from(value: StatementItemPtr) -> Self {
9972 Self(value.0)
9973 }
9974}
9975impl From<StatementMissingPtr> for StatementPtr {
9976 fn from(value: StatementMissingPtr) -> Self {
9977 Self(value.0)
9978 }
9979}
9980impl From<StatementLetGreen> for StatementGreen {
9981 fn from(value: StatementLetGreen) -> Self {
9982 Self(value.0)
9983 }
9984}
9985impl From<StatementExprGreen> for StatementGreen {
9986 fn from(value: StatementExprGreen) -> Self {
9987 Self(value.0)
9988 }
9989}
9990impl From<StatementContinueGreen> for StatementGreen {
9991 fn from(value: StatementContinueGreen) -> Self {
9992 Self(value.0)
9993 }
9994}
9995impl From<StatementReturnGreen> for StatementGreen {
9996 fn from(value: StatementReturnGreen) -> Self {
9997 Self(value.0)
9998 }
9999}
10000impl From<StatementBreakGreen> for StatementGreen {
10001 fn from(value: StatementBreakGreen) -> Self {
10002 Self(value.0)
10003 }
10004}
10005impl From<StatementItemGreen> for StatementGreen {
10006 fn from(value: StatementItemGreen) -> Self {
10007 Self(value.0)
10008 }
10009}
10010impl From<StatementMissingGreen> for StatementGreen {
10011 fn from(value: StatementMissingGreen) -> Self {
10012 Self(value.0)
10013 }
10014}
10015#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10016pub struct StatementGreen(pub GreenId);
10017impl TypedSyntaxNode for Statement {
10018 const OPTIONAL_KIND: Option<SyntaxKind> = None;
10019 type StablePtr = StatementPtr;
10020 type Green = StatementGreen;
10021 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10022 StatementGreen(StatementMissing::missing(db).0)
10023 }
10024 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10025 let kind = node.kind(db);
10026 match kind {
10027 SyntaxKind::StatementLet => Statement::Let(StatementLet::from_syntax_node(db, node)),
10028 SyntaxKind::StatementExpr => Statement::Expr(StatementExpr::from_syntax_node(db, node)),
10029 SyntaxKind::StatementContinue => {
10030 Statement::Continue(StatementContinue::from_syntax_node(db, node))
10031 }
10032 SyntaxKind::StatementReturn => {
10033 Statement::Return(StatementReturn::from_syntax_node(db, node))
10034 }
10035 SyntaxKind::StatementBreak => {
10036 Statement::Break(StatementBreak::from_syntax_node(db, node))
10037 }
10038 SyntaxKind::StatementItem => Statement::Item(StatementItem::from_syntax_node(db, node)),
10039 SyntaxKind::StatementMissing => {
10040 Statement::Missing(StatementMissing::from_syntax_node(db, node))
10041 }
10042 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "Statement"),
10043 }
10044 }
10045 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10046 let kind = node.kind(db);
10047 match kind {
10048 SyntaxKind::StatementLet => {
10049 Some(Statement::Let(StatementLet::from_syntax_node(db, node)))
10050 }
10051 SyntaxKind::StatementExpr => {
10052 Some(Statement::Expr(StatementExpr::from_syntax_node(db, node)))
10053 }
10054 SyntaxKind::StatementContinue => {
10055 Some(Statement::Continue(StatementContinue::from_syntax_node(db, node)))
10056 }
10057 SyntaxKind::StatementReturn => {
10058 Some(Statement::Return(StatementReturn::from_syntax_node(db, node)))
10059 }
10060 SyntaxKind::StatementBreak => {
10061 Some(Statement::Break(StatementBreak::from_syntax_node(db, node)))
10062 }
10063 SyntaxKind::StatementItem => {
10064 Some(Statement::Item(StatementItem::from_syntax_node(db, node)))
10065 }
10066 SyntaxKind::StatementMissing => {
10067 Some(Statement::Missing(StatementMissing::from_syntax_node(db, node)))
10068 }
10069 _ => None,
10070 }
10071 }
10072 fn as_syntax_node(&self) -> SyntaxNode {
10073 match self {
10074 Statement::Let(x) => x.as_syntax_node(),
10075 Statement::Expr(x) => x.as_syntax_node(),
10076 Statement::Continue(x) => x.as_syntax_node(),
10077 Statement::Return(x) => x.as_syntax_node(),
10078 Statement::Break(x) => x.as_syntax_node(),
10079 Statement::Item(x) => x.as_syntax_node(),
10080 Statement::Missing(x) => x.as_syntax_node(),
10081 }
10082 }
10083 fn stable_ptr(&self) -> Self::StablePtr {
10084 StatementPtr(self.as_syntax_node().0.stable_ptr)
10085 }
10086}
10087impl From<&Statement> for SyntaxStablePtrId {
10088 fn from(node: &Statement) -> Self {
10089 node.stable_ptr().untyped()
10090 }
10091}
10092impl Statement {
10093 pub fn is_variant(kind: SyntaxKind) -> bool {
10095 matches!(
10096 kind,
10097 SyntaxKind::StatementLet
10098 | SyntaxKind::StatementExpr
10099 | SyntaxKind::StatementContinue
10100 | SyntaxKind::StatementReturn
10101 | SyntaxKind::StatementBreak
10102 | SyntaxKind::StatementItem
10103 | SyntaxKind::StatementMissing
10104 )
10105 }
10106}
10107#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10108pub struct StatementList(ElementList<Statement, 1>);
10109impl Deref for StatementList {
10110 type Target = ElementList<Statement, 1>;
10111 fn deref(&self) -> &Self::Target {
10112 &self.0
10113 }
10114}
10115impl StatementList {
10116 pub fn new_green(db: &dyn SyntaxGroup, children: Vec<StatementGreen>) -> StatementListGreen {
10117 let width = children.iter().map(|id| id.0.lookup_intern(db).width()).sum();
10118 StatementListGreen(
10119 Arc::new(GreenNode {
10120 kind: SyntaxKind::StatementList,
10121 details: GreenNodeDetails::Node {
10122 children: children.iter().map(|x| x.0).collect(),
10123 width,
10124 },
10125 })
10126 .intern(db),
10127 )
10128 }
10129}
10130#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10131pub struct StatementListPtr(pub SyntaxStablePtrId);
10132impl TypedStablePtr for StatementListPtr {
10133 type SyntaxNode = StatementList;
10134 fn untyped(&self) -> SyntaxStablePtrId {
10135 self.0
10136 }
10137 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementList {
10138 StatementList::from_syntax_node(db, self.0.lookup(db))
10139 }
10140}
10141impl From<StatementListPtr> for SyntaxStablePtrId {
10142 fn from(ptr: StatementListPtr) -> Self {
10143 ptr.untyped()
10144 }
10145}
10146#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10147pub struct StatementListGreen(pub GreenId);
10148impl TypedSyntaxNode for StatementList {
10149 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementList);
10150 type StablePtr = StatementListPtr;
10151 type Green = StatementListGreen;
10152 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10153 StatementListGreen(
10154 Arc::new(GreenNode {
10155 kind: SyntaxKind::StatementList,
10156 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
10157 })
10158 .intern(db),
10159 )
10160 }
10161 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10162 Self(ElementList::new(node))
10163 }
10164 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10165 if node.kind(db) == SyntaxKind::StatementList {
10166 Some(Self(ElementList::new(node)))
10167 } else {
10168 None
10169 }
10170 }
10171 fn as_syntax_node(&self) -> SyntaxNode {
10172 self.node.clone()
10173 }
10174 fn stable_ptr(&self) -> Self::StablePtr {
10175 StatementListPtr(self.node.0.stable_ptr)
10176 }
10177}
10178impl From<&StatementList> for SyntaxStablePtrId {
10179 fn from(node: &StatementList) -> Self {
10180 node.stable_ptr().untyped()
10181 }
10182}
10183#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10184pub struct StatementMissing {
10185 node: SyntaxNode,
10186 children: Arc<[SyntaxNode]>,
10187}
10188impl StatementMissing {
10189 pub fn new_green(db: &dyn SyntaxGroup) -> StatementMissingGreen {
10190 let children: Vec<GreenId> = vec![];
10191 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
10192 StatementMissingGreen(
10193 Arc::new(GreenNode {
10194 kind: SyntaxKind::StatementMissing,
10195 details: GreenNodeDetails::Node { children, width },
10196 })
10197 .intern(db),
10198 )
10199 }
10200}
10201impl StatementMissing {}
10202#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10203pub struct StatementMissingPtr(pub SyntaxStablePtrId);
10204impl StatementMissingPtr {}
10205impl TypedStablePtr for StatementMissingPtr {
10206 type SyntaxNode = StatementMissing;
10207 fn untyped(&self) -> SyntaxStablePtrId {
10208 self.0
10209 }
10210 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementMissing {
10211 StatementMissing::from_syntax_node(db, self.0.lookup(db))
10212 }
10213}
10214impl From<StatementMissingPtr> for SyntaxStablePtrId {
10215 fn from(ptr: StatementMissingPtr) -> Self {
10216 ptr.untyped()
10217 }
10218}
10219#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10220pub struct StatementMissingGreen(pub GreenId);
10221impl TypedSyntaxNode for StatementMissing {
10222 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementMissing);
10223 type StablePtr = StatementMissingPtr;
10224 type Green = StatementMissingGreen;
10225 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10226 StatementMissingGreen(
10227 Arc::new(GreenNode {
10228 kind: SyntaxKind::StatementMissing,
10229 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
10230 })
10231 .intern(db),
10232 )
10233 }
10234 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10235 let kind = node.kind(db);
10236 assert_eq!(
10237 kind,
10238 SyntaxKind::StatementMissing,
10239 "Unexpected SyntaxKind {:?}. Expected {:?}.",
10240 kind,
10241 SyntaxKind::StatementMissing
10242 );
10243 let children = db.get_children(node.clone());
10244 Self { node, children }
10245 }
10246 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10247 let kind = node.kind(db);
10248 if kind == SyntaxKind::StatementMissing {
10249 Some(Self::from_syntax_node(db, node))
10250 } else {
10251 None
10252 }
10253 }
10254 fn as_syntax_node(&self) -> SyntaxNode {
10255 self.node.clone()
10256 }
10257 fn stable_ptr(&self) -> Self::StablePtr {
10258 StatementMissingPtr(self.node.0.stable_ptr)
10259 }
10260}
10261impl From<&StatementMissing> for SyntaxStablePtrId {
10262 fn from(node: &StatementMissing) -> Self {
10263 node.stable_ptr().untyped()
10264 }
10265}
10266#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10267pub struct StatementLet {
10268 node: SyntaxNode,
10269 children: Arc<[SyntaxNode]>,
10270}
10271impl StatementLet {
10272 pub const INDEX_ATTRIBUTES: usize = 0;
10273 pub const INDEX_LET_KW: usize = 1;
10274 pub const INDEX_PATTERN: usize = 2;
10275 pub const INDEX_TYPE_CLAUSE: usize = 3;
10276 pub const INDEX_EQ: usize = 4;
10277 pub const INDEX_RHS: usize = 5;
10278 pub const INDEX_SEMICOLON: usize = 6;
10279 pub fn new_green(
10280 db: &dyn SyntaxGroup,
10281 attributes: AttributeListGreen,
10282 let_kw: TerminalLetGreen,
10283 pattern: PatternGreen,
10284 type_clause: OptionTypeClauseGreen,
10285 eq: TerminalEqGreen,
10286 rhs: ExprGreen,
10287 semicolon: TerminalSemicolonGreen,
10288 ) -> StatementLetGreen {
10289 let children: Vec<GreenId> =
10290 vec![attributes.0, let_kw.0, pattern.0, type_clause.0, eq.0, rhs.0, semicolon.0];
10291 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
10292 StatementLetGreen(
10293 Arc::new(GreenNode {
10294 kind: SyntaxKind::StatementLet,
10295 details: GreenNodeDetails::Node { children, width },
10296 })
10297 .intern(db),
10298 )
10299 }
10300}
10301impl StatementLet {
10302 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
10303 AttributeList::from_syntax_node(db, self.children[0].clone())
10304 }
10305 pub fn let_kw(&self, db: &dyn SyntaxGroup) -> TerminalLet {
10306 TerminalLet::from_syntax_node(db, self.children[1].clone())
10307 }
10308 pub fn pattern(&self, db: &dyn SyntaxGroup) -> Pattern {
10309 Pattern::from_syntax_node(db, self.children[2].clone())
10310 }
10311 pub fn type_clause(&self, db: &dyn SyntaxGroup) -> OptionTypeClause {
10312 OptionTypeClause::from_syntax_node(db, self.children[3].clone())
10313 }
10314 pub fn eq(&self, db: &dyn SyntaxGroup) -> TerminalEq {
10315 TerminalEq::from_syntax_node(db, self.children[4].clone())
10316 }
10317 pub fn rhs(&self, db: &dyn SyntaxGroup) -> Expr {
10318 Expr::from_syntax_node(db, self.children[5].clone())
10319 }
10320 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
10321 TerminalSemicolon::from_syntax_node(db, self.children[6].clone())
10322 }
10323}
10324#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10325pub struct StatementLetPtr(pub SyntaxStablePtrId);
10326impl StatementLetPtr {
10327 pub fn pattern_green(self, db: &dyn SyntaxGroup) -> PatternGreen {
10328 let ptr = self.0.lookup_intern(db);
10329 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
10330 PatternGreen(key_fields[0])
10331 } else {
10332 panic!("Unexpected key field query on root.");
10333 }
10334 }
10335}
10336impl TypedStablePtr for StatementLetPtr {
10337 type SyntaxNode = StatementLet;
10338 fn untyped(&self) -> SyntaxStablePtrId {
10339 self.0
10340 }
10341 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementLet {
10342 StatementLet::from_syntax_node(db, self.0.lookup(db))
10343 }
10344}
10345impl From<StatementLetPtr> for SyntaxStablePtrId {
10346 fn from(ptr: StatementLetPtr) -> Self {
10347 ptr.untyped()
10348 }
10349}
10350#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10351pub struct StatementLetGreen(pub GreenId);
10352impl TypedSyntaxNode for StatementLet {
10353 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementLet);
10354 type StablePtr = StatementLetPtr;
10355 type Green = StatementLetGreen;
10356 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10357 StatementLetGreen(
10358 Arc::new(GreenNode {
10359 kind: SyntaxKind::StatementLet,
10360 details: GreenNodeDetails::Node {
10361 children: vec![
10362 AttributeList::missing(db).0,
10363 TerminalLet::missing(db).0,
10364 Pattern::missing(db).0,
10365 OptionTypeClause::missing(db).0,
10366 TerminalEq::missing(db).0,
10367 Expr::missing(db).0,
10368 TerminalSemicolon::missing(db).0,
10369 ],
10370 width: TextWidth::default(),
10371 },
10372 })
10373 .intern(db),
10374 )
10375 }
10376 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10377 let kind = node.kind(db);
10378 assert_eq!(
10379 kind,
10380 SyntaxKind::StatementLet,
10381 "Unexpected SyntaxKind {:?}. Expected {:?}.",
10382 kind,
10383 SyntaxKind::StatementLet
10384 );
10385 let children = db.get_children(node.clone());
10386 Self { node, children }
10387 }
10388 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10389 let kind = node.kind(db);
10390 if kind == SyntaxKind::StatementLet { Some(Self::from_syntax_node(db, node)) } else { None }
10391 }
10392 fn as_syntax_node(&self) -> SyntaxNode {
10393 self.node.clone()
10394 }
10395 fn stable_ptr(&self) -> Self::StablePtr {
10396 StatementLetPtr(self.node.0.stable_ptr)
10397 }
10398}
10399impl From<&StatementLet> for SyntaxStablePtrId {
10400 fn from(node: &StatementLet) -> Self {
10401 node.stable_ptr().untyped()
10402 }
10403}
10404#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10405pub enum OptionTerminalSemicolon {
10406 Empty(OptionTerminalSemicolonEmpty),
10407 TerminalSemicolon(TerminalSemicolon),
10408}
10409#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10410pub struct OptionTerminalSemicolonPtr(pub SyntaxStablePtrId);
10411impl TypedStablePtr for OptionTerminalSemicolonPtr {
10412 type SyntaxNode = OptionTerminalSemicolon;
10413 fn untyped(&self) -> SyntaxStablePtrId {
10414 self.0
10415 }
10416 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalSemicolon {
10417 OptionTerminalSemicolon::from_syntax_node(db, self.0.lookup(db))
10418 }
10419}
10420impl From<OptionTerminalSemicolonPtr> for SyntaxStablePtrId {
10421 fn from(ptr: OptionTerminalSemicolonPtr) -> Self {
10422 ptr.untyped()
10423 }
10424}
10425impl From<OptionTerminalSemicolonEmptyPtr> for OptionTerminalSemicolonPtr {
10426 fn from(value: OptionTerminalSemicolonEmptyPtr) -> Self {
10427 Self(value.0)
10428 }
10429}
10430impl From<TerminalSemicolonPtr> for OptionTerminalSemicolonPtr {
10431 fn from(value: TerminalSemicolonPtr) -> Self {
10432 Self(value.0)
10433 }
10434}
10435impl From<OptionTerminalSemicolonEmptyGreen> for OptionTerminalSemicolonGreen {
10436 fn from(value: OptionTerminalSemicolonEmptyGreen) -> Self {
10437 Self(value.0)
10438 }
10439}
10440impl From<TerminalSemicolonGreen> for OptionTerminalSemicolonGreen {
10441 fn from(value: TerminalSemicolonGreen) -> Self {
10442 Self(value.0)
10443 }
10444}
10445#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10446pub struct OptionTerminalSemicolonGreen(pub GreenId);
10447impl TypedSyntaxNode for OptionTerminalSemicolon {
10448 const OPTIONAL_KIND: Option<SyntaxKind> = None;
10449 type StablePtr = OptionTerminalSemicolonPtr;
10450 type Green = OptionTerminalSemicolonGreen;
10451 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10452 panic!("No missing variant.");
10453 }
10454 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10455 let kind = node.kind(db);
10456 match kind {
10457 SyntaxKind::OptionTerminalSemicolonEmpty => OptionTerminalSemicolon::Empty(
10458 OptionTerminalSemicolonEmpty::from_syntax_node(db, node),
10459 ),
10460 SyntaxKind::TerminalSemicolon => OptionTerminalSemicolon::TerminalSemicolon(
10461 TerminalSemicolon::from_syntax_node(db, node),
10462 ),
10463 _ => panic!(
10464 "Unexpected syntax kind {:?} when constructing {}.",
10465 kind, "OptionTerminalSemicolon"
10466 ),
10467 }
10468 }
10469 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10470 let kind = node.kind(db);
10471 match kind {
10472 SyntaxKind::OptionTerminalSemicolonEmpty => Some(OptionTerminalSemicolon::Empty(
10473 OptionTerminalSemicolonEmpty::from_syntax_node(db, node),
10474 )),
10475 SyntaxKind::TerminalSemicolon => Some(OptionTerminalSemicolon::TerminalSemicolon(
10476 TerminalSemicolon::from_syntax_node(db, node),
10477 )),
10478 _ => None,
10479 }
10480 }
10481 fn as_syntax_node(&self) -> SyntaxNode {
10482 match self {
10483 OptionTerminalSemicolon::Empty(x) => x.as_syntax_node(),
10484 OptionTerminalSemicolon::TerminalSemicolon(x) => x.as_syntax_node(),
10485 }
10486 }
10487 fn stable_ptr(&self) -> Self::StablePtr {
10488 OptionTerminalSemicolonPtr(self.as_syntax_node().0.stable_ptr)
10489 }
10490}
10491impl From<&OptionTerminalSemicolon> for SyntaxStablePtrId {
10492 fn from(node: &OptionTerminalSemicolon) -> Self {
10493 node.stable_ptr().untyped()
10494 }
10495}
10496impl OptionTerminalSemicolon {
10497 pub fn is_variant(kind: SyntaxKind) -> bool {
10499 matches!(kind, SyntaxKind::OptionTerminalSemicolonEmpty | SyntaxKind::TerminalSemicolon)
10500 }
10501}
10502#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10503pub struct OptionTerminalSemicolonEmpty {
10504 node: SyntaxNode,
10505 children: Arc<[SyntaxNode]>,
10506}
10507impl OptionTerminalSemicolonEmpty {
10508 pub fn new_green(db: &dyn SyntaxGroup) -> OptionTerminalSemicolonEmptyGreen {
10509 let children: Vec<GreenId> = vec![];
10510 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
10511 OptionTerminalSemicolonEmptyGreen(
10512 Arc::new(GreenNode {
10513 kind: SyntaxKind::OptionTerminalSemicolonEmpty,
10514 details: GreenNodeDetails::Node { children, width },
10515 })
10516 .intern(db),
10517 )
10518 }
10519}
10520impl OptionTerminalSemicolonEmpty {}
10521#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10522pub struct OptionTerminalSemicolonEmptyPtr(pub SyntaxStablePtrId);
10523impl OptionTerminalSemicolonEmptyPtr {}
10524impl TypedStablePtr for OptionTerminalSemicolonEmptyPtr {
10525 type SyntaxNode = OptionTerminalSemicolonEmpty;
10526 fn untyped(&self) -> SyntaxStablePtrId {
10527 self.0
10528 }
10529 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalSemicolonEmpty {
10530 OptionTerminalSemicolonEmpty::from_syntax_node(db, self.0.lookup(db))
10531 }
10532}
10533impl From<OptionTerminalSemicolonEmptyPtr> for SyntaxStablePtrId {
10534 fn from(ptr: OptionTerminalSemicolonEmptyPtr) -> Self {
10535 ptr.untyped()
10536 }
10537}
10538#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10539pub struct OptionTerminalSemicolonEmptyGreen(pub GreenId);
10540impl TypedSyntaxNode for OptionTerminalSemicolonEmpty {
10541 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionTerminalSemicolonEmpty);
10542 type StablePtr = OptionTerminalSemicolonEmptyPtr;
10543 type Green = OptionTerminalSemicolonEmptyGreen;
10544 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10545 OptionTerminalSemicolonEmptyGreen(
10546 Arc::new(GreenNode {
10547 kind: SyntaxKind::OptionTerminalSemicolonEmpty,
10548 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
10549 })
10550 .intern(db),
10551 )
10552 }
10553 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10554 let kind = node.kind(db);
10555 assert_eq!(
10556 kind,
10557 SyntaxKind::OptionTerminalSemicolonEmpty,
10558 "Unexpected SyntaxKind {:?}. Expected {:?}.",
10559 kind,
10560 SyntaxKind::OptionTerminalSemicolonEmpty
10561 );
10562 let children = db.get_children(node.clone());
10563 Self { node, children }
10564 }
10565 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10566 let kind = node.kind(db);
10567 if kind == SyntaxKind::OptionTerminalSemicolonEmpty {
10568 Some(Self::from_syntax_node(db, node))
10569 } else {
10570 None
10571 }
10572 }
10573 fn as_syntax_node(&self) -> SyntaxNode {
10574 self.node.clone()
10575 }
10576 fn stable_ptr(&self) -> Self::StablePtr {
10577 OptionTerminalSemicolonEmptyPtr(self.node.0.stable_ptr)
10578 }
10579}
10580impl From<&OptionTerminalSemicolonEmpty> for SyntaxStablePtrId {
10581 fn from(node: &OptionTerminalSemicolonEmpty) -> Self {
10582 node.stable_ptr().untyped()
10583 }
10584}
10585#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10586pub struct StatementExpr {
10587 node: SyntaxNode,
10588 children: Arc<[SyntaxNode]>,
10589}
10590impl StatementExpr {
10591 pub const INDEX_ATTRIBUTES: usize = 0;
10592 pub const INDEX_EXPR: usize = 1;
10593 pub const INDEX_SEMICOLON: usize = 2;
10594 pub fn new_green(
10595 db: &dyn SyntaxGroup,
10596 attributes: AttributeListGreen,
10597 expr: ExprGreen,
10598 semicolon: OptionTerminalSemicolonGreen,
10599 ) -> StatementExprGreen {
10600 let children: Vec<GreenId> = vec![attributes.0, expr.0, semicolon.0];
10601 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
10602 StatementExprGreen(
10603 Arc::new(GreenNode {
10604 kind: SyntaxKind::StatementExpr,
10605 details: GreenNodeDetails::Node { children, width },
10606 })
10607 .intern(db),
10608 )
10609 }
10610}
10611impl StatementExpr {
10612 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
10613 AttributeList::from_syntax_node(db, self.children[0].clone())
10614 }
10615 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
10616 Expr::from_syntax_node(db, self.children[1].clone())
10617 }
10618 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> OptionTerminalSemicolon {
10619 OptionTerminalSemicolon::from_syntax_node(db, self.children[2].clone())
10620 }
10621}
10622#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10623pub struct StatementExprPtr(pub SyntaxStablePtrId);
10624impl StatementExprPtr {}
10625impl TypedStablePtr for StatementExprPtr {
10626 type SyntaxNode = StatementExpr;
10627 fn untyped(&self) -> SyntaxStablePtrId {
10628 self.0
10629 }
10630 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementExpr {
10631 StatementExpr::from_syntax_node(db, self.0.lookup(db))
10632 }
10633}
10634impl From<StatementExprPtr> for SyntaxStablePtrId {
10635 fn from(ptr: StatementExprPtr) -> Self {
10636 ptr.untyped()
10637 }
10638}
10639#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10640pub struct StatementExprGreen(pub GreenId);
10641impl TypedSyntaxNode for StatementExpr {
10642 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementExpr);
10643 type StablePtr = StatementExprPtr;
10644 type Green = StatementExprGreen;
10645 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10646 StatementExprGreen(
10647 Arc::new(GreenNode {
10648 kind: SyntaxKind::StatementExpr,
10649 details: GreenNodeDetails::Node {
10650 children: vec![
10651 AttributeList::missing(db).0,
10652 Expr::missing(db).0,
10653 OptionTerminalSemicolon::missing(db).0,
10654 ],
10655 width: TextWidth::default(),
10656 },
10657 })
10658 .intern(db),
10659 )
10660 }
10661 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10662 let kind = node.kind(db);
10663 assert_eq!(
10664 kind,
10665 SyntaxKind::StatementExpr,
10666 "Unexpected SyntaxKind {:?}. Expected {:?}.",
10667 kind,
10668 SyntaxKind::StatementExpr
10669 );
10670 let children = db.get_children(node.clone());
10671 Self { node, children }
10672 }
10673 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10674 let kind = node.kind(db);
10675 if kind == SyntaxKind::StatementExpr {
10676 Some(Self::from_syntax_node(db, node))
10677 } else {
10678 None
10679 }
10680 }
10681 fn as_syntax_node(&self) -> SyntaxNode {
10682 self.node.clone()
10683 }
10684 fn stable_ptr(&self) -> Self::StablePtr {
10685 StatementExprPtr(self.node.0.stable_ptr)
10686 }
10687}
10688impl From<&StatementExpr> for SyntaxStablePtrId {
10689 fn from(node: &StatementExpr) -> Self {
10690 node.stable_ptr().untyped()
10691 }
10692}
10693#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10694pub struct StatementContinue {
10695 node: SyntaxNode,
10696 children: Arc<[SyntaxNode]>,
10697}
10698impl StatementContinue {
10699 pub const INDEX_ATTRIBUTES: usize = 0;
10700 pub const INDEX_CONTINUE_KW: usize = 1;
10701 pub const INDEX_SEMICOLON: usize = 2;
10702 pub fn new_green(
10703 db: &dyn SyntaxGroup,
10704 attributes: AttributeListGreen,
10705 continue_kw: TerminalContinueGreen,
10706 semicolon: TerminalSemicolonGreen,
10707 ) -> StatementContinueGreen {
10708 let children: Vec<GreenId> = vec![attributes.0, continue_kw.0, semicolon.0];
10709 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
10710 StatementContinueGreen(
10711 Arc::new(GreenNode {
10712 kind: SyntaxKind::StatementContinue,
10713 details: GreenNodeDetails::Node { children, width },
10714 })
10715 .intern(db),
10716 )
10717 }
10718}
10719impl StatementContinue {
10720 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
10721 AttributeList::from_syntax_node(db, self.children[0].clone())
10722 }
10723 pub fn continue_kw(&self, db: &dyn SyntaxGroup) -> TerminalContinue {
10724 TerminalContinue::from_syntax_node(db, self.children[1].clone())
10725 }
10726 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
10727 TerminalSemicolon::from_syntax_node(db, self.children[2].clone())
10728 }
10729}
10730#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10731pub struct StatementContinuePtr(pub SyntaxStablePtrId);
10732impl StatementContinuePtr {}
10733impl TypedStablePtr for StatementContinuePtr {
10734 type SyntaxNode = StatementContinue;
10735 fn untyped(&self) -> SyntaxStablePtrId {
10736 self.0
10737 }
10738 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementContinue {
10739 StatementContinue::from_syntax_node(db, self.0.lookup(db))
10740 }
10741}
10742impl From<StatementContinuePtr> for SyntaxStablePtrId {
10743 fn from(ptr: StatementContinuePtr) -> Self {
10744 ptr.untyped()
10745 }
10746}
10747#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10748pub struct StatementContinueGreen(pub GreenId);
10749impl TypedSyntaxNode for StatementContinue {
10750 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementContinue);
10751 type StablePtr = StatementContinuePtr;
10752 type Green = StatementContinueGreen;
10753 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10754 StatementContinueGreen(
10755 Arc::new(GreenNode {
10756 kind: SyntaxKind::StatementContinue,
10757 details: GreenNodeDetails::Node {
10758 children: vec![
10759 AttributeList::missing(db).0,
10760 TerminalContinue::missing(db).0,
10761 TerminalSemicolon::missing(db).0,
10762 ],
10763 width: TextWidth::default(),
10764 },
10765 })
10766 .intern(db),
10767 )
10768 }
10769 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10770 let kind = node.kind(db);
10771 assert_eq!(
10772 kind,
10773 SyntaxKind::StatementContinue,
10774 "Unexpected SyntaxKind {:?}. Expected {:?}.",
10775 kind,
10776 SyntaxKind::StatementContinue
10777 );
10778 let children = db.get_children(node.clone());
10779 Self { node, children }
10780 }
10781 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10782 let kind = node.kind(db);
10783 if kind == SyntaxKind::StatementContinue {
10784 Some(Self::from_syntax_node(db, node))
10785 } else {
10786 None
10787 }
10788 }
10789 fn as_syntax_node(&self) -> SyntaxNode {
10790 self.node.clone()
10791 }
10792 fn stable_ptr(&self) -> Self::StablePtr {
10793 StatementContinuePtr(self.node.0.stable_ptr)
10794 }
10795}
10796impl From<&StatementContinue> for SyntaxStablePtrId {
10797 fn from(node: &StatementContinue) -> Self {
10798 node.stable_ptr().untyped()
10799 }
10800}
10801#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10802pub struct ExprClause {
10803 node: SyntaxNode,
10804 children: Arc<[SyntaxNode]>,
10805}
10806impl ExprClause {
10807 pub const INDEX_EXPR: usize = 0;
10808 pub fn new_green(db: &dyn SyntaxGroup, expr: ExprGreen) -> ExprClauseGreen {
10809 let children: Vec<GreenId> = vec![expr.0];
10810 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
10811 ExprClauseGreen(
10812 Arc::new(GreenNode {
10813 kind: SyntaxKind::ExprClause,
10814 details: GreenNodeDetails::Node { children, width },
10815 })
10816 .intern(db),
10817 )
10818 }
10819}
10820impl ExprClause {
10821 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
10822 Expr::from_syntax_node(db, self.children[0].clone())
10823 }
10824}
10825#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10826pub struct ExprClausePtr(pub SyntaxStablePtrId);
10827impl ExprClausePtr {}
10828impl TypedStablePtr for ExprClausePtr {
10829 type SyntaxNode = ExprClause;
10830 fn untyped(&self) -> SyntaxStablePtrId {
10831 self.0
10832 }
10833 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprClause {
10834 ExprClause::from_syntax_node(db, self.0.lookup(db))
10835 }
10836}
10837impl From<ExprClausePtr> for SyntaxStablePtrId {
10838 fn from(ptr: ExprClausePtr) -> Self {
10839 ptr.untyped()
10840 }
10841}
10842#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10843pub struct ExprClauseGreen(pub GreenId);
10844impl TypedSyntaxNode for ExprClause {
10845 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprClause);
10846 type StablePtr = ExprClausePtr;
10847 type Green = ExprClauseGreen;
10848 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10849 ExprClauseGreen(
10850 Arc::new(GreenNode {
10851 kind: SyntaxKind::ExprClause,
10852 details: GreenNodeDetails::Node {
10853 children: vec![Expr::missing(db).0],
10854 width: TextWidth::default(),
10855 },
10856 })
10857 .intern(db),
10858 )
10859 }
10860 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10861 let kind = node.kind(db);
10862 assert_eq!(
10863 kind,
10864 SyntaxKind::ExprClause,
10865 "Unexpected SyntaxKind {:?}. Expected {:?}.",
10866 kind,
10867 SyntaxKind::ExprClause
10868 );
10869 let children = db.get_children(node.clone());
10870 Self { node, children }
10871 }
10872 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10873 let kind = node.kind(db);
10874 if kind == SyntaxKind::ExprClause { Some(Self::from_syntax_node(db, node)) } else { None }
10875 }
10876 fn as_syntax_node(&self) -> SyntaxNode {
10877 self.node.clone()
10878 }
10879 fn stable_ptr(&self) -> Self::StablePtr {
10880 ExprClausePtr(self.node.0.stable_ptr)
10881 }
10882}
10883impl From<&ExprClause> for SyntaxStablePtrId {
10884 fn from(node: &ExprClause) -> Self {
10885 node.stable_ptr().untyped()
10886 }
10887}
10888#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10889pub enum OptionExprClause {
10890 Empty(OptionExprClauseEmpty),
10891 ExprClause(ExprClause),
10892}
10893#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10894pub struct OptionExprClausePtr(pub SyntaxStablePtrId);
10895impl TypedStablePtr for OptionExprClausePtr {
10896 type SyntaxNode = OptionExprClause;
10897 fn untyped(&self) -> SyntaxStablePtrId {
10898 self.0
10899 }
10900 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionExprClause {
10901 OptionExprClause::from_syntax_node(db, self.0.lookup(db))
10902 }
10903}
10904impl From<OptionExprClausePtr> for SyntaxStablePtrId {
10905 fn from(ptr: OptionExprClausePtr) -> Self {
10906 ptr.untyped()
10907 }
10908}
10909impl From<OptionExprClauseEmptyPtr> for OptionExprClausePtr {
10910 fn from(value: OptionExprClauseEmptyPtr) -> Self {
10911 Self(value.0)
10912 }
10913}
10914impl From<ExprClausePtr> for OptionExprClausePtr {
10915 fn from(value: ExprClausePtr) -> Self {
10916 Self(value.0)
10917 }
10918}
10919impl From<OptionExprClauseEmptyGreen> for OptionExprClauseGreen {
10920 fn from(value: OptionExprClauseEmptyGreen) -> Self {
10921 Self(value.0)
10922 }
10923}
10924impl From<ExprClauseGreen> for OptionExprClauseGreen {
10925 fn from(value: ExprClauseGreen) -> Self {
10926 Self(value.0)
10927 }
10928}
10929#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10930pub struct OptionExprClauseGreen(pub GreenId);
10931impl TypedSyntaxNode for OptionExprClause {
10932 const OPTIONAL_KIND: Option<SyntaxKind> = None;
10933 type StablePtr = OptionExprClausePtr;
10934 type Green = OptionExprClauseGreen;
10935 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10936 panic!("No missing variant.");
10937 }
10938 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10939 let kind = node.kind(db);
10940 match kind {
10941 SyntaxKind::OptionExprClauseEmpty => {
10942 OptionExprClause::Empty(OptionExprClauseEmpty::from_syntax_node(db, node))
10943 }
10944 SyntaxKind::ExprClause => {
10945 OptionExprClause::ExprClause(ExprClause::from_syntax_node(db, node))
10946 }
10947 _ => panic!(
10948 "Unexpected syntax kind {:?} when constructing {}.",
10949 kind, "OptionExprClause"
10950 ),
10951 }
10952 }
10953 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10954 let kind = node.kind(db);
10955 match kind {
10956 SyntaxKind::OptionExprClauseEmpty => {
10957 Some(OptionExprClause::Empty(OptionExprClauseEmpty::from_syntax_node(db, node)))
10958 }
10959 SyntaxKind::ExprClause => {
10960 Some(OptionExprClause::ExprClause(ExprClause::from_syntax_node(db, node)))
10961 }
10962 _ => None,
10963 }
10964 }
10965 fn as_syntax_node(&self) -> SyntaxNode {
10966 match self {
10967 OptionExprClause::Empty(x) => x.as_syntax_node(),
10968 OptionExprClause::ExprClause(x) => x.as_syntax_node(),
10969 }
10970 }
10971 fn stable_ptr(&self) -> Self::StablePtr {
10972 OptionExprClausePtr(self.as_syntax_node().0.stable_ptr)
10973 }
10974}
10975impl From<&OptionExprClause> for SyntaxStablePtrId {
10976 fn from(node: &OptionExprClause) -> Self {
10977 node.stable_ptr().untyped()
10978 }
10979}
10980impl OptionExprClause {
10981 pub fn is_variant(kind: SyntaxKind) -> bool {
10983 matches!(kind, SyntaxKind::OptionExprClauseEmpty | SyntaxKind::ExprClause)
10984 }
10985}
10986#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10987pub struct OptionExprClauseEmpty {
10988 node: SyntaxNode,
10989 children: Arc<[SyntaxNode]>,
10990}
10991impl OptionExprClauseEmpty {
10992 pub fn new_green(db: &dyn SyntaxGroup) -> OptionExprClauseEmptyGreen {
10993 let children: Vec<GreenId> = vec![];
10994 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
10995 OptionExprClauseEmptyGreen(
10996 Arc::new(GreenNode {
10997 kind: SyntaxKind::OptionExprClauseEmpty,
10998 details: GreenNodeDetails::Node { children, width },
10999 })
11000 .intern(db),
11001 )
11002 }
11003}
11004impl OptionExprClauseEmpty {}
11005#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11006pub struct OptionExprClauseEmptyPtr(pub SyntaxStablePtrId);
11007impl OptionExprClauseEmptyPtr {}
11008impl TypedStablePtr for OptionExprClauseEmptyPtr {
11009 type SyntaxNode = OptionExprClauseEmpty;
11010 fn untyped(&self) -> SyntaxStablePtrId {
11011 self.0
11012 }
11013 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionExprClauseEmpty {
11014 OptionExprClauseEmpty::from_syntax_node(db, self.0.lookup(db))
11015 }
11016}
11017impl From<OptionExprClauseEmptyPtr> for SyntaxStablePtrId {
11018 fn from(ptr: OptionExprClauseEmptyPtr) -> Self {
11019 ptr.untyped()
11020 }
11021}
11022#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11023pub struct OptionExprClauseEmptyGreen(pub GreenId);
11024impl TypedSyntaxNode for OptionExprClauseEmpty {
11025 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionExprClauseEmpty);
11026 type StablePtr = OptionExprClauseEmptyPtr;
11027 type Green = OptionExprClauseEmptyGreen;
11028 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11029 OptionExprClauseEmptyGreen(
11030 Arc::new(GreenNode {
11031 kind: SyntaxKind::OptionExprClauseEmpty,
11032 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
11033 })
11034 .intern(db),
11035 )
11036 }
11037 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11038 let kind = node.kind(db);
11039 assert_eq!(
11040 kind,
11041 SyntaxKind::OptionExprClauseEmpty,
11042 "Unexpected SyntaxKind {:?}. Expected {:?}.",
11043 kind,
11044 SyntaxKind::OptionExprClauseEmpty
11045 );
11046 let children = db.get_children(node.clone());
11047 Self { node, children }
11048 }
11049 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11050 let kind = node.kind(db);
11051 if kind == SyntaxKind::OptionExprClauseEmpty {
11052 Some(Self::from_syntax_node(db, node))
11053 } else {
11054 None
11055 }
11056 }
11057 fn as_syntax_node(&self) -> SyntaxNode {
11058 self.node.clone()
11059 }
11060 fn stable_ptr(&self) -> Self::StablePtr {
11061 OptionExprClauseEmptyPtr(self.node.0.stable_ptr)
11062 }
11063}
11064impl From<&OptionExprClauseEmpty> for SyntaxStablePtrId {
11065 fn from(node: &OptionExprClauseEmpty) -> Self {
11066 node.stable_ptr().untyped()
11067 }
11068}
11069#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11070pub struct StatementReturn {
11071 node: SyntaxNode,
11072 children: Arc<[SyntaxNode]>,
11073}
11074impl StatementReturn {
11075 pub const INDEX_ATTRIBUTES: usize = 0;
11076 pub const INDEX_RETURN_KW: usize = 1;
11077 pub const INDEX_EXPR_CLAUSE: usize = 2;
11078 pub const INDEX_SEMICOLON: usize = 3;
11079 pub fn new_green(
11080 db: &dyn SyntaxGroup,
11081 attributes: AttributeListGreen,
11082 return_kw: TerminalReturnGreen,
11083 expr_clause: OptionExprClauseGreen,
11084 semicolon: TerminalSemicolonGreen,
11085 ) -> StatementReturnGreen {
11086 let children: Vec<GreenId> = vec![attributes.0, return_kw.0, expr_clause.0, semicolon.0];
11087 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
11088 StatementReturnGreen(
11089 Arc::new(GreenNode {
11090 kind: SyntaxKind::StatementReturn,
11091 details: GreenNodeDetails::Node { children, width },
11092 })
11093 .intern(db),
11094 )
11095 }
11096}
11097impl StatementReturn {
11098 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
11099 AttributeList::from_syntax_node(db, self.children[0].clone())
11100 }
11101 pub fn return_kw(&self, db: &dyn SyntaxGroup) -> TerminalReturn {
11102 TerminalReturn::from_syntax_node(db, self.children[1].clone())
11103 }
11104 pub fn expr_clause(&self, db: &dyn SyntaxGroup) -> OptionExprClause {
11105 OptionExprClause::from_syntax_node(db, self.children[2].clone())
11106 }
11107 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
11108 TerminalSemicolon::from_syntax_node(db, self.children[3].clone())
11109 }
11110}
11111#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11112pub struct StatementReturnPtr(pub SyntaxStablePtrId);
11113impl StatementReturnPtr {}
11114impl TypedStablePtr for StatementReturnPtr {
11115 type SyntaxNode = StatementReturn;
11116 fn untyped(&self) -> SyntaxStablePtrId {
11117 self.0
11118 }
11119 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementReturn {
11120 StatementReturn::from_syntax_node(db, self.0.lookup(db))
11121 }
11122}
11123impl From<StatementReturnPtr> for SyntaxStablePtrId {
11124 fn from(ptr: StatementReturnPtr) -> Self {
11125 ptr.untyped()
11126 }
11127}
11128#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11129pub struct StatementReturnGreen(pub GreenId);
11130impl TypedSyntaxNode for StatementReturn {
11131 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementReturn);
11132 type StablePtr = StatementReturnPtr;
11133 type Green = StatementReturnGreen;
11134 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11135 StatementReturnGreen(
11136 Arc::new(GreenNode {
11137 kind: SyntaxKind::StatementReturn,
11138 details: GreenNodeDetails::Node {
11139 children: vec![
11140 AttributeList::missing(db).0,
11141 TerminalReturn::missing(db).0,
11142 OptionExprClause::missing(db).0,
11143 TerminalSemicolon::missing(db).0,
11144 ],
11145 width: TextWidth::default(),
11146 },
11147 })
11148 .intern(db),
11149 )
11150 }
11151 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11152 let kind = node.kind(db);
11153 assert_eq!(
11154 kind,
11155 SyntaxKind::StatementReturn,
11156 "Unexpected SyntaxKind {:?}. Expected {:?}.",
11157 kind,
11158 SyntaxKind::StatementReturn
11159 );
11160 let children = db.get_children(node.clone());
11161 Self { node, children }
11162 }
11163 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11164 let kind = node.kind(db);
11165 if kind == SyntaxKind::StatementReturn {
11166 Some(Self::from_syntax_node(db, node))
11167 } else {
11168 None
11169 }
11170 }
11171 fn as_syntax_node(&self) -> SyntaxNode {
11172 self.node.clone()
11173 }
11174 fn stable_ptr(&self) -> Self::StablePtr {
11175 StatementReturnPtr(self.node.0.stable_ptr)
11176 }
11177}
11178impl From<&StatementReturn> for SyntaxStablePtrId {
11179 fn from(node: &StatementReturn) -> Self {
11180 node.stable_ptr().untyped()
11181 }
11182}
11183#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11184pub struct StatementBreak {
11185 node: SyntaxNode,
11186 children: Arc<[SyntaxNode]>,
11187}
11188impl StatementBreak {
11189 pub const INDEX_ATTRIBUTES: usize = 0;
11190 pub const INDEX_BREAK_KW: usize = 1;
11191 pub const INDEX_EXPR_CLAUSE: usize = 2;
11192 pub const INDEX_SEMICOLON: usize = 3;
11193 pub fn new_green(
11194 db: &dyn SyntaxGroup,
11195 attributes: AttributeListGreen,
11196 break_kw: TerminalBreakGreen,
11197 expr_clause: OptionExprClauseGreen,
11198 semicolon: TerminalSemicolonGreen,
11199 ) -> StatementBreakGreen {
11200 let children: Vec<GreenId> = vec![attributes.0, break_kw.0, expr_clause.0, semicolon.0];
11201 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
11202 StatementBreakGreen(
11203 Arc::new(GreenNode {
11204 kind: SyntaxKind::StatementBreak,
11205 details: GreenNodeDetails::Node { children, width },
11206 })
11207 .intern(db),
11208 )
11209 }
11210}
11211impl StatementBreak {
11212 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
11213 AttributeList::from_syntax_node(db, self.children[0].clone())
11214 }
11215 pub fn break_kw(&self, db: &dyn SyntaxGroup) -> TerminalBreak {
11216 TerminalBreak::from_syntax_node(db, self.children[1].clone())
11217 }
11218 pub fn expr_clause(&self, db: &dyn SyntaxGroup) -> OptionExprClause {
11219 OptionExprClause::from_syntax_node(db, self.children[2].clone())
11220 }
11221 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
11222 TerminalSemicolon::from_syntax_node(db, self.children[3].clone())
11223 }
11224}
11225#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11226pub struct StatementBreakPtr(pub SyntaxStablePtrId);
11227impl StatementBreakPtr {}
11228impl TypedStablePtr for StatementBreakPtr {
11229 type SyntaxNode = StatementBreak;
11230 fn untyped(&self) -> SyntaxStablePtrId {
11231 self.0
11232 }
11233 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementBreak {
11234 StatementBreak::from_syntax_node(db, self.0.lookup(db))
11235 }
11236}
11237impl From<StatementBreakPtr> for SyntaxStablePtrId {
11238 fn from(ptr: StatementBreakPtr) -> Self {
11239 ptr.untyped()
11240 }
11241}
11242#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11243pub struct StatementBreakGreen(pub GreenId);
11244impl TypedSyntaxNode for StatementBreak {
11245 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementBreak);
11246 type StablePtr = StatementBreakPtr;
11247 type Green = StatementBreakGreen;
11248 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11249 StatementBreakGreen(
11250 Arc::new(GreenNode {
11251 kind: SyntaxKind::StatementBreak,
11252 details: GreenNodeDetails::Node {
11253 children: vec![
11254 AttributeList::missing(db).0,
11255 TerminalBreak::missing(db).0,
11256 OptionExprClause::missing(db).0,
11257 TerminalSemicolon::missing(db).0,
11258 ],
11259 width: TextWidth::default(),
11260 },
11261 })
11262 .intern(db),
11263 )
11264 }
11265 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11266 let kind = node.kind(db);
11267 assert_eq!(
11268 kind,
11269 SyntaxKind::StatementBreak,
11270 "Unexpected SyntaxKind {:?}. Expected {:?}.",
11271 kind,
11272 SyntaxKind::StatementBreak
11273 );
11274 let children = db.get_children(node.clone());
11275 Self { node, children }
11276 }
11277 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11278 let kind = node.kind(db);
11279 if kind == SyntaxKind::StatementBreak {
11280 Some(Self::from_syntax_node(db, node))
11281 } else {
11282 None
11283 }
11284 }
11285 fn as_syntax_node(&self) -> SyntaxNode {
11286 self.node.clone()
11287 }
11288 fn stable_ptr(&self) -> Self::StablePtr {
11289 StatementBreakPtr(self.node.0.stable_ptr)
11290 }
11291}
11292impl From<&StatementBreak> for SyntaxStablePtrId {
11293 fn from(node: &StatementBreak) -> Self {
11294 node.stable_ptr().untyped()
11295 }
11296}
11297#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11298pub struct StatementItem {
11299 node: SyntaxNode,
11300 children: Arc<[SyntaxNode]>,
11301}
11302impl StatementItem {
11303 pub const INDEX_ITEM: usize = 0;
11304 pub fn new_green(db: &dyn SyntaxGroup, item: ModuleItemGreen) -> StatementItemGreen {
11305 let children: Vec<GreenId> = vec![item.0];
11306 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
11307 StatementItemGreen(
11308 Arc::new(GreenNode {
11309 kind: SyntaxKind::StatementItem,
11310 details: GreenNodeDetails::Node { children, width },
11311 })
11312 .intern(db),
11313 )
11314 }
11315}
11316impl StatementItem {
11317 pub fn item(&self, db: &dyn SyntaxGroup) -> ModuleItem {
11318 ModuleItem::from_syntax_node(db, self.children[0].clone())
11319 }
11320}
11321#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11322pub struct StatementItemPtr(pub SyntaxStablePtrId);
11323impl StatementItemPtr {}
11324impl TypedStablePtr for StatementItemPtr {
11325 type SyntaxNode = StatementItem;
11326 fn untyped(&self) -> SyntaxStablePtrId {
11327 self.0
11328 }
11329 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementItem {
11330 StatementItem::from_syntax_node(db, self.0.lookup(db))
11331 }
11332}
11333impl From<StatementItemPtr> for SyntaxStablePtrId {
11334 fn from(ptr: StatementItemPtr) -> Self {
11335 ptr.untyped()
11336 }
11337}
11338#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11339pub struct StatementItemGreen(pub GreenId);
11340impl TypedSyntaxNode for StatementItem {
11341 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementItem);
11342 type StablePtr = StatementItemPtr;
11343 type Green = StatementItemGreen;
11344 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11345 StatementItemGreen(
11346 Arc::new(GreenNode {
11347 kind: SyntaxKind::StatementItem,
11348 details: GreenNodeDetails::Node {
11349 children: vec![ModuleItem::missing(db).0],
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::StatementItem,
11361 "Unexpected SyntaxKind {:?}. Expected {:?}.",
11362 kind,
11363 SyntaxKind::StatementItem
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::StatementItem {
11371 Some(Self::from_syntax_node(db, node))
11372 } else {
11373 None
11374 }
11375 }
11376 fn as_syntax_node(&self) -> SyntaxNode {
11377 self.node.clone()
11378 }
11379 fn stable_ptr(&self) -> Self::StablePtr {
11380 StatementItemPtr(self.node.0.stable_ptr)
11381 }
11382}
11383impl From<&StatementItem> for SyntaxStablePtrId {
11384 fn from(node: &StatementItem) -> Self {
11385 node.stable_ptr().untyped()
11386 }
11387}
11388#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11389pub struct Param {
11390 node: SyntaxNode,
11391 children: Arc<[SyntaxNode]>,
11392}
11393impl Param {
11394 pub const INDEX_MODIFIERS: usize = 0;
11395 pub const INDEX_NAME: usize = 1;
11396 pub const INDEX_TYPE_CLAUSE: usize = 2;
11397 pub fn new_green(
11398 db: &dyn SyntaxGroup,
11399 modifiers: ModifierListGreen,
11400 name: TerminalIdentifierGreen,
11401 type_clause: OptionTypeClauseGreen,
11402 ) -> ParamGreen {
11403 let children: Vec<GreenId> = vec![modifiers.0, name.0, type_clause.0];
11404 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
11405 ParamGreen(
11406 Arc::new(GreenNode {
11407 kind: SyntaxKind::Param,
11408 details: GreenNodeDetails::Node { children, width },
11409 })
11410 .intern(db),
11411 )
11412 }
11413}
11414impl Param {
11415 pub fn modifiers(&self, db: &dyn SyntaxGroup) -> ModifierList {
11416 ModifierList::from_syntax_node(db, self.children[0].clone())
11417 }
11418 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
11419 TerminalIdentifier::from_syntax_node(db, self.children[1].clone())
11420 }
11421 pub fn type_clause(&self, db: &dyn SyntaxGroup) -> OptionTypeClause {
11422 OptionTypeClause::from_syntax_node(db, self.children[2].clone())
11423 }
11424}
11425#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11426pub struct ParamPtr(pub SyntaxStablePtrId);
11427impl ParamPtr {
11428 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
11429 let ptr = self.0.lookup_intern(db);
11430 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
11431 TerminalIdentifierGreen(key_fields[0])
11432 } else {
11433 panic!("Unexpected key field query on root.");
11434 }
11435 }
11436}
11437impl TypedStablePtr for ParamPtr {
11438 type SyntaxNode = Param;
11439 fn untyped(&self) -> SyntaxStablePtrId {
11440 self.0
11441 }
11442 fn lookup(&self, db: &dyn SyntaxGroup) -> Param {
11443 Param::from_syntax_node(db, self.0.lookup(db))
11444 }
11445}
11446impl From<ParamPtr> for SyntaxStablePtrId {
11447 fn from(ptr: ParamPtr) -> Self {
11448 ptr.untyped()
11449 }
11450}
11451#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11452pub struct ParamGreen(pub GreenId);
11453impl TypedSyntaxNode for Param {
11454 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::Param);
11455 type StablePtr = ParamPtr;
11456 type Green = ParamGreen;
11457 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11458 ParamGreen(
11459 Arc::new(GreenNode {
11460 kind: SyntaxKind::Param,
11461 details: GreenNodeDetails::Node {
11462 children: vec![
11463 ModifierList::missing(db).0,
11464 TerminalIdentifier::missing(db).0,
11465 OptionTypeClause::missing(db).0,
11466 ],
11467 width: TextWidth::default(),
11468 },
11469 })
11470 .intern(db),
11471 )
11472 }
11473 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11474 let kind = node.kind(db);
11475 assert_eq!(
11476 kind,
11477 SyntaxKind::Param,
11478 "Unexpected SyntaxKind {:?}. Expected {:?}.",
11479 kind,
11480 SyntaxKind::Param
11481 );
11482 let children = db.get_children(node.clone());
11483 Self { node, children }
11484 }
11485 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11486 let kind = node.kind(db);
11487 if kind == SyntaxKind::Param { Some(Self::from_syntax_node(db, node)) } else { None }
11488 }
11489 fn as_syntax_node(&self) -> SyntaxNode {
11490 self.node.clone()
11491 }
11492 fn stable_ptr(&self) -> Self::StablePtr {
11493 ParamPtr(self.node.0.stable_ptr)
11494 }
11495}
11496impl From<&Param> for SyntaxStablePtrId {
11497 fn from(node: &Param) -> Self {
11498 node.stable_ptr().untyped()
11499 }
11500}
11501#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11502pub struct ModifierList(ElementList<Modifier, 1>);
11503impl Deref for ModifierList {
11504 type Target = ElementList<Modifier, 1>;
11505 fn deref(&self) -> &Self::Target {
11506 &self.0
11507 }
11508}
11509impl ModifierList {
11510 pub fn new_green(db: &dyn SyntaxGroup, children: Vec<ModifierGreen>) -> ModifierListGreen {
11511 let width = children.iter().map(|id| id.0.lookup_intern(db).width()).sum();
11512 ModifierListGreen(
11513 Arc::new(GreenNode {
11514 kind: SyntaxKind::ModifierList,
11515 details: GreenNodeDetails::Node {
11516 children: children.iter().map(|x| x.0).collect(),
11517 width,
11518 },
11519 })
11520 .intern(db),
11521 )
11522 }
11523}
11524#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11525pub struct ModifierListPtr(pub SyntaxStablePtrId);
11526impl TypedStablePtr for ModifierListPtr {
11527 type SyntaxNode = ModifierList;
11528 fn untyped(&self) -> SyntaxStablePtrId {
11529 self.0
11530 }
11531 fn lookup(&self, db: &dyn SyntaxGroup) -> ModifierList {
11532 ModifierList::from_syntax_node(db, self.0.lookup(db))
11533 }
11534}
11535impl From<ModifierListPtr> for SyntaxStablePtrId {
11536 fn from(ptr: ModifierListPtr) -> Self {
11537 ptr.untyped()
11538 }
11539}
11540#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11541pub struct ModifierListGreen(pub GreenId);
11542impl TypedSyntaxNode for ModifierList {
11543 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ModifierList);
11544 type StablePtr = ModifierListPtr;
11545 type Green = ModifierListGreen;
11546 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11547 ModifierListGreen(
11548 Arc::new(GreenNode {
11549 kind: SyntaxKind::ModifierList,
11550 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
11551 })
11552 .intern(db),
11553 )
11554 }
11555 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11556 Self(ElementList::new(node))
11557 }
11558 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11559 if node.kind(db) == SyntaxKind::ModifierList {
11560 Some(Self(ElementList::new(node)))
11561 } else {
11562 None
11563 }
11564 }
11565 fn as_syntax_node(&self) -> SyntaxNode {
11566 self.node.clone()
11567 }
11568 fn stable_ptr(&self) -> Self::StablePtr {
11569 ModifierListPtr(self.node.0.stable_ptr)
11570 }
11571}
11572impl From<&ModifierList> for SyntaxStablePtrId {
11573 fn from(node: &ModifierList) -> Self {
11574 node.stable_ptr().untyped()
11575 }
11576}
11577#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11578pub enum Modifier {
11579 Ref(TerminalRef),
11580 Mut(TerminalMut),
11581}
11582#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11583pub struct ModifierPtr(pub SyntaxStablePtrId);
11584impl TypedStablePtr for ModifierPtr {
11585 type SyntaxNode = Modifier;
11586 fn untyped(&self) -> SyntaxStablePtrId {
11587 self.0
11588 }
11589 fn lookup(&self, db: &dyn SyntaxGroup) -> Modifier {
11590 Modifier::from_syntax_node(db, self.0.lookup(db))
11591 }
11592}
11593impl From<ModifierPtr> for SyntaxStablePtrId {
11594 fn from(ptr: ModifierPtr) -> Self {
11595 ptr.untyped()
11596 }
11597}
11598impl From<TerminalRefPtr> for ModifierPtr {
11599 fn from(value: TerminalRefPtr) -> Self {
11600 Self(value.0)
11601 }
11602}
11603impl From<TerminalMutPtr> for ModifierPtr {
11604 fn from(value: TerminalMutPtr) -> Self {
11605 Self(value.0)
11606 }
11607}
11608impl From<TerminalRefGreen> for ModifierGreen {
11609 fn from(value: TerminalRefGreen) -> Self {
11610 Self(value.0)
11611 }
11612}
11613impl From<TerminalMutGreen> for ModifierGreen {
11614 fn from(value: TerminalMutGreen) -> Self {
11615 Self(value.0)
11616 }
11617}
11618#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11619pub struct ModifierGreen(pub GreenId);
11620impl TypedSyntaxNode for Modifier {
11621 const OPTIONAL_KIND: Option<SyntaxKind> = None;
11622 type StablePtr = ModifierPtr;
11623 type Green = ModifierGreen;
11624 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11625 panic!("No missing variant.");
11626 }
11627 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11628 let kind = node.kind(db);
11629 match kind {
11630 SyntaxKind::TerminalRef => Modifier::Ref(TerminalRef::from_syntax_node(db, node)),
11631 SyntaxKind::TerminalMut => Modifier::Mut(TerminalMut::from_syntax_node(db, node)),
11632 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "Modifier"),
11633 }
11634 }
11635 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11636 let kind = node.kind(db);
11637 match kind {
11638 SyntaxKind::TerminalRef => Some(Modifier::Ref(TerminalRef::from_syntax_node(db, node))),
11639 SyntaxKind::TerminalMut => Some(Modifier::Mut(TerminalMut::from_syntax_node(db, node))),
11640 _ => None,
11641 }
11642 }
11643 fn as_syntax_node(&self) -> SyntaxNode {
11644 match self {
11645 Modifier::Ref(x) => x.as_syntax_node(),
11646 Modifier::Mut(x) => x.as_syntax_node(),
11647 }
11648 }
11649 fn stable_ptr(&self) -> Self::StablePtr {
11650 ModifierPtr(self.as_syntax_node().0.stable_ptr)
11651 }
11652}
11653impl From<&Modifier> for SyntaxStablePtrId {
11654 fn from(node: &Modifier) -> Self {
11655 node.stable_ptr().untyped()
11656 }
11657}
11658impl Modifier {
11659 pub fn is_variant(kind: SyntaxKind) -> bool {
11661 matches!(kind, SyntaxKind::TerminalRef | SyntaxKind::TerminalMut)
11662 }
11663}
11664#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11665pub struct ParamList(ElementList<Param, 2>);
11666impl Deref for ParamList {
11667 type Target = ElementList<Param, 2>;
11668 fn deref(&self) -> &Self::Target {
11669 &self.0
11670 }
11671}
11672impl ParamList {
11673 pub fn new_green(
11674 db: &dyn SyntaxGroup,
11675 children: Vec<ParamListElementOrSeparatorGreen>,
11676 ) -> ParamListGreen {
11677 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
11678 ParamListGreen(
11679 Arc::new(GreenNode {
11680 kind: SyntaxKind::ParamList,
11681 details: GreenNodeDetails::Node {
11682 children: children.iter().map(|x| x.id()).collect(),
11683 width,
11684 },
11685 })
11686 .intern(db),
11687 )
11688 }
11689}
11690#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11691pub struct ParamListPtr(pub SyntaxStablePtrId);
11692impl TypedStablePtr for ParamListPtr {
11693 type SyntaxNode = ParamList;
11694 fn untyped(&self) -> SyntaxStablePtrId {
11695 self.0
11696 }
11697 fn lookup(&self, db: &dyn SyntaxGroup) -> ParamList {
11698 ParamList::from_syntax_node(db, self.0.lookup(db))
11699 }
11700}
11701impl From<ParamListPtr> for SyntaxStablePtrId {
11702 fn from(ptr: ParamListPtr) -> Self {
11703 ptr.untyped()
11704 }
11705}
11706#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11707pub enum ParamListElementOrSeparatorGreen {
11708 Separator(TerminalCommaGreen),
11709 Element(ParamGreen),
11710}
11711impl From<TerminalCommaGreen> for ParamListElementOrSeparatorGreen {
11712 fn from(value: TerminalCommaGreen) -> Self {
11713 ParamListElementOrSeparatorGreen::Separator(value)
11714 }
11715}
11716impl From<ParamGreen> for ParamListElementOrSeparatorGreen {
11717 fn from(value: ParamGreen) -> Self {
11718 ParamListElementOrSeparatorGreen::Element(value)
11719 }
11720}
11721impl ParamListElementOrSeparatorGreen {
11722 fn id(&self) -> GreenId {
11723 match self {
11724 ParamListElementOrSeparatorGreen::Separator(green) => green.0,
11725 ParamListElementOrSeparatorGreen::Element(green) => green.0,
11726 }
11727 }
11728}
11729#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11730pub struct ParamListGreen(pub GreenId);
11731impl TypedSyntaxNode for ParamList {
11732 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ParamList);
11733 type StablePtr = ParamListPtr;
11734 type Green = ParamListGreen;
11735 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11736 ParamListGreen(
11737 Arc::new(GreenNode {
11738 kind: SyntaxKind::ParamList,
11739 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
11740 })
11741 .intern(db),
11742 )
11743 }
11744 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11745 Self(ElementList::new(node))
11746 }
11747 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11748 if node.kind(db) == SyntaxKind::ParamList {
11749 Some(Self(ElementList::new(node)))
11750 } else {
11751 None
11752 }
11753 }
11754 fn as_syntax_node(&self) -> SyntaxNode {
11755 self.node.clone()
11756 }
11757 fn stable_ptr(&self) -> Self::StablePtr {
11758 ParamListPtr(self.node.0.stable_ptr)
11759 }
11760}
11761impl From<&ParamList> for SyntaxStablePtrId {
11762 fn from(node: &ParamList) -> Self {
11763 node.stable_ptr().untyped()
11764 }
11765}
11766#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11767pub struct ImplicitsClause {
11768 node: SyntaxNode,
11769 children: Arc<[SyntaxNode]>,
11770}
11771impl ImplicitsClause {
11772 pub const INDEX_IMPLICITS_KW: usize = 0;
11773 pub const INDEX_LPAREN: usize = 1;
11774 pub const INDEX_IMPLICITS: usize = 2;
11775 pub const INDEX_RPAREN: usize = 3;
11776 pub fn new_green(
11777 db: &dyn SyntaxGroup,
11778 implicits_kw: TerminalImplicitsGreen,
11779 lparen: TerminalLParenGreen,
11780 implicits: ImplicitsListGreen,
11781 rparen: TerminalRParenGreen,
11782 ) -> ImplicitsClauseGreen {
11783 let children: Vec<GreenId> = vec![implicits_kw.0, lparen.0, implicits.0, rparen.0];
11784 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
11785 ImplicitsClauseGreen(
11786 Arc::new(GreenNode {
11787 kind: SyntaxKind::ImplicitsClause,
11788 details: GreenNodeDetails::Node { children, width },
11789 })
11790 .intern(db),
11791 )
11792 }
11793}
11794impl ImplicitsClause {
11795 pub fn implicits_kw(&self, db: &dyn SyntaxGroup) -> TerminalImplicits {
11796 TerminalImplicits::from_syntax_node(db, self.children[0].clone())
11797 }
11798 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
11799 TerminalLParen::from_syntax_node(db, self.children[1].clone())
11800 }
11801 pub fn implicits(&self, db: &dyn SyntaxGroup) -> ImplicitsList {
11802 ImplicitsList::from_syntax_node(db, self.children[2].clone())
11803 }
11804 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
11805 TerminalRParen::from_syntax_node(db, self.children[3].clone())
11806 }
11807}
11808#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11809pub struct ImplicitsClausePtr(pub SyntaxStablePtrId);
11810impl ImplicitsClausePtr {}
11811impl TypedStablePtr for ImplicitsClausePtr {
11812 type SyntaxNode = ImplicitsClause;
11813 fn untyped(&self) -> SyntaxStablePtrId {
11814 self.0
11815 }
11816 fn lookup(&self, db: &dyn SyntaxGroup) -> ImplicitsClause {
11817 ImplicitsClause::from_syntax_node(db, self.0.lookup(db))
11818 }
11819}
11820impl From<ImplicitsClausePtr> for SyntaxStablePtrId {
11821 fn from(ptr: ImplicitsClausePtr) -> Self {
11822 ptr.untyped()
11823 }
11824}
11825#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11826pub struct ImplicitsClauseGreen(pub GreenId);
11827impl TypedSyntaxNode for ImplicitsClause {
11828 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ImplicitsClause);
11829 type StablePtr = ImplicitsClausePtr;
11830 type Green = ImplicitsClauseGreen;
11831 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11832 ImplicitsClauseGreen(
11833 Arc::new(GreenNode {
11834 kind: SyntaxKind::ImplicitsClause,
11835 details: GreenNodeDetails::Node {
11836 children: vec![
11837 TerminalImplicits::missing(db).0,
11838 TerminalLParen::missing(db).0,
11839 ImplicitsList::missing(db).0,
11840 TerminalRParen::missing(db).0,
11841 ],
11842 width: TextWidth::default(),
11843 },
11844 })
11845 .intern(db),
11846 )
11847 }
11848 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11849 let kind = node.kind(db);
11850 assert_eq!(
11851 kind,
11852 SyntaxKind::ImplicitsClause,
11853 "Unexpected SyntaxKind {:?}. Expected {:?}.",
11854 kind,
11855 SyntaxKind::ImplicitsClause
11856 );
11857 let children = db.get_children(node.clone());
11858 Self { node, children }
11859 }
11860 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11861 let kind = node.kind(db);
11862 if kind == SyntaxKind::ImplicitsClause {
11863 Some(Self::from_syntax_node(db, node))
11864 } else {
11865 None
11866 }
11867 }
11868 fn as_syntax_node(&self) -> SyntaxNode {
11869 self.node.clone()
11870 }
11871 fn stable_ptr(&self) -> Self::StablePtr {
11872 ImplicitsClausePtr(self.node.0.stable_ptr)
11873 }
11874}
11875impl From<&ImplicitsClause> for SyntaxStablePtrId {
11876 fn from(node: &ImplicitsClause) -> Self {
11877 node.stable_ptr().untyped()
11878 }
11879}
11880#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11881pub struct ImplicitsList(ElementList<ExprPath, 2>);
11882impl Deref for ImplicitsList {
11883 type Target = ElementList<ExprPath, 2>;
11884 fn deref(&self) -> &Self::Target {
11885 &self.0
11886 }
11887}
11888impl ImplicitsList {
11889 pub fn new_green(
11890 db: &dyn SyntaxGroup,
11891 children: Vec<ImplicitsListElementOrSeparatorGreen>,
11892 ) -> ImplicitsListGreen {
11893 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
11894 ImplicitsListGreen(
11895 Arc::new(GreenNode {
11896 kind: SyntaxKind::ImplicitsList,
11897 details: GreenNodeDetails::Node {
11898 children: children.iter().map(|x| x.id()).collect(),
11899 width,
11900 },
11901 })
11902 .intern(db),
11903 )
11904 }
11905}
11906#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11907pub struct ImplicitsListPtr(pub SyntaxStablePtrId);
11908impl TypedStablePtr for ImplicitsListPtr {
11909 type SyntaxNode = ImplicitsList;
11910 fn untyped(&self) -> SyntaxStablePtrId {
11911 self.0
11912 }
11913 fn lookup(&self, db: &dyn SyntaxGroup) -> ImplicitsList {
11914 ImplicitsList::from_syntax_node(db, self.0.lookup(db))
11915 }
11916}
11917impl From<ImplicitsListPtr> for SyntaxStablePtrId {
11918 fn from(ptr: ImplicitsListPtr) -> Self {
11919 ptr.untyped()
11920 }
11921}
11922#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11923pub enum ImplicitsListElementOrSeparatorGreen {
11924 Separator(TerminalCommaGreen),
11925 Element(ExprPathGreen),
11926}
11927impl From<TerminalCommaGreen> for ImplicitsListElementOrSeparatorGreen {
11928 fn from(value: TerminalCommaGreen) -> Self {
11929 ImplicitsListElementOrSeparatorGreen::Separator(value)
11930 }
11931}
11932impl From<ExprPathGreen> for ImplicitsListElementOrSeparatorGreen {
11933 fn from(value: ExprPathGreen) -> Self {
11934 ImplicitsListElementOrSeparatorGreen::Element(value)
11935 }
11936}
11937impl ImplicitsListElementOrSeparatorGreen {
11938 fn id(&self) -> GreenId {
11939 match self {
11940 ImplicitsListElementOrSeparatorGreen::Separator(green) => green.0,
11941 ImplicitsListElementOrSeparatorGreen::Element(green) => green.0,
11942 }
11943 }
11944}
11945#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11946pub struct ImplicitsListGreen(pub GreenId);
11947impl TypedSyntaxNode for ImplicitsList {
11948 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ImplicitsList);
11949 type StablePtr = ImplicitsListPtr;
11950 type Green = ImplicitsListGreen;
11951 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11952 ImplicitsListGreen(
11953 Arc::new(GreenNode {
11954 kind: SyntaxKind::ImplicitsList,
11955 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
11956 })
11957 .intern(db),
11958 )
11959 }
11960 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11961 Self(ElementList::new(node))
11962 }
11963 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11964 if node.kind(db) == SyntaxKind::ImplicitsList {
11965 Some(Self(ElementList::new(node)))
11966 } else {
11967 None
11968 }
11969 }
11970 fn as_syntax_node(&self) -> SyntaxNode {
11971 self.node.clone()
11972 }
11973 fn stable_ptr(&self) -> Self::StablePtr {
11974 ImplicitsListPtr(self.node.0.stable_ptr)
11975 }
11976}
11977impl From<&ImplicitsList> for SyntaxStablePtrId {
11978 fn from(node: &ImplicitsList) -> Self {
11979 node.stable_ptr().untyped()
11980 }
11981}
11982#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11983pub enum OptionImplicitsClause {
11984 Empty(OptionImplicitsClauseEmpty),
11985 ImplicitsClause(ImplicitsClause),
11986}
11987#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11988pub struct OptionImplicitsClausePtr(pub SyntaxStablePtrId);
11989impl TypedStablePtr for OptionImplicitsClausePtr {
11990 type SyntaxNode = OptionImplicitsClause;
11991 fn untyped(&self) -> SyntaxStablePtrId {
11992 self.0
11993 }
11994 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionImplicitsClause {
11995 OptionImplicitsClause::from_syntax_node(db, self.0.lookup(db))
11996 }
11997}
11998impl From<OptionImplicitsClausePtr> for SyntaxStablePtrId {
11999 fn from(ptr: OptionImplicitsClausePtr) -> Self {
12000 ptr.untyped()
12001 }
12002}
12003impl From<OptionImplicitsClauseEmptyPtr> for OptionImplicitsClausePtr {
12004 fn from(value: OptionImplicitsClauseEmptyPtr) -> Self {
12005 Self(value.0)
12006 }
12007}
12008impl From<ImplicitsClausePtr> for OptionImplicitsClausePtr {
12009 fn from(value: ImplicitsClausePtr) -> Self {
12010 Self(value.0)
12011 }
12012}
12013impl From<OptionImplicitsClauseEmptyGreen> for OptionImplicitsClauseGreen {
12014 fn from(value: OptionImplicitsClauseEmptyGreen) -> Self {
12015 Self(value.0)
12016 }
12017}
12018impl From<ImplicitsClauseGreen> for OptionImplicitsClauseGreen {
12019 fn from(value: ImplicitsClauseGreen) -> Self {
12020 Self(value.0)
12021 }
12022}
12023#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12024pub struct OptionImplicitsClauseGreen(pub GreenId);
12025impl TypedSyntaxNode for OptionImplicitsClause {
12026 const OPTIONAL_KIND: Option<SyntaxKind> = None;
12027 type StablePtr = OptionImplicitsClausePtr;
12028 type Green = OptionImplicitsClauseGreen;
12029 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12030 panic!("No missing variant.");
12031 }
12032 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12033 let kind = node.kind(db);
12034 match kind {
12035 SyntaxKind::OptionImplicitsClauseEmpty => {
12036 OptionImplicitsClause::Empty(OptionImplicitsClauseEmpty::from_syntax_node(db, node))
12037 }
12038 SyntaxKind::ImplicitsClause => {
12039 OptionImplicitsClause::ImplicitsClause(ImplicitsClause::from_syntax_node(db, node))
12040 }
12041 _ => panic!(
12042 "Unexpected syntax kind {:?} when constructing {}.",
12043 kind, "OptionImplicitsClause"
12044 ),
12045 }
12046 }
12047 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12048 let kind = node.kind(db);
12049 match kind {
12050 SyntaxKind::OptionImplicitsClauseEmpty => Some(OptionImplicitsClause::Empty(
12051 OptionImplicitsClauseEmpty::from_syntax_node(db, node),
12052 )),
12053 SyntaxKind::ImplicitsClause => Some(OptionImplicitsClause::ImplicitsClause(
12054 ImplicitsClause::from_syntax_node(db, node),
12055 )),
12056 _ => None,
12057 }
12058 }
12059 fn as_syntax_node(&self) -> SyntaxNode {
12060 match self {
12061 OptionImplicitsClause::Empty(x) => x.as_syntax_node(),
12062 OptionImplicitsClause::ImplicitsClause(x) => x.as_syntax_node(),
12063 }
12064 }
12065 fn stable_ptr(&self) -> Self::StablePtr {
12066 OptionImplicitsClausePtr(self.as_syntax_node().0.stable_ptr)
12067 }
12068}
12069impl From<&OptionImplicitsClause> for SyntaxStablePtrId {
12070 fn from(node: &OptionImplicitsClause) -> Self {
12071 node.stable_ptr().untyped()
12072 }
12073}
12074impl OptionImplicitsClause {
12075 pub fn is_variant(kind: SyntaxKind) -> bool {
12077 matches!(kind, SyntaxKind::OptionImplicitsClauseEmpty | SyntaxKind::ImplicitsClause)
12078 }
12079}
12080#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12081pub struct OptionImplicitsClauseEmpty {
12082 node: SyntaxNode,
12083 children: Arc<[SyntaxNode]>,
12084}
12085impl OptionImplicitsClauseEmpty {
12086 pub fn new_green(db: &dyn SyntaxGroup) -> OptionImplicitsClauseEmptyGreen {
12087 let children: Vec<GreenId> = vec![];
12088 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
12089 OptionImplicitsClauseEmptyGreen(
12090 Arc::new(GreenNode {
12091 kind: SyntaxKind::OptionImplicitsClauseEmpty,
12092 details: GreenNodeDetails::Node { children, width },
12093 })
12094 .intern(db),
12095 )
12096 }
12097}
12098impl OptionImplicitsClauseEmpty {}
12099#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12100pub struct OptionImplicitsClauseEmptyPtr(pub SyntaxStablePtrId);
12101impl OptionImplicitsClauseEmptyPtr {}
12102impl TypedStablePtr for OptionImplicitsClauseEmptyPtr {
12103 type SyntaxNode = OptionImplicitsClauseEmpty;
12104 fn untyped(&self) -> SyntaxStablePtrId {
12105 self.0
12106 }
12107 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionImplicitsClauseEmpty {
12108 OptionImplicitsClauseEmpty::from_syntax_node(db, self.0.lookup(db))
12109 }
12110}
12111impl From<OptionImplicitsClauseEmptyPtr> for SyntaxStablePtrId {
12112 fn from(ptr: OptionImplicitsClauseEmptyPtr) -> Self {
12113 ptr.untyped()
12114 }
12115}
12116#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12117pub struct OptionImplicitsClauseEmptyGreen(pub GreenId);
12118impl TypedSyntaxNode for OptionImplicitsClauseEmpty {
12119 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionImplicitsClauseEmpty);
12120 type StablePtr = OptionImplicitsClauseEmptyPtr;
12121 type Green = OptionImplicitsClauseEmptyGreen;
12122 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12123 OptionImplicitsClauseEmptyGreen(
12124 Arc::new(GreenNode {
12125 kind: SyntaxKind::OptionImplicitsClauseEmpty,
12126 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
12127 })
12128 .intern(db),
12129 )
12130 }
12131 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12132 let kind = node.kind(db);
12133 assert_eq!(
12134 kind,
12135 SyntaxKind::OptionImplicitsClauseEmpty,
12136 "Unexpected SyntaxKind {:?}. Expected {:?}.",
12137 kind,
12138 SyntaxKind::OptionImplicitsClauseEmpty
12139 );
12140 let children = db.get_children(node.clone());
12141 Self { node, children }
12142 }
12143 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12144 let kind = node.kind(db);
12145 if kind == SyntaxKind::OptionImplicitsClauseEmpty {
12146 Some(Self::from_syntax_node(db, node))
12147 } else {
12148 None
12149 }
12150 }
12151 fn as_syntax_node(&self) -> SyntaxNode {
12152 self.node.clone()
12153 }
12154 fn stable_ptr(&self) -> Self::StablePtr {
12155 OptionImplicitsClauseEmptyPtr(self.node.0.stable_ptr)
12156 }
12157}
12158impl From<&OptionImplicitsClauseEmpty> for SyntaxStablePtrId {
12159 fn from(node: &OptionImplicitsClauseEmpty) -> Self {
12160 node.stable_ptr().untyped()
12161 }
12162}
12163#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12164pub enum OptionTerminalNoPanic {
12165 Empty(OptionTerminalNoPanicEmpty),
12166 TerminalNoPanic(TerminalNoPanic),
12167}
12168#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12169pub struct OptionTerminalNoPanicPtr(pub SyntaxStablePtrId);
12170impl TypedStablePtr for OptionTerminalNoPanicPtr {
12171 type SyntaxNode = OptionTerminalNoPanic;
12172 fn untyped(&self) -> SyntaxStablePtrId {
12173 self.0
12174 }
12175 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalNoPanic {
12176 OptionTerminalNoPanic::from_syntax_node(db, self.0.lookup(db))
12177 }
12178}
12179impl From<OptionTerminalNoPanicPtr> for SyntaxStablePtrId {
12180 fn from(ptr: OptionTerminalNoPanicPtr) -> Self {
12181 ptr.untyped()
12182 }
12183}
12184impl From<OptionTerminalNoPanicEmptyPtr> for OptionTerminalNoPanicPtr {
12185 fn from(value: OptionTerminalNoPanicEmptyPtr) -> Self {
12186 Self(value.0)
12187 }
12188}
12189impl From<TerminalNoPanicPtr> for OptionTerminalNoPanicPtr {
12190 fn from(value: TerminalNoPanicPtr) -> Self {
12191 Self(value.0)
12192 }
12193}
12194impl From<OptionTerminalNoPanicEmptyGreen> for OptionTerminalNoPanicGreen {
12195 fn from(value: OptionTerminalNoPanicEmptyGreen) -> Self {
12196 Self(value.0)
12197 }
12198}
12199impl From<TerminalNoPanicGreen> for OptionTerminalNoPanicGreen {
12200 fn from(value: TerminalNoPanicGreen) -> Self {
12201 Self(value.0)
12202 }
12203}
12204#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12205pub struct OptionTerminalNoPanicGreen(pub GreenId);
12206impl TypedSyntaxNode for OptionTerminalNoPanic {
12207 const OPTIONAL_KIND: Option<SyntaxKind> = None;
12208 type StablePtr = OptionTerminalNoPanicPtr;
12209 type Green = OptionTerminalNoPanicGreen;
12210 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12211 panic!("No missing variant.");
12212 }
12213 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12214 let kind = node.kind(db);
12215 match kind {
12216 SyntaxKind::OptionTerminalNoPanicEmpty => {
12217 OptionTerminalNoPanic::Empty(OptionTerminalNoPanicEmpty::from_syntax_node(db, node))
12218 }
12219 SyntaxKind::TerminalNoPanic => {
12220 OptionTerminalNoPanic::TerminalNoPanic(TerminalNoPanic::from_syntax_node(db, node))
12221 }
12222 _ => panic!(
12223 "Unexpected syntax kind {:?} when constructing {}.",
12224 kind, "OptionTerminalNoPanic"
12225 ),
12226 }
12227 }
12228 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12229 let kind = node.kind(db);
12230 match kind {
12231 SyntaxKind::OptionTerminalNoPanicEmpty => Some(OptionTerminalNoPanic::Empty(
12232 OptionTerminalNoPanicEmpty::from_syntax_node(db, node),
12233 )),
12234 SyntaxKind::TerminalNoPanic => Some(OptionTerminalNoPanic::TerminalNoPanic(
12235 TerminalNoPanic::from_syntax_node(db, node),
12236 )),
12237 _ => None,
12238 }
12239 }
12240 fn as_syntax_node(&self) -> SyntaxNode {
12241 match self {
12242 OptionTerminalNoPanic::Empty(x) => x.as_syntax_node(),
12243 OptionTerminalNoPanic::TerminalNoPanic(x) => x.as_syntax_node(),
12244 }
12245 }
12246 fn stable_ptr(&self) -> Self::StablePtr {
12247 OptionTerminalNoPanicPtr(self.as_syntax_node().0.stable_ptr)
12248 }
12249}
12250impl From<&OptionTerminalNoPanic> for SyntaxStablePtrId {
12251 fn from(node: &OptionTerminalNoPanic) -> Self {
12252 node.stable_ptr().untyped()
12253 }
12254}
12255impl OptionTerminalNoPanic {
12256 pub fn is_variant(kind: SyntaxKind) -> bool {
12258 matches!(kind, SyntaxKind::OptionTerminalNoPanicEmpty | SyntaxKind::TerminalNoPanic)
12259 }
12260}
12261#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12262pub struct OptionTerminalNoPanicEmpty {
12263 node: SyntaxNode,
12264 children: Arc<[SyntaxNode]>,
12265}
12266impl OptionTerminalNoPanicEmpty {
12267 pub fn new_green(db: &dyn SyntaxGroup) -> OptionTerminalNoPanicEmptyGreen {
12268 let children: Vec<GreenId> = vec![];
12269 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
12270 OptionTerminalNoPanicEmptyGreen(
12271 Arc::new(GreenNode {
12272 kind: SyntaxKind::OptionTerminalNoPanicEmpty,
12273 details: GreenNodeDetails::Node { children, width },
12274 })
12275 .intern(db),
12276 )
12277 }
12278}
12279impl OptionTerminalNoPanicEmpty {}
12280#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12281pub struct OptionTerminalNoPanicEmptyPtr(pub SyntaxStablePtrId);
12282impl OptionTerminalNoPanicEmptyPtr {}
12283impl TypedStablePtr for OptionTerminalNoPanicEmptyPtr {
12284 type SyntaxNode = OptionTerminalNoPanicEmpty;
12285 fn untyped(&self) -> SyntaxStablePtrId {
12286 self.0
12287 }
12288 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalNoPanicEmpty {
12289 OptionTerminalNoPanicEmpty::from_syntax_node(db, self.0.lookup(db))
12290 }
12291}
12292impl From<OptionTerminalNoPanicEmptyPtr> for SyntaxStablePtrId {
12293 fn from(ptr: OptionTerminalNoPanicEmptyPtr) -> Self {
12294 ptr.untyped()
12295 }
12296}
12297#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12298pub struct OptionTerminalNoPanicEmptyGreen(pub GreenId);
12299impl TypedSyntaxNode for OptionTerminalNoPanicEmpty {
12300 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionTerminalNoPanicEmpty);
12301 type StablePtr = OptionTerminalNoPanicEmptyPtr;
12302 type Green = OptionTerminalNoPanicEmptyGreen;
12303 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12304 OptionTerminalNoPanicEmptyGreen(
12305 Arc::new(GreenNode {
12306 kind: SyntaxKind::OptionTerminalNoPanicEmpty,
12307 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
12308 })
12309 .intern(db),
12310 )
12311 }
12312 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12313 let kind = node.kind(db);
12314 assert_eq!(
12315 kind,
12316 SyntaxKind::OptionTerminalNoPanicEmpty,
12317 "Unexpected SyntaxKind {:?}. Expected {:?}.",
12318 kind,
12319 SyntaxKind::OptionTerminalNoPanicEmpty
12320 );
12321 let children = db.get_children(node.clone());
12322 Self { node, children }
12323 }
12324 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12325 let kind = node.kind(db);
12326 if kind == SyntaxKind::OptionTerminalNoPanicEmpty {
12327 Some(Self::from_syntax_node(db, node))
12328 } else {
12329 None
12330 }
12331 }
12332 fn as_syntax_node(&self) -> SyntaxNode {
12333 self.node.clone()
12334 }
12335 fn stable_ptr(&self) -> Self::StablePtr {
12336 OptionTerminalNoPanicEmptyPtr(self.node.0.stable_ptr)
12337 }
12338}
12339impl From<&OptionTerminalNoPanicEmpty> for SyntaxStablePtrId {
12340 fn from(node: &OptionTerminalNoPanicEmpty) -> Self {
12341 node.stable_ptr().untyped()
12342 }
12343}
12344#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12345pub enum OptionTerminalConst {
12346 Empty(OptionTerminalConstEmpty),
12347 TerminalConst(TerminalConst),
12348}
12349#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12350pub struct OptionTerminalConstPtr(pub SyntaxStablePtrId);
12351impl TypedStablePtr for OptionTerminalConstPtr {
12352 type SyntaxNode = OptionTerminalConst;
12353 fn untyped(&self) -> SyntaxStablePtrId {
12354 self.0
12355 }
12356 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalConst {
12357 OptionTerminalConst::from_syntax_node(db, self.0.lookup(db))
12358 }
12359}
12360impl From<OptionTerminalConstPtr> for SyntaxStablePtrId {
12361 fn from(ptr: OptionTerminalConstPtr) -> Self {
12362 ptr.untyped()
12363 }
12364}
12365impl From<OptionTerminalConstEmptyPtr> for OptionTerminalConstPtr {
12366 fn from(value: OptionTerminalConstEmptyPtr) -> Self {
12367 Self(value.0)
12368 }
12369}
12370impl From<TerminalConstPtr> for OptionTerminalConstPtr {
12371 fn from(value: TerminalConstPtr) -> Self {
12372 Self(value.0)
12373 }
12374}
12375impl From<OptionTerminalConstEmptyGreen> for OptionTerminalConstGreen {
12376 fn from(value: OptionTerminalConstEmptyGreen) -> Self {
12377 Self(value.0)
12378 }
12379}
12380impl From<TerminalConstGreen> for OptionTerminalConstGreen {
12381 fn from(value: TerminalConstGreen) -> Self {
12382 Self(value.0)
12383 }
12384}
12385#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12386pub struct OptionTerminalConstGreen(pub GreenId);
12387impl TypedSyntaxNode for OptionTerminalConst {
12388 const OPTIONAL_KIND: Option<SyntaxKind> = None;
12389 type StablePtr = OptionTerminalConstPtr;
12390 type Green = OptionTerminalConstGreen;
12391 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12392 panic!("No missing variant.");
12393 }
12394 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12395 let kind = node.kind(db);
12396 match kind {
12397 SyntaxKind::OptionTerminalConstEmpty => {
12398 OptionTerminalConst::Empty(OptionTerminalConstEmpty::from_syntax_node(db, node))
12399 }
12400 SyntaxKind::TerminalConst => {
12401 OptionTerminalConst::TerminalConst(TerminalConst::from_syntax_node(db, node))
12402 }
12403 _ => panic!(
12404 "Unexpected syntax kind {:?} when constructing {}.",
12405 kind, "OptionTerminalConst"
12406 ),
12407 }
12408 }
12409 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12410 let kind = node.kind(db);
12411 match kind {
12412 SyntaxKind::OptionTerminalConstEmpty => Some(OptionTerminalConst::Empty(
12413 OptionTerminalConstEmpty::from_syntax_node(db, node),
12414 )),
12415 SyntaxKind::TerminalConst => {
12416 Some(OptionTerminalConst::TerminalConst(TerminalConst::from_syntax_node(db, node)))
12417 }
12418 _ => None,
12419 }
12420 }
12421 fn as_syntax_node(&self) -> SyntaxNode {
12422 match self {
12423 OptionTerminalConst::Empty(x) => x.as_syntax_node(),
12424 OptionTerminalConst::TerminalConst(x) => x.as_syntax_node(),
12425 }
12426 }
12427 fn stable_ptr(&self) -> Self::StablePtr {
12428 OptionTerminalConstPtr(self.as_syntax_node().0.stable_ptr)
12429 }
12430}
12431impl From<&OptionTerminalConst> for SyntaxStablePtrId {
12432 fn from(node: &OptionTerminalConst) -> Self {
12433 node.stable_ptr().untyped()
12434 }
12435}
12436impl OptionTerminalConst {
12437 pub fn is_variant(kind: SyntaxKind) -> bool {
12439 matches!(kind, SyntaxKind::OptionTerminalConstEmpty | SyntaxKind::TerminalConst)
12440 }
12441}
12442#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12443pub struct OptionTerminalConstEmpty {
12444 node: SyntaxNode,
12445 children: Arc<[SyntaxNode]>,
12446}
12447impl OptionTerminalConstEmpty {
12448 pub fn new_green(db: &dyn SyntaxGroup) -> OptionTerminalConstEmptyGreen {
12449 let children: Vec<GreenId> = vec![];
12450 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
12451 OptionTerminalConstEmptyGreen(
12452 Arc::new(GreenNode {
12453 kind: SyntaxKind::OptionTerminalConstEmpty,
12454 details: GreenNodeDetails::Node { children, width },
12455 })
12456 .intern(db),
12457 )
12458 }
12459}
12460impl OptionTerminalConstEmpty {}
12461#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12462pub struct OptionTerminalConstEmptyPtr(pub SyntaxStablePtrId);
12463impl OptionTerminalConstEmptyPtr {}
12464impl TypedStablePtr for OptionTerminalConstEmptyPtr {
12465 type SyntaxNode = OptionTerminalConstEmpty;
12466 fn untyped(&self) -> SyntaxStablePtrId {
12467 self.0
12468 }
12469 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalConstEmpty {
12470 OptionTerminalConstEmpty::from_syntax_node(db, self.0.lookup(db))
12471 }
12472}
12473impl From<OptionTerminalConstEmptyPtr> for SyntaxStablePtrId {
12474 fn from(ptr: OptionTerminalConstEmptyPtr) -> Self {
12475 ptr.untyped()
12476 }
12477}
12478#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12479pub struct OptionTerminalConstEmptyGreen(pub GreenId);
12480impl TypedSyntaxNode for OptionTerminalConstEmpty {
12481 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionTerminalConstEmpty);
12482 type StablePtr = OptionTerminalConstEmptyPtr;
12483 type Green = OptionTerminalConstEmptyGreen;
12484 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12485 OptionTerminalConstEmptyGreen(
12486 Arc::new(GreenNode {
12487 kind: SyntaxKind::OptionTerminalConstEmpty,
12488 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
12489 })
12490 .intern(db),
12491 )
12492 }
12493 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12494 let kind = node.kind(db);
12495 assert_eq!(
12496 kind,
12497 SyntaxKind::OptionTerminalConstEmpty,
12498 "Unexpected SyntaxKind {:?}. Expected {:?}.",
12499 kind,
12500 SyntaxKind::OptionTerminalConstEmpty
12501 );
12502 let children = db.get_children(node.clone());
12503 Self { node, children }
12504 }
12505 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12506 let kind = node.kind(db);
12507 if kind == SyntaxKind::OptionTerminalConstEmpty {
12508 Some(Self::from_syntax_node(db, node))
12509 } else {
12510 None
12511 }
12512 }
12513 fn as_syntax_node(&self) -> SyntaxNode {
12514 self.node.clone()
12515 }
12516 fn stable_ptr(&self) -> Self::StablePtr {
12517 OptionTerminalConstEmptyPtr(self.node.0.stable_ptr)
12518 }
12519}
12520impl From<&OptionTerminalConstEmpty> for SyntaxStablePtrId {
12521 fn from(node: &OptionTerminalConstEmpty) -> Self {
12522 node.stable_ptr().untyped()
12523 }
12524}
12525#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12526pub struct FunctionSignature {
12527 node: SyntaxNode,
12528 children: Arc<[SyntaxNode]>,
12529}
12530impl FunctionSignature {
12531 pub const INDEX_LPAREN: usize = 0;
12532 pub const INDEX_PARAMETERS: usize = 1;
12533 pub const INDEX_RPAREN: usize = 2;
12534 pub const INDEX_RET_TY: usize = 3;
12535 pub const INDEX_IMPLICITS_CLAUSE: usize = 4;
12536 pub const INDEX_OPTIONAL_NO_PANIC: usize = 5;
12537 pub fn new_green(
12538 db: &dyn SyntaxGroup,
12539 lparen: TerminalLParenGreen,
12540 parameters: ParamListGreen,
12541 rparen: TerminalRParenGreen,
12542 ret_ty: OptionReturnTypeClauseGreen,
12543 implicits_clause: OptionImplicitsClauseGreen,
12544 optional_no_panic: OptionTerminalNoPanicGreen,
12545 ) -> FunctionSignatureGreen {
12546 let children: Vec<GreenId> = vec![
12547 lparen.0,
12548 parameters.0,
12549 rparen.0,
12550 ret_ty.0,
12551 implicits_clause.0,
12552 optional_no_panic.0,
12553 ];
12554 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
12555 FunctionSignatureGreen(
12556 Arc::new(GreenNode {
12557 kind: SyntaxKind::FunctionSignature,
12558 details: GreenNodeDetails::Node { children, width },
12559 })
12560 .intern(db),
12561 )
12562 }
12563}
12564impl FunctionSignature {
12565 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
12566 TerminalLParen::from_syntax_node(db, self.children[0].clone())
12567 }
12568 pub fn parameters(&self, db: &dyn SyntaxGroup) -> ParamList {
12569 ParamList::from_syntax_node(db, self.children[1].clone())
12570 }
12571 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
12572 TerminalRParen::from_syntax_node(db, self.children[2].clone())
12573 }
12574 pub fn ret_ty(&self, db: &dyn SyntaxGroup) -> OptionReturnTypeClause {
12575 OptionReturnTypeClause::from_syntax_node(db, self.children[3].clone())
12576 }
12577 pub fn implicits_clause(&self, db: &dyn SyntaxGroup) -> OptionImplicitsClause {
12578 OptionImplicitsClause::from_syntax_node(db, self.children[4].clone())
12579 }
12580 pub fn optional_no_panic(&self, db: &dyn SyntaxGroup) -> OptionTerminalNoPanic {
12581 OptionTerminalNoPanic::from_syntax_node(db, self.children[5].clone())
12582 }
12583}
12584#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12585pub struct FunctionSignaturePtr(pub SyntaxStablePtrId);
12586impl FunctionSignaturePtr {}
12587impl TypedStablePtr for FunctionSignaturePtr {
12588 type SyntaxNode = FunctionSignature;
12589 fn untyped(&self) -> SyntaxStablePtrId {
12590 self.0
12591 }
12592 fn lookup(&self, db: &dyn SyntaxGroup) -> FunctionSignature {
12593 FunctionSignature::from_syntax_node(db, self.0.lookup(db))
12594 }
12595}
12596impl From<FunctionSignaturePtr> for SyntaxStablePtrId {
12597 fn from(ptr: FunctionSignaturePtr) -> Self {
12598 ptr.untyped()
12599 }
12600}
12601#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12602pub struct FunctionSignatureGreen(pub GreenId);
12603impl TypedSyntaxNode for FunctionSignature {
12604 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::FunctionSignature);
12605 type StablePtr = FunctionSignaturePtr;
12606 type Green = FunctionSignatureGreen;
12607 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12608 FunctionSignatureGreen(
12609 Arc::new(GreenNode {
12610 kind: SyntaxKind::FunctionSignature,
12611 details: GreenNodeDetails::Node {
12612 children: vec![
12613 TerminalLParen::missing(db).0,
12614 ParamList::missing(db).0,
12615 TerminalRParen::missing(db).0,
12616 OptionReturnTypeClause::missing(db).0,
12617 OptionImplicitsClause::missing(db).0,
12618 OptionTerminalNoPanic::missing(db).0,
12619 ],
12620 width: TextWidth::default(),
12621 },
12622 })
12623 .intern(db),
12624 )
12625 }
12626 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12627 let kind = node.kind(db);
12628 assert_eq!(
12629 kind,
12630 SyntaxKind::FunctionSignature,
12631 "Unexpected SyntaxKind {:?}. Expected {:?}.",
12632 kind,
12633 SyntaxKind::FunctionSignature
12634 );
12635 let children = db.get_children(node.clone());
12636 Self { node, children }
12637 }
12638 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12639 let kind = node.kind(db);
12640 if kind == SyntaxKind::FunctionSignature {
12641 Some(Self::from_syntax_node(db, node))
12642 } else {
12643 None
12644 }
12645 }
12646 fn as_syntax_node(&self) -> SyntaxNode {
12647 self.node.clone()
12648 }
12649 fn stable_ptr(&self) -> Self::StablePtr {
12650 FunctionSignaturePtr(self.node.0.stable_ptr)
12651 }
12652}
12653impl From<&FunctionSignature> for SyntaxStablePtrId {
12654 fn from(node: &FunctionSignature) -> Self {
12655 node.stable_ptr().untyped()
12656 }
12657}
12658#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12659pub struct Member {
12660 node: SyntaxNode,
12661 children: Arc<[SyntaxNode]>,
12662}
12663impl Member {
12664 pub const INDEX_ATTRIBUTES: usize = 0;
12665 pub const INDEX_VISIBILITY: usize = 1;
12666 pub const INDEX_NAME: usize = 2;
12667 pub const INDEX_TYPE_CLAUSE: usize = 3;
12668 pub fn new_green(
12669 db: &dyn SyntaxGroup,
12670 attributes: AttributeListGreen,
12671 visibility: VisibilityGreen,
12672 name: TerminalIdentifierGreen,
12673 type_clause: TypeClauseGreen,
12674 ) -> MemberGreen {
12675 let children: Vec<GreenId> = vec![attributes.0, visibility.0, name.0, type_clause.0];
12676 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
12677 MemberGreen(
12678 Arc::new(GreenNode {
12679 kind: SyntaxKind::Member,
12680 details: GreenNodeDetails::Node { children, width },
12681 })
12682 .intern(db),
12683 )
12684 }
12685}
12686impl Member {
12687 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
12688 AttributeList::from_syntax_node(db, self.children[0].clone())
12689 }
12690 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
12691 Visibility::from_syntax_node(db, self.children[1].clone())
12692 }
12693 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
12694 TerminalIdentifier::from_syntax_node(db, self.children[2].clone())
12695 }
12696 pub fn type_clause(&self, db: &dyn SyntaxGroup) -> TypeClause {
12697 TypeClause::from_syntax_node(db, self.children[3].clone())
12698 }
12699}
12700#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12701pub struct MemberPtr(pub SyntaxStablePtrId);
12702impl MemberPtr {
12703 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
12704 let ptr = self.0.lookup_intern(db);
12705 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
12706 TerminalIdentifierGreen(key_fields[0])
12707 } else {
12708 panic!("Unexpected key field query on root.");
12709 }
12710 }
12711}
12712impl TypedStablePtr for MemberPtr {
12713 type SyntaxNode = Member;
12714 fn untyped(&self) -> SyntaxStablePtrId {
12715 self.0
12716 }
12717 fn lookup(&self, db: &dyn SyntaxGroup) -> Member {
12718 Member::from_syntax_node(db, self.0.lookup(db))
12719 }
12720}
12721impl From<MemberPtr> for SyntaxStablePtrId {
12722 fn from(ptr: MemberPtr) -> Self {
12723 ptr.untyped()
12724 }
12725}
12726#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12727pub struct MemberGreen(pub GreenId);
12728impl TypedSyntaxNode for Member {
12729 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::Member);
12730 type StablePtr = MemberPtr;
12731 type Green = MemberGreen;
12732 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12733 MemberGreen(
12734 Arc::new(GreenNode {
12735 kind: SyntaxKind::Member,
12736 details: GreenNodeDetails::Node {
12737 children: vec![
12738 AttributeList::missing(db).0,
12739 Visibility::missing(db).0,
12740 TerminalIdentifier::missing(db).0,
12741 TypeClause::missing(db).0,
12742 ],
12743 width: TextWidth::default(),
12744 },
12745 })
12746 .intern(db),
12747 )
12748 }
12749 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12750 let kind = node.kind(db);
12751 assert_eq!(
12752 kind,
12753 SyntaxKind::Member,
12754 "Unexpected SyntaxKind {:?}. Expected {:?}.",
12755 kind,
12756 SyntaxKind::Member
12757 );
12758 let children = db.get_children(node.clone());
12759 Self { node, children }
12760 }
12761 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12762 let kind = node.kind(db);
12763 if kind == SyntaxKind::Member { Some(Self::from_syntax_node(db, node)) } else { None }
12764 }
12765 fn as_syntax_node(&self) -> SyntaxNode {
12766 self.node.clone()
12767 }
12768 fn stable_ptr(&self) -> Self::StablePtr {
12769 MemberPtr(self.node.0.stable_ptr)
12770 }
12771}
12772impl From<&Member> for SyntaxStablePtrId {
12773 fn from(node: &Member) -> Self {
12774 node.stable_ptr().untyped()
12775 }
12776}
12777#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12778pub struct MemberList(ElementList<Member, 2>);
12779impl Deref for MemberList {
12780 type Target = ElementList<Member, 2>;
12781 fn deref(&self) -> &Self::Target {
12782 &self.0
12783 }
12784}
12785impl MemberList {
12786 pub fn new_green(
12787 db: &dyn SyntaxGroup,
12788 children: Vec<MemberListElementOrSeparatorGreen>,
12789 ) -> MemberListGreen {
12790 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
12791 MemberListGreen(
12792 Arc::new(GreenNode {
12793 kind: SyntaxKind::MemberList,
12794 details: GreenNodeDetails::Node {
12795 children: children.iter().map(|x| x.id()).collect(),
12796 width,
12797 },
12798 })
12799 .intern(db),
12800 )
12801 }
12802}
12803#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12804pub struct MemberListPtr(pub SyntaxStablePtrId);
12805impl TypedStablePtr for MemberListPtr {
12806 type SyntaxNode = MemberList;
12807 fn untyped(&self) -> SyntaxStablePtrId {
12808 self.0
12809 }
12810 fn lookup(&self, db: &dyn SyntaxGroup) -> MemberList {
12811 MemberList::from_syntax_node(db, self.0.lookup(db))
12812 }
12813}
12814impl From<MemberListPtr> for SyntaxStablePtrId {
12815 fn from(ptr: MemberListPtr) -> Self {
12816 ptr.untyped()
12817 }
12818}
12819#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12820pub enum MemberListElementOrSeparatorGreen {
12821 Separator(TerminalCommaGreen),
12822 Element(MemberGreen),
12823}
12824impl From<TerminalCommaGreen> for MemberListElementOrSeparatorGreen {
12825 fn from(value: TerminalCommaGreen) -> Self {
12826 MemberListElementOrSeparatorGreen::Separator(value)
12827 }
12828}
12829impl From<MemberGreen> for MemberListElementOrSeparatorGreen {
12830 fn from(value: MemberGreen) -> Self {
12831 MemberListElementOrSeparatorGreen::Element(value)
12832 }
12833}
12834impl MemberListElementOrSeparatorGreen {
12835 fn id(&self) -> GreenId {
12836 match self {
12837 MemberListElementOrSeparatorGreen::Separator(green) => green.0,
12838 MemberListElementOrSeparatorGreen::Element(green) => green.0,
12839 }
12840 }
12841}
12842#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12843pub struct MemberListGreen(pub GreenId);
12844impl TypedSyntaxNode for MemberList {
12845 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::MemberList);
12846 type StablePtr = MemberListPtr;
12847 type Green = MemberListGreen;
12848 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12849 MemberListGreen(
12850 Arc::new(GreenNode {
12851 kind: SyntaxKind::MemberList,
12852 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
12853 })
12854 .intern(db),
12855 )
12856 }
12857 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12858 Self(ElementList::new(node))
12859 }
12860 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12861 if node.kind(db) == SyntaxKind::MemberList {
12862 Some(Self(ElementList::new(node)))
12863 } else {
12864 None
12865 }
12866 }
12867 fn as_syntax_node(&self) -> SyntaxNode {
12868 self.node.clone()
12869 }
12870 fn stable_ptr(&self) -> Self::StablePtr {
12871 MemberListPtr(self.node.0.stable_ptr)
12872 }
12873}
12874impl From<&MemberList> for SyntaxStablePtrId {
12875 fn from(node: &MemberList) -> Self {
12876 node.stable_ptr().untyped()
12877 }
12878}
12879#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12880pub struct Variant {
12881 node: SyntaxNode,
12882 children: Arc<[SyntaxNode]>,
12883}
12884impl Variant {
12885 pub const INDEX_ATTRIBUTES: usize = 0;
12886 pub const INDEX_NAME: usize = 1;
12887 pub const INDEX_TYPE_CLAUSE: usize = 2;
12888 pub fn new_green(
12889 db: &dyn SyntaxGroup,
12890 attributes: AttributeListGreen,
12891 name: TerminalIdentifierGreen,
12892 type_clause: OptionTypeClauseGreen,
12893 ) -> VariantGreen {
12894 let children: Vec<GreenId> = vec![attributes.0, name.0, type_clause.0];
12895 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
12896 VariantGreen(
12897 Arc::new(GreenNode {
12898 kind: SyntaxKind::Variant,
12899 details: GreenNodeDetails::Node { children, width },
12900 })
12901 .intern(db),
12902 )
12903 }
12904}
12905impl Variant {
12906 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
12907 AttributeList::from_syntax_node(db, self.children[0].clone())
12908 }
12909 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
12910 TerminalIdentifier::from_syntax_node(db, self.children[1].clone())
12911 }
12912 pub fn type_clause(&self, db: &dyn SyntaxGroup) -> OptionTypeClause {
12913 OptionTypeClause::from_syntax_node(db, self.children[2].clone())
12914 }
12915}
12916#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12917pub struct VariantPtr(pub SyntaxStablePtrId);
12918impl VariantPtr {
12919 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
12920 let ptr = self.0.lookup_intern(db);
12921 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
12922 TerminalIdentifierGreen(key_fields[0])
12923 } else {
12924 panic!("Unexpected key field query on root.");
12925 }
12926 }
12927}
12928impl TypedStablePtr for VariantPtr {
12929 type SyntaxNode = Variant;
12930 fn untyped(&self) -> SyntaxStablePtrId {
12931 self.0
12932 }
12933 fn lookup(&self, db: &dyn SyntaxGroup) -> Variant {
12934 Variant::from_syntax_node(db, self.0.lookup(db))
12935 }
12936}
12937impl From<VariantPtr> for SyntaxStablePtrId {
12938 fn from(ptr: VariantPtr) -> Self {
12939 ptr.untyped()
12940 }
12941}
12942#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12943pub struct VariantGreen(pub GreenId);
12944impl TypedSyntaxNode for Variant {
12945 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::Variant);
12946 type StablePtr = VariantPtr;
12947 type Green = VariantGreen;
12948 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12949 VariantGreen(
12950 Arc::new(GreenNode {
12951 kind: SyntaxKind::Variant,
12952 details: GreenNodeDetails::Node {
12953 children: vec![
12954 AttributeList::missing(db).0,
12955 TerminalIdentifier::missing(db).0,
12956 OptionTypeClause::missing(db).0,
12957 ],
12958 width: TextWidth::default(),
12959 },
12960 })
12961 .intern(db),
12962 )
12963 }
12964 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12965 let kind = node.kind(db);
12966 assert_eq!(
12967 kind,
12968 SyntaxKind::Variant,
12969 "Unexpected SyntaxKind {:?}. Expected {:?}.",
12970 kind,
12971 SyntaxKind::Variant
12972 );
12973 let children = db.get_children(node.clone());
12974 Self { node, children }
12975 }
12976 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12977 let kind = node.kind(db);
12978 if kind == SyntaxKind::Variant { Some(Self::from_syntax_node(db, node)) } else { None }
12979 }
12980 fn as_syntax_node(&self) -> SyntaxNode {
12981 self.node.clone()
12982 }
12983 fn stable_ptr(&self) -> Self::StablePtr {
12984 VariantPtr(self.node.0.stable_ptr)
12985 }
12986}
12987impl From<&Variant> for SyntaxStablePtrId {
12988 fn from(node: &Variant) -> Self {
12989 node.stable_ptr().untyped()
12990 }
12991}
12992#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12993pub struct VariantList(ElementList<Variant, 2>);
12994impl Deref for VariantList {
12995 type Target = ElementList<Variant, 2>;
12996 fn deref(&self) -> &Self::Target {
12997 &self.0
12998 }
12999}
13000impl VariantList {
13001 pub fn new_green(
13002 db: &dyn SyntaxGroup,
13003 children: Vec<VariantListElementOrSeparatorGreen>,
13004 ) -> VariantListGreen {
13005 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
13006 VariantListGreen(
13007 Arc::new(GreenNode {
13008 kind: SyntaxKind::VariantList,
13009 details: GreenNodeDetails::Node {
13010 children: children.iter().map(|x| x.id()).collect(),
13011 width,
13012 },
13013 })
13014 .intern(db),
13015 )
13016 }
13017}
13018#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13019pub struct VariantListPtr(pub SyntaxStablePtrId);
13020impl TypedStablePtr for VariantListPtr {
13021 type SyntaxNode = VariantList;
13022 fn untyped(&self) -> SyntaxStablePtrId {
13023 self.0
13024 }
13025 fn lookup(&self, db: &dyn SyntaxGroup) -> VariantList {
13026 VariantList::from_syntax_node(db, self.0.lookup(db))
13027 }
13028}
13029impl From<VariantListPtr> for SyntaxStablePtrId {
13030 fn from(ptr: VariantListPtr) -> Self {
13031 ptr.untyped()
13032 }
13033}
13034#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13035pub enum VariantListElementOrSeparatorGreen {
13036 Separator(TerminalCommaGreen),
13037 Element(VariantGreen),
13038}
13039impl From<TerminalCommaGreen> for VariantListElementOrSeparatorGreen {
13040 fn from(value: TerminalCommaGreen) -> Self {
13041 VariantListElementOrSeparatorGreen::Separator(value)
13042 }
13043}
13044impl From<VariantGreen> for VariantListElementOrSeparatorGreen {
13045 fn from(value: VariantGreen) -> Self {
13046 VariantListElementOrSeparatorGreen::Element(value)
13047 }
13048}
13049impl VariantListElementOrSeparatorGreen {
13050 fn id(&self) -> GreenId {
13051 match self {
13052 VariantListElementOrSeparatorGreen::Separator(green) => green.0,
13053 VariantListElementOrSeparatorGreen::Element(green) => green.0,
13054 }
13055 }
13056}
13057#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13058pub struct VariantListGreen(pub GreenId);
13059impl TypedSyntaxNode for VariantList {
13060 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::VariantList);
13061 type StablePtr = VariantListPtr;
13062 type Green = VariantListGreen;
13063 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13064 VariantListGreen(
13065 Arc::new(GreenNode {
13066 kind: SyntaxKind::VariantList,
13067 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
13068 })
13069 .intern(db),
13070 )
13071 }
13072 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13073 Self(ElementList::new(node))
13074 }
13075 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13076 if node.kind(db) == SyntaxKind::VariantList {
13077 Some(Self(ElementList::new(node)))
13078 } else {
13079 None
13080 }
13081 }
13082 fn as_syntax_node(&self) -> SyntaxNode {
13083 self.node.clone()
13084 }
13085 fn stable_ptr(&self) -> Self::StablePtr {
13086 VariantListPtr(self.node.0.stable_ptr)
13087 }
13088}
13089impl From<&VariantList> for SyntaxStablePtrId {
13090 fn from(node: &VariantList) -> Self {
13091 node.stable_ptr().untyped()
13092 }
13093}
13094#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13095pub enum ModuleItem {
13096 Constant(ItemConstant),
13097 Module(ItemModule),
13098 Use(ItemUse),
13099 FreeFunction(FunctionWithBody),
13100 ExternFunction(ItemExternFunction),
13101 ExternType(ItemExternType),
13102 Trait(ItemTrait),
13103 Impl(ItemImpl),
13104 ImplAlias(ItemImplAlias),
13105 Struct(ItemStruct),
13106 Enum(ItemEnum),
13107 TypeAlias(ItemTypeAlias),
13108 InlineMacro(ItemInlineMacro),
13109 HeaderDoc(ItemHeaderDoc),
13110 Missing(ModuleItemMissing),
13111}
13112#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13113pub struct ModuleItemPtr(pub SyntaxStablePtrId);
13114impl TypedStablePtr for ModuleItemPtr {
13115 type SyntaxNode = ModuleItem;
13116 fn untyped(&self) -> SyntaxStablePtrId {
13117 self.0
13118 }
13119 fn lookup(&self, db: &dyn SyntaxGroup) -> ModuleItem {
13120 ModuleItem::from_syntax_node(db, self.0.lookup(db))
13121 }
13122}
13123impl From<ModuleItemPtr> for SyntaxStablePtrId {
13124 fn from(ptr: ModuleItemPtr) -> Self {
13125 ptr.untyped()
13126 }
13127}
13128impl From<ItemConstantPtr> for ModuleItemPtr {
13129 fn from(value: ItemConstantPtr) -> Self {
13130 Self(value.0)
13131 }
13132}
13133impl From<ItemModulePtr> for ModuleItemPtr {
13134 fn from(value: ItemModulePtr) -> Self {
13135 Self(value.0)
13136 }
13137}
13138impl From<ItemUsePtr> for ModuleItemPtr {
13139 fn from(value: ItemUsePtr) -> Self {
13140 Self(value.0)
13141 }
13142}
13143impl From<FunctionWithBodyPtr> for ModuleItemPtr {
13144 fn from(value: FunctionWithBodyPtr) -> Self {
13145 Self(value.0)
13146 }
13147}
13148impl From<ItemExternFunctionPtr> for ModuleItemPtr {
13149 fn from(value: ItemExternFunctionPtr) -> Self {
13150 Self(value.0)
13151 }
13152}
13153impl From<ItemExternTypePtr> for ModuleItemPtr {
13154 fn from(value: ItemExternTypePtr) -> Self {
13155 Self(value.0)
13156 }
13157}
13158impl From<ItemTraitPtr> for ModuleItemPtr {
13159 fn from(value: ItemTraitPtr) -> Self {
13160 Self(value.0)
13161 }
13162}
13163impl From<ItemImplPtr> for ModuleItemPtr {
13164 fn from(value: ItemImplPtr) -> Self {
13165 Self(value.0)
13166 }
13167}
13168impl From<ItemImplAliasPtr> for ModuleItemPtr {
13169 fn from(value: ItemImplAliasPtr) -> Self {
13170 Self(value.0)
13171 }
13172}
13173impl From<ItemStructPtr> for ModuleItemPtr {
13174 fn from(value: ItemStructPtr) -> Self {
13175 Self(value.0)
13176 }
13177}
13178impl From<ItemEnumPtr> for ModuleItemPtr {
13179 fn from(value: ItemEnumPtr) -> Self {
13180 Self(value.0)
13181 }
13182}
13183impl From<ItemTypeAliasPtr> for ModuleItemPtr {
13184 fn from(value: ItemTypeAliasPtr) -> Self {
13185 Self(value.0)
13186 }
13187}
13188impl From<ItemInlineMacroPtr> for ModuleItemPtr {
13189 fn from(value: ItemInlineMacroPtr) -> Self {
13190 Self(value.0)
13191 }
13192}
13193impl From<ItemHeaderDocPtr> for ModuleItemPtr {
13194 fn from(value: ItemHeaderDocPtr) -> Self {
13195 Self(value.0)
13196 }
13197}
13198impl From<ModuleItemMissingPtr> for ModuleItemPtr {
13199 fn from(value: ModuleItemMissingPtr) -> Self {
13200 Self(value.0)
13201 }
13202}
13203impl From<ItemConstantGreen> for ModuleItemGreen {
13204 fn from(value: ItemConstantGreen) -> Self {
13205 Self(value.0)
13206 }
13207}
13208impl From<ItemModuleGreen> for ModuleItemGreen {
13209 fn from(value: ItemModuleGreen) -> Self {
13210 Self(value.0)
13211 }
13212}
13213impl From<ItemUseGreen> for ModuleItemGreen {
13214 fn from(value: ItemUseGreen) -> Self {
13215 Self(value.0)
13216 }
13217}
13218impl From<FunctionWithBodyGreen> for ModuleItemGreen {
13219 fn from(value: FunctionWithBodyGreen) -> Self {
13220 Self(value.0)
13221 }
13222}
13223impl From<ItemExternFunctionGreen> for ModuleItemGreen {
13224 fn from(value: ItemExternFunctionGreen) -> Self {
13225 Self(value.0)
13226 }
13227}
13228impl From<ItemExternTypeGreen> for ModuleItemGreen {
13229 fn from(value: ItemExternTypeGreen) -> Self {
13230 Self(value.0)
13231 }
13232}
13233impl From<ItemTraitGreen> for ModuleItemGreen {
13234 fn from(value: ItemTraitGreen) -> Self {
13235 Self(value.0)
13236 }
13237}
13238impl From<ItemImplGreen> for ModuleItemGreen {
13239 fn from(value: ItemImplGreen) -> Self {
13240 Self(value.0)
13241 }
13242}
13243impl From<ItemImplAliasGreen> for ModuleItemGreen {
13244 fn from(value: ItemImplAliasGreen) -> Self {
13245 Self(value.0)
13246 }
13247}
13248impl From<ItemStructGreen> for ModuleItemGreen {
13249 fn from(value: ItemStructGreen) -> Self {
13250 Self(value.0)
13251 }
13252}
13253impl From<ItemEnumGreen> for ModuleItemGreen {
13254 fn from(value: ItemEnumGreen) -> Self {
13255 Self(value.0)
13256 }
13257}
13258impl From<ItemTypeAliasGreen> for ModuleItemGreen {
13259 fn from(value: ItemTypeAliasGreen) -> Self {
13260 Self(value.0)
13261 }
13262}
13263impl From<ItemInlineMacroGreen> for ModuleItemGreen {
13264 fn from(value: ItemInlineMacroGreen) -> Self {
13265 Self(value.0)
13266 }
13267}
13268impl From<ItemHeaderDocGreen> for ModuleItemGreen {
13269 fn from(value: ItemHeaderDocGreen) -> Self {
13270 Self(value.0)
13271 }
13272}
13273impl From<ModuleItemMissingGreen> for ModuleItemGreen {
13274 fn from(value: ModuleItemMissingGreen) -> Self {
13275 Self(value.0)
13276 }
13277}
13278#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13279pub struct ModuleItemGreen(pub GreenId);
13280impl TypedSyntaxNode for ModuleItem {
13281 const OPTIONAL_KIND: Option<SyntaxKind> = None;
13282 type StablePtr = ModuleItemPtr;
13283 type Green = ModuleItemGreen;
13284 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13285 ModuleItemGreen(ModuleItemMissing::missing(db).0)
13286 }
13287 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13288 let kind = node.kind(db);
13289 match kind {
13290 SyntaxKind::ItemConstant => {
13291 ModuleItem::Constant(ItemConstant::from_syntax_node(db, node))
13292 }
13293 SyntaxKind::ItemModule => ModuleItem::Module(ItemModule::from_syntax_node(db, node)),
13294 SyntaxKind::ItemUse => ModuleItem::Use(ItemUse::from_syntax_node(db, node)),
13295 SyntaxKind::FunctionWithBody => {
13296 ModuleItem::FreeFunction(FunctionWithBody::from_syntax_node(db, node))
13297 }
13298 SyntaxKind::ItemExternFunction => {
13299 ModuleItem::ExternFunction(ItemExternFunction::from_syntax_node(db, node))
13300 }
13301 SyntaxKind::ItemExternType => {
13302 ModuleItem::ExternType(ItemExternType::from_syntax_node(db, node))
13303 }
13304 SyntaxKind::ItemTrait => ModuleItem::Trait(ItemTrait::from_syntax_node(db, node)),
13305 SyntaxKind::ItemImpl => ModuleItem::Impl(ItemImpl::from_syntax_node(db, node)),
13306 SyntaxKind::ItemImplAlias => {
13307 ModuleItem::ImplAlias(ItemImplAlias::from_syntax_node(db, node))
13308 }
13309 SyntaxKind::ItemStruct => ModuleItem::Struct(ItemStruct::from_syntax_node(db, node)),
13310 SyntaxKind::ItemEnum => ModuleItem::Enum(ItemEnum::from_syntax_node(db, node)),
13311 SyntaxKind::ItemTypeAlias => {
13312 ModuleItem::TypeAlias(ItemTypeAlias::from_syntax_node(db, node))
13313 }
13314 SyntaxKind::ItemInlineMacro => {
13315 ModuleItem::InlineMacro(ItemInlineMacro::from_syntax_node(db, node))
13316 }
13317 SyntaxKind::ItemHeaderDoc => {
13318 ModuleItem::HeaderDoc(ItemHeaderDoc::from_syntax_node(db, node))
13319 }
13320 SyntaxKind::ModuleItemMissing => {
13321 ModuleItem::Missing(ModuleItemMissing::from_syntax_node(db, node))
13322 }
13323 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "ModuleItem"),
13324 }
13325 }
13326 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13327 let kind = node.kind(db);
13328 match kind {
13329 SyntaxKind::ItemConstant => {
13330 Some(ModuleItem::Constant(ItemConstant::from_syntax_node(db, node)))
13331 }
13332 SyntaxKind::ItemModule => {
13333 Some(ModuleItem::Module(ItemModule::from_syntax_node(db, node)))
13334 }
13335 SyntaxKind::ItemUse => Some(ModuleItem::Use(ItemUse::from_syntax_node(db, node))),
13336 SyntaxKind::FunctionWithBody => {
13337 Some(ModuleItem::FreeFunction(FunctionWithBody::from_syntax_node(db, node)))
13338 }
13339 SyntaxKind::ItemExternFunction => {
13340 Some(ModuleItem::ExternFunction(ItemExternFunction::from_syntax_node(db, node)))
13341 }
13342 SyntaxKind::ItemExternType => {
13343 Some(ModuleItem::ExternType(ItemExternType::from_syntax_node(db, node)))
13344 }
13345 SyntaxKind::ItemTrait => Some(ModuleItem::Trait(ItemTrait::from_syntax_node(db, node))),
13346 SyntaxKind::ItemImpl => Some(ModuleItem::Impl(ItemImpl::from_syntax_node(db, node))),
13347 SyntaxKind::ItemImplAlias => {
13348 Some(ModuleItem::ImplAlias(ItemImplAlias::from_syntax_node(db, node)))
13349 }
13350 SyntaxKind::ItemStruct => {
13351 Some(ModuleItem::Struct(ItemStruct::from_syntax_node(db, node)))
13352 }
13353 SyntaxKind::ItemEnum => Some(ModuleItem::Enum(ItemEnum::from_syntax_node(db, node))),
13354 SyntaxKind::ItemTypeAlias => {
13355 Some(ModuleItem::TypeAlias(ItemTypeAlias::from_syntax_node(db, node)))
13356 }
13357 SyntaxKind::ItemInlineMacro => {
13358 Some(ModuleItem::InlineMacro(ItemInlineMacro::from_syntax_node(db, node)))
13359 }
13360 SyntaxKind::ItemHeaderDoc => {
13361 Some(ModuleItem::HeaderDoc(ItemHeaderDoc::from_syntax_node(db, node)))
13362 }
13363 SyntaxKind::ModuleItemMissing => {
13364 Some(ModuleItem::Missing(ModuleItemMissing::from_syntax_node(db, node)))
13365 }
13366 _ => None,
13367 }
13368 }
13369 fn as_syntax_node(&self) -> SyntaxNode {
13370 match self {
13371 ModuleItem::Constant(x) => x.as_syntax_node(),
13372 ModuleItem::Module(x) => x.as_syntax_node(),
13373 ModuleItem::Use(x) => x.as_syntax_node(),
13374 ModuleItem::FreeFunction(x) => x.as_syntax_node(),
13375 ModuleItem::ExternFunction(x) => x.as_syntax_node(),
13376 ModuleItem::ExternType(x) => x.as_syntax_node(),
13377 ModuleItem::Trait(x) => x.as_syntax_node(),
13378 ModuleItem::Impl(x) => x.as_syntax_node(),
13379 ModuleItem::ImplAlias(x) => x.as_syntax_node(),
13380 ModuleItem::Struct(x) => x.as_syntax_node(),
13381 ModuleItem::Enum(x) => x.as_syntax_node(),
13382 ModuleItem::TypeAlias(x) => x.as_syntax_node(),
13383 ModuleItem::InlineMacro(x) => x.as_syntax_node(),
13384 ModuleItem::HeaderDoc(x) => x.as_syntax_node(),
13385 ModuleItem::Missing(x) => x.as_syntax_node(),
13386 }
13387 }
13388 fn stable_ptr(&self) -> Self::StablePtr {
13389 ModuleItemPtr(self.as_syntax_node().0.stable_ptr)
13390 }
13391}
13392impl From<&ModuleItem> for SyntaxStablePtrId {
13393 fn from(node: &ModuleItem) -> Self {
13394 node.stable_ptr().untyped()
13395 }
13396}
13397impl ModuleItem {
13398 pub fn is_variant(kind: SyntaxKind) -> bool {
13400 matches!(
13401 kind,
13402 SyntaxKind::ItemConstant
13403 | SyntaxKind::ItemModule
13404 | SyntaxKind::ItemUse
13405 | SyntaxKind::FunctionWithBody
13406 | SyntaxKind::ItemExternFunction
13407 | SyntaxKind::ItemExternType
13408 | SyntaxKind::ItemTrait
13409 | SyntaxKind::ItemImpl
13410 | SyntaxKind::ItemImplAlias
13411 | SyntaxKind::ItemStruct
13412 | SyntaxKind::ItemEnum
13413 | SyntaxKind::ItemTypeAlias
13414 | SyntaxKind::ItemInlineMacro
13415 | SyntaxKind::ItemHeaderDoc
13416 | SyntaxKind::ModuleItemMissing
13417 )
13418 }
13419}
13420#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13421pub struct ModuleItemList(ElementList<ModuleItem, 1>);
13422impl Deref for ModuleItemList {
13423 type Target = ElementList<ModuleItem, 1>;
13424 fn deref(&self) -> &Self::Target {
13425 &self.0
13426 }
13427}
13428impl ModuleItemList {
13429 pub fn new_green(db: &dyn SyntaxGroup, children: Vec<ModuleItemGreen>) -> ModuleItemListGreen {
13430 let width = children.iter().map(|id| id.0.lookup_intern(db).width()).sum();
13431 ModuleItemListGreen(
13432 Arc::new(GreenNode {
13433 kind: SyntaxKind::ModuleItemList,
13434 details: GreenNodeDetails::Node {
13435 children: children.iter().map(|x| x.0).collect(),
13436 width,
13437 },
13438 })
13439 .intern(db),
13440 )
13441 }
13442}
13443#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13444pub struct ModuleItemListPtr(pub SyntaxStablePtrId);
13445impl TypedStablePtr for ModuleItemListPtr {
13446 type SyntaxNode = ModuleItemList;
13447 fn untyped(&self) -> SyntaxStablePtrId {
13448 self.0
13449 }
13450 fn lookup(&self, db: &dyn SyntaxGroup) -> ModuleItemList {
13451 ModuleItemList::from_syntax_node(db, self.0.lookup(db))
13452 }
13453}
13454impl From<ModuleItemListPtr> for SyntaxStablePtrId {
13455 fn from(ptr: ModuleItemListPtr) -> Self {
13456 ptr.untyped()
13457 }
13458}
13459#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13460pub struct ModuleItemListGreen(pub GreenId);
13461impl TypedSyntaxNode for ModuleItemList {
13462 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ModuleItemList);
13463 type StablePtr = ModuleItemListPtr;
13464 type Green = ModuleItemListGreen;
13465 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13466 ModuleItemListGreen(
13467 Arc::new(GreenNode {
13468 kind: SyntaxKind::ModuleItemList,
13469 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
13470 })
13471 .intern(db),
13472 )
13473 }
13474 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13475 Self(ElementList::new(node))
13476 }
13477 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13478 if node.kind(db) == SyntaxKind::ModuleItemList {
13479 Some(Self(ElementList::new(node)))
13480 } else {
13481 None
13482 }
13483 }
13484 fn as_syntax_node(&self) -> SyntaxNode {
13485 self.node.clone()
13486 }
13487 fn stable_ptr(&self) -> Self::StablePtr {
13488 ModuleItemListPtr(self.node.0.stable_ptr)
13489 }
13490}
13491impl From<&ModuleItemList> for SyntaxStablePtrId {
13492 fn from(node: &ModuleItemList) -> Self {
13493 node.stable_ptr().untyped()
13494 }
13495}
13496#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13497pub struct ModuleItemMissing {
13498 node: SyntaxNode,
13499 children: Arc<[SyntaxNode]>,
13500}
13501impl ModuleItemMissing {
13502 pub fn new_green(db: &dyn SyntaxGroup) -> ModuleItemMissingGreen {
13503 let children: Vec<GreenId> = vec![];
13504 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
13505 ModuleItemMissingGreen(
13506 Arc::new(GreenNode {
13507 kind: SyntaxKind::ModuleItemMissing,
13508 details: GreenNodeDetails::Node { children, width },
13509 })
13510 .intern(db),
13511 )
13512 }
13513}
13514impl ModuleItemMissing {}
13515#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13516pub struct ModuleItemMissingPtr(pub SyntaxStablePtrId);
13517impl ModuleItemMissingPtr {}
13518impl TypedStablePtr for ModuleItemMissingPtr {
13519 type SyntaxNode = ModuleItemMissing;
13520 fn untyped(&self) -> SyntaxStablePtrId {
13521 self.0
13522 }
13523 fn lookup(&self, db: &dyn SyntaxGroup) -> ModuleItemMissing {
13524 ModuleItemMissing::from_syntax_node(db, self.0.lookup(db))
13525 }
13526}
13527impl From<ModuleItemMissingPtr> for SyntaxStablePtrId {
13528 fn from(ptr: ModuleItemMissingPtr) -> Self {
13529 ptr.untyped()
13530 }
13531}
13532#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13533pub struct ModuleItemMissingGreen(pub GreenId);
13534impl TypedSyntaxNode for ModuleItemMissing {
13535 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ModuleItemMissing);
13536 type StablePtr = ModuleItemMissingPtr;
13537 type Green = ModuleItemMissingGreen;
13538 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13539 ModuleItemMissingGreen(
13540 Arc::new(GreenNode {
13541 kind: SyntaxKind::ModuleItemMissing,
13542 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
13543 })
13544 .intern(db),
13545 )
13546 }
13547 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13548 let kind = node.kind(db);
13549 assert_eq!(
13550 kind,
13551 SyntaxKind::ModuleItemMissing,
13552 "Unexpected SyntaxKind {:?}. Expected {:?}.",
13553 kind,
13554 SyntaxKind::ModuleItemMissing
13555 );
13556 let children = db.get_children(node.clone());
13557 Self { node, children }
13558 }
13559 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13560 let kind = node.kind(db);
13561 if kind == SyntaxKind::ModuleItemMissing {
13562 Some(Self::from_syntax_node(db, node))
13563 } else {
13564 None
13565 }
13566 }
13567 fn as_syntax_node(&self) -> SyntaxNode {
13568 self.node.clone()
13569 }
13570 fn stable_ptr(&self) -> Self::StablePtr {
13571 ModuleItemMissingPtr(self.node.0.stable_ptr)
13572 }
13573}
13574impl From<&ModuleItemMissing> for SyntaxStablePtrId {
13575 fn from(node: &ModuleItemMissing) -> Self {
13576 node.stable_ptr().untyped()
13577 }
13578}
13579#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13580pub struct Attribute {
13581 node: SyntaxNode,
13582 children: Arc<[SyntaxNode]>,
13583}
13584impl Attribute {
13585 pub const INDEX_HASH: usize = 0;
13586 pub const INDEX_LBRACK: usize = 1;
13587 pub const INDEX_ATTR: usize = 2;
13588 pub const INDEX_ARGUMENTS: usize = 3;
13589 pub const INDEX_RBRACK: usize = 4;
13590 pub fn new_green(
13591 db: &dyn SyntaxGroup,
13592 hash: TerminalHashGreen,
13593 lbrack: TerminalLBrackGreen,
13594 attr: ExprPathGreen,
13595 arguments: OptionArgListParenthesizedGreen,
13596 rbrack: TerminalRBrackGreen,
13597 ) -> AttributeGreen {
13598 let children: Vec<GreenId> = vec![hash.0, lbrack.0, attr.0, arguments.0, rbrack.0];
13599 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
13600 AttributeGreen(
13601 Arc::new(GreenNode {
13602 kind: SyntaxKind::Attribute,
13603 details: GreenNodeDetails::Node { children, width },
13604 })
13605 .intern(db),
13606 )
13607 }
13608}
13609impl Attribute {
13610 pub fn hash(&self, db: &dyn SyntaxGroup) -> TerminalHash {
13611 TerminalHash::from_syntax_node(db, self.children[0].clone())
13612 }
13613 pub fn lbrack(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
13614 TerminalLBrack::from_syntax_node(db, self.children[1].clone())
13615 }
13616 pub fn attr(&self, db: &dyn SyntaxGroup) -> ExprPath {
13617 ExprPath::from_syntax_node(db, self.children[2].clone())
13618 }
13619 pub fn arguments(&self, db: &dyn SyntaxGroup) -> OptionArgListParenthesized {
13620 OptionArgListParenthesized::from_syntax_node(db, self.children[3].clone())
13621 }
13622 pub fn rbrack(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
13623 TerminalRBrack::from_syntax_node(db, self.children[4].clone())
13624 }
13625}
13626#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13627pub struct AttributePtr(pub SyntaxStablePtrId);
13628impl AttributePtr {}
13629impl TypedStablePtr for AttributePtr {
13630 type SyntaxNode = Attribute;
13631 fn untyped(&self) -> SyntaxStablePtrId {
13632 self.0
13633 }
13634 fn lookup(&self, db: &dyn SyntaxGroup) -> Attribute {
13635 Attribute::from_syntax_node(db, self.0.lookup(db))
13636 }
13637}
13638impl From<AttributePtr> for SyntaxStablePtrId {
13639 fn from(ptr: AttributePtr) -> Self {
13640 ptr.untyped()
13641 }
13642}
13643#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13644pub struct AttributeGreen(pub GreenId);
13645impl TypedSyntaxNode for Attribute {
13646 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::Attribute);
13647 type StablePtr = AttributePtr;
13648 type Green = AttributeGreen;
13649 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13650 AttributeGreen(
13651 Arc::new(GreenNode {
13652 kind: SyntaxKind::Attribute,
13653 details: GreenNodeDetails::Node {
13654 children: vec![
13655 TerminalHash::missing(db).0,
13656 TerminalLBrack::missing(db).0,
13657 ExprPath::missing(db).0,
13658 OptionArgListParenthesized::missing(db).0,
13659 TerminalRBrack::missing(db).0,
13660 ],
13661 width: TextWidth::default(),
13662 },
13663 })
13664 .intern(db),
13665 )
13666 }
13667 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13668 let kind = node.kind(db);
13669 assert_eq!(
13670 kind,
13671 SyntaxKind::Attribute,
13672 "Unexpected SyntaxKind {:?}. Expected {:?}.",
13673 kind,
13674 SyntaxKind::Attribute
13675 );
13676 let children = db.get_children(node.clone());
13677 Self { node, children }
13678 }
13679 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13680 let kind = node.kind(db);
13681 if kind == SyntaxKind::Attribute { Some(Self::from_syntax_node(db, node)) } else { None }
13682 }
13683 fn as_syntax_node(&self) -> SyntaxNode {
13684 self.node.clone()
13685 }
13686 fn stable_ptr(&self) -> Self::StablePtr {
13687 AttributePtr(self.node.0.stable_ptr)
13688 }
13689}
13690impl From<&Attribute> for SyntaxStablePtrId {
13691 fn from(node: &Attribute) -> Self {
13692 node.stable_ptr().untyped()
13693 }
13694}
13695#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13696pub struct AttributeList(ElementList<Attribute, 1>);
13697impl Deref for AttributeList {
13698 type Target = ElementList<Attribute, 1>;
13699 fn deref(&self) -> &Self::Target {
13700 &self.0
13701 }
13702}
13703impl AttributeList {
13704 pub fn new_green(db: &dyn SyntaxGroup, children: Vec<AttributeGreen>) -> AttributeListGreen {
13705 let width = children.iter().map(|id| id.0.lookup_intern(db).width()).sum();
13706 AttributeListGreen(
13707 Arc::new(GreenNode {
13708 kind: SyntaxKind::AttributeList,
13709 details: GreenNodeDetails::Node {
13710 children: children.iter().map(|x| x.0).collect(),
13711 width,
13712 },
13713 })
13714 .intern(db),
13715 )
13716 }
13717}
13718#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13719pub struct AttributeListPtr(pub SyntaxStablePtrId);
13720impl TypedStablePtr for AttributeListPtr {
13721 type SyntaxNode = AttributeList;
13722 fn untyped(&self) -> SyntaxStablePtrId {
13723 self.0
13724 }
13725 fn lookup(&self, db: &dyn SyntaxGroup) -> AttributeList {
13726 AttributeList::from_syntax_node(db, self.0.lookup(db))
13727 }
13728}
13729impl From<AttributeListPtr> for SyntaxStablePtrId {
13730 fn from(ptr: AttributeListPtr) -> Self {
13731 ptr.untyped()
13732 }
13733}
13734#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13735pub struct AttributeListGreen(pub GreenId);
13736impl TypedSyntaxNode for AttributeList {
13737 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::AttributeList);
13738 type StablePtr = AttributeListPtr;
13739 type Green = AttributeListGreen;
13740 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13741 AttributeListGreen(
13742 Arc::new(GreenNode {
13743 kind: SyntaxKind::AttributeList,
13744 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
13745 })
13746 .intern(db),
13747 )
13748 }
13749 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13750 Self(ElementList::new(node))
13751 }
13752 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13753 if node.kind(db) == SyntaxKind::AttributeList {
13754 Some(Self(ElementList::new(node)))
13755 } else {
13756 None
13757 }
13758 }
13759 fn as_syntax_node(&self) -> SyntaxNode {
13760 self.node.clone()
13761 }
13762 fn stable_ptr(&self) -> Self::StablePtr {
13763 AttributeListPtr(self.node.0.stable_ptr)
13764 }
13765}
13766impl From<&AttributeList> for SyntaxStablePtrId {
13767 fn from(node: &AttributeList) -> Self {
13768 node.stable_ptr().untyped()
13769 }
13770}
13771#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13772pub struct VisibilityDefault {
13773 node: SyntaxNode,
13774 children: Arc<[SyntaxNode]>,
13775}
13776impl VisibilityDefault {
13777 pub fn new_green(db: &dyn SyntaxGroup) -> VisibilityDefaultGreen {
13778 let children: Vec<GreenId> = vec![];
13779 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
13780 VisibilityDefaultGreen(
13781 Arc::new(GreenNode {
13782 kind: SyntaxKind::VisibilityDefault,
13783 details: GreenNodeDetails::Node { children, width },
13784 })
13785 .intern(db),
13786 )
13787 }
13788}
13789impl VisibilityDefault {}
13790#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13791pub struct VisibilityDefaultPtr(pub SyntaxStablePtrId);
13792impl VisibilityDefaultPtr {}
13793impl TypedStablePtr for VisibilityDefaultPtr {
13794 type SyntaxNode = VisibilityDefault;
13795 fn untyped(&self) -> SyntaxStablePtrId {
13796 self.0
13797 }
13798 fn lookup(&self, db: &dyn SyntaxGroup) -> VisibilityDefault {
13799 VisibilityDefault::from_syntax_node(db, self.0.lookup(db))
13800 }
13801}
13802impl From<VisibilityDefaultPtr> for SyntaxStablePtrId {
13803 fn from(ptr: VisibilityDefaultPtr) -> Self {
13804 ptr.untyped()
13805 }
13806}
13807#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13808pub struct VisibilityDefaultGreen(pub GreenId);
13809impl TypedSyntaxNode for VisibilityDefault {
13810 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::VisibilityDefault);
13811 type StablePtr = VisibilityDefaultPtr;
13812 type Green = VisibilityDefaultGreen;
13813 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13814 VisibilityDefaultGreen(
13815 Arc::new(GreenNode {
13816 kind: SyntaxKind::VisibilityDefault,
13817 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
13818 })
13819 .intern(db),
13820 )
13821 }
13822 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13823 let kind = node.kind(db);
13824 assert_eq!(
13825 kind,
13826 SyntaxKind::VisibilityDefault,
13827 "Unexpected SyntaxKind {:?}. Expected {:?}.",
13828 kind,
13829 SyntaxKind::VisibilityDefault
13830 );
13831 let children = db.get_children(node.clone());
13832 Self { node, children }
13833 }
13834 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13835 let kind = node.kind(db);
13836 if kind == SyntaxKind::VisibilityDefault {
13837 Some(Self::from_syntax_node(db, node))
13838 } else {
13839 None
13840 }
13841 }
13842 fn as_syntax_node(&self) -> SyntaxNode {
13843 self.node.clone()
13844 }
13845 fn stable_ptr(&self) -> Self::StablePtr {
13846 VisibilityDefaultPtr(self.node.0.stable_ptr)
13847 }
13848}
13849impl From<&VisibilityDefault> for SyntaxStablePtrId {
13850 fn from(node: &VisibilityDefault) -> Self {
13851 node.stable_ptr().untyped()
13852 }
13853}
13854#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13855pub struct VisibilityPubArgumentClause {
13856 node: SyntaxNode,
13857 children: Arc<[SyntaxNode]>,
13858}
13859impl VisibilityPubArgumentClause {
13860 pub const INDEX_LPAREN: usize = 0;
13861 pub const INDEX_ARGUMENT: usize = 1;
13862 pub const INDEX_RPAREN: usize = 2;
13863 pub fn new_green(
13864 db: &dyn SyntaxGroup,
13865 lparen: TerminalLParenGreen,
13866 argument: TerminalIdentifierGreen,
13867 rparen: TerminalRParenGreen,
13868 ) -> VisibilityPubArgumentClauseGreen {
13869 let children: Vec<GreenId> = vec![lparen.0, argument.0, rparen.0];
13870 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
13871 VisibilityPubArgumentClauseGreen(
13872 Arc::new(GreenNode {
13873 kind: SyntaxKind::VisibilityPubArgumentClause,
13874 details: GreenNodeDetails::Node { children, width },
13875 })
13876 .intern(db),
13877 )
13878 }
13879}
13880impl VisibilityPubArgumentClause {
13881 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
13882 TerminalLParen::from_syntax_node(db, self.children[0].clone())
13883 }
13884 pub fn argument(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
13885 TerminalIdentifier::from_syntax_node(db, self.children[1].clone())
13886 }
13887 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
13888 TerminalRParen::from_syntax_node(db, self.children[2].clone())
13889 }
13890}
13891#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13892pub struct VisibilityPubArgumentClausePtr(pub SyntaxStablePtrId);
13893impl VisibilityPubArgumentClausePtr {}
13894impl TypedStablePtr for VisibilityPubArgumentClausePtr {
13895 type SyntaxNode = VisibilityPubArgumentClause;
13896 fn untyped(&self) -> SyntaxStablePtrId {
13897 self.0
13898 }
13899 fn lookup(&self, db: &dyn SyntaxGroup) -> VisibilityPubArgumentClause {
13900 VisibilityPubArgumentClause::from_syntax_node(db, self.0.lookup(db))
13901 }
13902}
13903impl From<VisibilityPubArgumentClausePtr> for SyntaxStablePtrId {
13904 fn from(ptr: VisibilityPubArgumentClausePtr) -> Self {
13905 ptr.untyped()
13906 }
13907}
13908#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13909pub struct VisibilityPubArgumentClauseGreen(pub GreenId);
13910impl TypedSyntaxNode for VisibilityPubArgumentClause {
13911 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::VisibilityPubArgumentClause);
13912 type StablePtr = VisibilityPubArgumentClausePtr;
13913 type Green = VisibilityPubArgumentClauseGreen;
13914 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13915 VisibilityPubArgumentClauseGreen(
13916 Arc::new(GreenNode {
13917 kind: SyntaxKind::VisibilityPubArgumentClause,
13918 details: GreenNodeDetails::Node {
13919 children: vec![
13920 TerminalLParen::missing(db).0,
13921 TerminalIdentifier::missing(db).0,
13922 TerminalRParen::missing(db).0,
13923 ],
13924 width: TextWidth::default(),
13925 },
13926 })
13927 .intern(db),
13928 )
13929 }
13930 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13931 let kind = node.kind(db);
13932 assert_eq!(
13933 kind,
13934 SyntaxKind::VisibilityPubArgumentClause,
13935 "Unexpected SyntaxKind {:?}. Expected {:?}.",
13936 kind,
13937 SyntaxKind::VisibilityPubArgumentClause
13938 );
13939 let children = db.get_children(node.clone());
13940 Self { node, children }
13941 }
13942 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13943 let kind = node.kind(db);
13944 if kind == SyntaxKind::VisibilityPubArgumentClause {
13945 Some(Self::from_syntax_node(db, node))
13946 } else {
13947 None
13948 }
13949 }
13950 fn as_syntax_node(&self) -> SyntaxNode {
13951 self.node.clone()
13952 }
13953 fn stable_ptr(&self) -> Self::StablePtr {
13954 VisibilityPubArgumentClausePtr(self.node.0.stable_ptr)
13955 }
13956}
13957impl From<&VisibilityPubArgumentClause> for SyntaxStablePtrId {
13958 fn from(node: &VisibilityPubArgumentClause) -> Self {
13959 node.stable_ptr().untyped()
13960 }
13961}
13962#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13963pub enum OptionVisibilityPubArgumentClause {
13964 Empty(OptionVisibilityPubArgumentClauseEmpty),
13965 VisibilityPubArgumentClause(VisibilityPubArgumentClause),
13966}
13967#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13968pub struct OptionVisibilityPubArgumentClausePtr(pub SyntaxStablePtrId);
13969impl TypedStablePtr for OptionVisibilityPubArgumentClausePtr {
13970 type SyntaxNode = OptionVisibilityPubArgumentClause;
13971 fn untyped(&self) -> SyntaxStablePtrId {
13972 self.0
13973 }
13974 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionVisibilityPubArgumentClause {
13975 OptionVisibilityPubArgumentClause::from_syntax_node(db, self.0.lookup(db))
13976 }
13977}
13978impl From<OptionVisibilityPubArgumentClausePtr> for SyntaxStablePtrId {
13979 fn from(ptr: OptionVisibilityPubArgumentClausePtr) -> Self {
13980 ptr.untyped()
13981 }
13982}
13983impl From<OptionVisibilityPubArgumentClauseEmptyPtr> for OptionVisibilityPubArgumentClausePtr {
13984 fn from(value: OptionVisibilityPubArgumentClauseEmptyPtr) -> Self {
13985 Self(value.0)
13986 }
13987}
13988impl From<VisibilityPubArgumentClausePtr> for OptionVisibilityPubArgumentClausePtr {
13989 fn from(value: VisibilityPubArgumentClausePtr) -> Self {
13990 Self(value.0)
13991 }
13992}
13993impl From<OptionVisibilityPubArgumentClauseEmptyGreen> for OptionVisibilityPubArgumentClauseGreen {
13994 fn from(value: OptionVisibilityPubArgumentClauseEmptyGreen) -> Self {
13995 Self(value.0)
13996 }
13997}
13998impl From<VisibilityPubArgumentClauseGreen> for OptionVisibilityPubArgumentClauseGreen {
13999 fn from(value: VisibilityPubArgumentClauseGreen) -> Self {
14000 Self(value.0)
14001 }
14002}
14003#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14004pub struct OptionVisibilityPubArgumentClauseGreen(pub GreenId);
14005impl TypedSyntaxNode for OptionVisibilityPubArgumentClause {
14006 const OPTIONAL_KIND: Option<SyntaxKind> = None;
14007 type StablePtr = OptionVisibilityPubArgumentClausePtr;
14008 type Green = OptionVisibilityPubArgumentClauseGreen;
14009 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14010 panic!("No missing variant.");
14011 }
14012 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14013 let kind = node.kind(db);
14014 match kind {
14015 SyntaxKind::OptionVisibilityPubArgumentClauseEmpty => {
14016 OptionVisibilityPubArgumentClause::Empty(
14017 OptionVisibilityPubArgumentClauseEmpty::from_syntax_node(db, node),
14018 )
14019 }
14020 SyntaxKind::VisibilityPubArgumentClause => {
14021 OptionVisibilityPubArgumentClause::VisibilityPubArgumentClause(
14022 VisibilityPubArgumentClause::from_syntax_node(db, node),
14023 )
14024 }
14025 _ => panic!(
14026 "Unexpected syntax kind {:?} when constructing {}.",
14027 kind, "OptionVisibilityPubArgumentClause"
14028 ),
14029 }
14030 }
14031 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14032 let kind = node.kind(db);
14033 match kind {
14034 SyntaxKind::OptionVisibilityPubArgumentClauseEmpty => {
14035 Some(OptionVisibilityPubArgumentClause::Empty(
14036 OptionVisibilityPubArgumentClauseEmpty::from_syntax_node(db, node),
14037 ))
14038 }
14039 SyntaxKind::VisibilityPubArgumentClause => {
14040 Some(OptionVisibilityPubArgumentClause::VisibilityPubArgumentClause(
14041 VisibilityPubArgumentClause::from_syntax_node(db, node),
14042 ))
14043 }
14044 _ => None,
14045 }
14046 }
14047 fn as_syntax_node(&self) -> SyntaxNode {
14048 match self {
14049 OptionVisibilityPubArgumentClause::Empty(x) => x.as_syntax_node(),
14050 OptionVisibilityPubArgumentClause::VisibilityPubArgumentClause(x) => x.as_syntax_node(),
14051 }
14052 }
14053 fn stable_ptr(&self) -> Self::StablePtr {
14054 OptionVisibilityPubArgumentClausePtr(self.as_syntax_node().0.stable_ptr)
14055 }
14056}
14057impl From<&OptionVisibilityPubArgumentClause> for SyntaxStablePtrId {
14058 fn from(node: &OptionVisibilityPubArgumentClause) -> Self {
14059 node.stable_ptr().untyped()
14060 }
14061}
14062impl OptionVisibilityPubArgumentClause {
14063 pub fn is_variant(kind: SyntaxKind) -> bool {
14065 matches!(
14066 kind,
14067 SyntaxKind::OptionVisibilityPubArgumentClauseEmpty
14068 | SyntaxKind::VisibilityPubArgumentClause
14069 )
14070 }
14071}
14072#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14073pub struct OptionVisibilityPubArgumentClauseEmpty {
14074 node: SyntaxNode,
14075 children: Arc<[SyntaxNode]>,
14076}
14077impl OptionVisibilityPubArgumentClauseEmpty {
14078 pub fn new_green(db: &dyn SyntaxGroup) -> OptionVisibilityPubArgumentClauseEmptyGreen {
14079 let children: Vec<GreenId> = vec![];
14080 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
14081 OptionVisibilityPubArgumentClauseEmptyGreen(
14082 Arc::new(GreenNode {
14083 kind: SyntaxKind::OptionVisibilityPubArgumentClauseEmpty,
14084 details: GreenNodeDetails::Node { children, width },
14085 })
14086 .intern(db),
14087 )
14088 }
14089}
14090impl OptionVisibilityPubArgumentClauseEmpty {}
14091#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14092pub struct OptionVisibilityPubArgumentClauseEmptyPtr(pub SyntaxStablePtrId);
14093impl OptionVisibilityPubArgumentClauseEmptyPtr {}
14094impl TypedStablePtr for OptionVisibilityPubArgumentClauseEmptyPtr {
14095 type SyntaxNode = OptionVisibilityPubArgumentClauseEmpty;
14096 fn untyped(&self) -> SyntaxStablePtrId {
14097 self.0
14098 }
14099 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionVisibilityPubArgumentClauseEmpty {
14100 OptionVisibilityPubArgumentClauseEmpty::from_syntax_node(db, self.0.lookup(db))
14101 }
14102}
14103impl From<OptionVisibilityPubArgumentClauseEmptyPtr> for SyntaxStablePtrId {
14104 fn from(ptr: OptionVisibilityPubArgumentClauseEmptyPtr) -> Self {
14105 ptr.untyped()
14106 }
14107}
14108#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14109pub struct OptionVisibilityPubArgumentClauseEmptyGreen(pub GreenId);
14110impl TypedSyntaxNode for OptionVisibilityPubArgumentClauseEmpty {
14111 const OPTIONAL_KIND: Option<SyntaxKind> =
14112 Some(SyntaxKind::OptionVisibilityPubArgumentClauseEmpty);
14113 type StablePtr = OptionVisibilityPubArgumentClauseEmptyPtr;
14114 type Green = OptionVisibilityPubArgumentClauseEmptyGreen;
14115 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14116 OptionVisibilityPubArgumentClauseEmptyGreen(
14117 Arc::new(GreenNode {
14118 kind: SyntaxKind::OptionVisibilityPubArgumentClauseEmpty,
14119 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
14120 })
14121 .intern(db),
14122 )
14123 }
14124 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14125 let kind = node.kind(db);
14126 assert_eq!(
14127 kind,
14128 SyntaxKind::OptionVisibilityPubArgumentClauseEmpty,
14129 "Unexpected SyntaxKind {:?}. Expected {:?}.",
14130 kind,
14131 SyntaxKind::OptionVisibilityPubArgumentClauseEmpty
14132 );
14133 let children = db.get_children(node.clone());
14134 Self { node, children }
14135 }
14136 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14137 let kind = node.kind(db);
14138 if kind == SyntaxKind::OptionVisibilityPubArgumentClauseEmpty {
14139 Some(Self::from_syntax_node(db, node))
14140 } else {
14141 None
14142 }
14143 }
14144 fn as_syntax_node(&self) -> SyntaxNode {
14145 self.node.clone()
14146 }
14147 fn stable_ptr(&self) -> Self::StablePtr {
14148 OptionVisibilityPubArgumentClauseEmptyPtr(self.node.0.stable_ptr)
14149 }
14150}
14151impl From<&OptionVisibilityPubArgumentClauseEmpty> for SyntaxStablePtrId {
14152 fn from(node: &OptionVisibilityPubArgumentClauseEmpty) -> Self {
14153 node.stable_ptr().untyped()
14154 }
14155}
14156#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14157pub struct VisibilityPub {
14158 node: SyntaxNode,
14159 children: Arc<[SyntaxNode]>,
14160}
14161impl VisibilityPub {
14162 pub const INDEX_PUB_KW: usize = 0;
14163 pub const INDEX_ARGUMENT_CLAUSE: usize = 1;
14164 pub fn new_green(
14165 db: &dyn SyntaxGroup,
14166 pub_kw: TerminalPubGreen,
14167 argument_clause: OptionVisibilityPubArgumentClauseGreen,
14168 ) -> VisibilityPubGreen {
14169 let children: Vec<GreenId> = vec![pub_kw.0, argument_clause.0];
14170 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
14171 VisibilityPubGreen(
14172 Arc::new(GreenNode {
14173 kind: SyntaxKind::VisibilityPub,
14174 details: GreenNodeDetails::Node { children, width },
14175 })
14176 .intern(db),
14177 )
14178 }
14179}
14180impl VisibilityPub {
14181 pub fn pub_kw(&self, db: &dyn SyntaxGroup) -> TerminalPub {
14182 TerminalPub::from_syntax_node(db, self.children[0].clone())
14183 }
14184 pub fn argument_clause(&self, db: &dyn SyntaxGroup) -> OptionVisibilityPubArgumentClause {
14185 OptionVisibilityPubArgumentClause::from_syntax_node(db, self.children[1].clone())
14186 }
14187}
14188#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14189pub struct VisibilityPubPtr(pub SyntaxStablePtrId);
14190impl VisibilityPubPtr {}
14191impl TypedStablePtr for VisibilityPubPtr {
14192 type SyntaxNode = VisibilityPub;
14193 fn untyped(&self) -> SyntaxStablePtrId {
14194 self.0
14195 }
14196 fn lookup(&self, db: &dyn SyntaxGroup) -> VisibilityPub {
14197 VisibilityPub::from_syntax_node(db, self.0.lookup(db))
14198 }
14199}
14200impl From<VisibilityPubPtr> for SyntaxStablePtrId {
14201 fn from(ptr: VisibilityPubPtr) -> Self {
14202 ptr.untyped()
14203 }
14204}
14205#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14206pub struct VisibilityPubGreen(pub GreenId);
14207impl TypedSyntaxNode for VisibilityPub {
14208 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::VisibilityPub);
14209 type StablePtr = VisibilityPubPtr;
14210 type Green = VisibilityPubGreen;
14211 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14212 VisibilityPubGreen(
14213 Arc::new(GreenNode {
14214 kind: SyntaxKind::VisibilityPub,
14215 details: GreenNodeDetails::Node {
14216 children: vec![
14217 TerminalPub::missing(db).0,
14218 OptionVisibilityPubArgumentClause::missing(db).0,
14219 ],
14220 width: TextWidth::default(),
14221 },
14222 })
14223 .intern(db),
14224 )
14225 }
14226 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14227 let kind = node.kind(db);
14228 assert_eq!(
14229 kind,
14230 SyntaxKind::VisibilityPub,
14231 "Unexpected SyntaxKind {:?}. Expected {:?}.",
14232 kind,
14233 SyntaxKind::VisibilityPub
14234 );
14235 let children = db.get_children(node.clone());
14236 Self { node, children }
14237 }
14238 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14239 let kind = node.kind(db);
14240 if kind == SyntaxKind::VisibilityPub {
14241 Some(Self::from_syntax_node(db, node))
14242 } else {
14243 None
14244 }
14245 }
14246 fn as_syntax_node(&self) -> SyntaxNode {
14247 self.node.clone()
14248 }
14249 fn stable_ptr(&self) -> Self::StablePtr {
14250 VisibilityPubPtr(self.node.0.stable_ptr)
14251 }
14252}
14253impl From<&VisibilityPub> for SyntaxStablePtrId {
14254 fn from(node: &VisibilityPub) -> Self {
14255 node.stable_ptr().untyped()
14256 }
14257}
14258#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14259pub enum Visibility {
14260 Default(VisibilityDefault),
14261 Pub(VisibilityPub),
14262}
14263#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14264pub struct VisibilityPtr(pub SyntaxStablePtrId);
14265impl TypedStablePtr for VisibilityPtr {
14266 type SyntaxNode = Visibility;
14267 fn untyped(&self) -> SyntaxStablePtrId {
14268 self.0
14269 }
14270 fn lookup(&self, db: &dyn SyntaxGroup) -> Visibility {
14271 Visibility::from_syntax_node(db, self.0.lookup(db))
14272 }
14273}
14274impl From<VisibilityPtr> for SyntaxStablePtrId {
14275 fn from(ptr: VisibilityPtr) -> Self {
14276 ptr.untyped()
14277 }
14278}
14279impl From<VisibilityDefaultPtr> for VisibilityPtr {
14280 fn from(value: VisibilityDefaultPtr) -> Self {
14281 Self(value.0)
14282 }
14283}
14284impl From<VisibilityPubPtr> for VisibilityPtr {
14285 fn from(value: VisibilityPubPtr) -> Self {
14286 Self(value.0)
14287 }
14288}
14289impl From<VisibilityDefaultGreen> for VisibilityGreen {
14290 fn from(value: VisibilityDefaultGreen) -> Self {
14291 Self(value.0)
14292 }
14293}
14294impl From<VisibilityPubGreen> for VisibilityGreen {
14295 fn from(value: VisibilityPubGreen) -> Self {
14296 Self(value.0)
14297 }
14298}
14299#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14300pub struct VisibilityGreen(pub GreenId);
14301impl TypedSyntaxNode for Visibility {
14302 const OPTIONAL_KIND: Option<SyntaxKind> = None;
14303 type StablePtr = VisibilityPtr;
14304 type Green = VisibilityGreen;
14305 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14306 panic!("No missing variant.");
14307 }
14308 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14309 let kind = node.kind(db);
14310 match kind {
14311 SyntaxKind::VisibilityDefault => {
14312 Visibility::Default(VisibilityDefault::from_syntax_node(db, node))
14313 }
14314 SyntaxKind::VisibilityPub => Visibility::Pub(VisibilityPub::from_syntax_node(db, node)),
14315 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "Visibility"),
14316 }
14317 }
14318 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14319 let kind = node.kind(db);
14320 match kind {
14321 SyntaxKind::VisibilityDefault => {
14322 Some(Visibility::Default(VisibilityDefault::from_syntax_node(db, node)))
14323 }
14324 SyntaxKind::VisibilityPub => {
14325 Some(Visibility::Pub(VisibilityPub::from_syntax_node(db, node)))
14326 }
14327 _ => None,
14328 }
14329 }
14330 fn as_syntax_node(&self) -> SyntaxNode {
14331 match self {
14332 Visibility::Default(x) => x.as_syntax_node(),
14333 Visibility::Pub(x) => x.as_syntax_node(),
14334 }
14335 }
14336 fn stable_ptr(&self) -> Self::StablePtr {
14337 VisibilityPtr(self.as_syntax_node().0.stable_ptr)
14338 }
14339}
14340impl From<&Visibility> for SyntaxStablePtrId {
14341 fn from(node: &Visibility) -> Self {
14342 node.stable_ptr().untyped()
14343 }
14344}
14345impl Visibility {
14346 pub fn is_variant(kind: SyntaxKind) -> bool {
14348 matches!(kind, SyntaxKind::VisibilityDefault | SyntaxKind::VisibilityPub)
14349 }
14350}
14351#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14352pub struct ItemModule {
14353 node: SyntaxNode,
14354 children: Arc<[SyntaxNode]>,
14355}
14356impl ItemModule {
14357 pub const INDEX_ATTRIBUTES: usize = 0;
14358 pub const INDEX_VISIBILITY: usize = 1;
14359 pub const INDEX_MODULE_KW: usize = 2;
14360 pub const INDEX_NAME: usize = 3;
14361 pub const INDEX_BODY: usize = 4;
14362 pub fn new_green(
14363 db: &dyn SyntaxGroup,
14364 attributes: AttributeListGreen,
14365 visibility: VisibilityGreen,
14366 module_kw: TerminalModuleGreen,
14367 name: TerminalIdentifierGreen,
14368 body: MaybeModuleBodyGreen,
14369 ) -> ItemModuleGreen {
14370 let children: Vec<GreenId> = vec![attributes.0, visibility.0, module_kw.0, name.0, body.0];
14371 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
14372 ItemModuleGreen(
14373 Arc::new(GreenNode {
14374 kind: SyntaxKind::ItemModule,
14375 details: GreenNodeDetails::Node { children, width },
14376 })
14377 .intern(db),
14378 )
14379 }
14380}
14381impl ItemModule {
14382 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
14383 AttributeList::from_syntax_node(db, self.children[0].clone())
14384 }
14385 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
14386 Visibility::from_syntax_node(db, self.children[1].clone())
14387 }
14388 pub fn module_kw(&self, db: &dyn SyntaxGroup) -> TerminalModule {
14389 TerminalModule::from_syntax_node(db, self.children[2].clone())
14390 }
14391 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
14392 TerminalIdentifier::from_syntax_node(db, self.children[3].clone())
14393 }
14394 pub fn body(&self, db: &dyn SyntaxGroup) -> MaybeModuleBody {
14395 MaybeModuleBody::from_syntax_node(db, self.children[4].clone())
14396 }
14397}
14398#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14399pub struct ItemModulePtr(pub SyntaxStablePtrId);
14400impl ItemModulePtr {
14401 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
14402 let ptr = self.0.lookup_intern(db);
14403 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
14404 TerminalIdentifierGreen(key_fields[0])
14405 } else {
14406 panic!("Unexpected key field query on root.");
14407 }
14408 }
14409}
14410impl TypedStablePtr for ItemModulePtr {
14411 type SyntaxNode = ItemModule;
14412 fn untyped(&self) -> SyntaxStablePtrId {
14413 self.0
14414 }
14415 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemModule {
14416 ItemModule::from_syntax_node(db, self.0.lookup(db))
14417 }
14418}
14419impl From<ItemModulePtr> for SyntaxStablePtrId {
14420 fn from(ptr: ItemModulePtr) -> Self {
14421 ptr.untyped()
14422 }
14423}
14424#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14425pub struct ItemModuleGreen(pub GreenId);
14426impl TypedSyntaxNode for ItemModule {
14427 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemModule);
14428 type StablePtr = ItemModulePtr;
14429 type Green = ItemModuleGreen;
14430 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14431 ItemModuleGreen(
14432 Arc::new(GreenNode {
14433 kind: SyntaxKind::ItemModule,
14434 details: GreenNodeDetails::Node {
14435 children: vec![
14436 AttributeList::missing(db).0,
14437 Visibility::missing(db).0,
14438 TerminalModule::missing(db).0,
14439 TerminalIdentifier::missing(db).0,
14440 MaybeModuleBody::missing(db).0,
14441 ],
14442 width: TextWidth::default(),
14443 },
14444 })
14445 .intern(db),
14446 )
14447 }
14448 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14449 let kind = node.kind(db);
14450 assert_eq!(
14451 kind,
14452 SyntaxKind::ItemModule,
14453 "Unexpected SyntaxKind {:?}. Expected {:?}.",
14454 kind,
14455 SyntaxKind::ItemModule
14456 );
14457 let children = db.get_children(node.clone());
14458 Self { node, children }
14459 }
14460 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14461 let kind = node.kind(db);
14462 if kind == SyntaxKind::ItemModule { Some(Self::from_syntax_node(db, node)) } else { None }
14463 }
14464 fn as_syntax_node(&self) -> SyntaxNode {
14465 self.node.clone()
14466 }
14467 fn stable_ptr(&self) -> Self::StablePtr {
14468 ItemModulePtr(self.node.0.stable_ptr)
14469 }
14470}
14471impl From<&ItemModule> for SyntaxStablePtrId {
14472 fn from(node: &ItemModule) -> Self {
14473 node.stable_ptr().untyped()
14474 }
14475}
14476#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14477pub enum MaybeModuleBody {
14478 Some(ModuleBody),
14479 None(TerminalSemicolon),
14480}
14481#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14482pub struct MaybeModuleBodyPtr(pub SyntaxStablePtrId);
14483impl TypedStablePtr for MaybeModuleBodyPtr {
14484 type SyntaxNode = MaybeModuleBody;
14485 fn untyped(&self) -> SyntaxStablePtrId {
14486 self.0
14487 }
14488 fn lookup(&self, db: &dyn SyntaxGroup) -> MaybeModuleBody {
14489 MaybeModuleBody::from_syntax_node(db, self.0.lookup(db))
14490 }
14491}
14492impl From<MaybeModuleBodyPtr> for SyntaxStablePtrId {
14493 fn from(ptr: MaybeModuleBodyPtr) -> Self {
14494 ptr.untyped()
14495 }
14496}
14497impl From<ModuleBodyPtr> for MaybeModuleBodyPtr {
14498 fn from(value: ModuleBodyPtr) -> Self {
14499 Self(value.0)
14500 }
14501}
14502impl From<TerminalSemicolonPtr> for MaybeModuleBodyPtr {
14503 fn from(value: TerminalSemicolonPtr) -> Self {
14504 Self(value.0)
14505 }
14506}
14507impl From<ModuleBodyGreen> for MaybeModuleBodyGreen {
14508 fn from(value: ModuleBodyGreen) -> Self {
14509 Self(value.0)
14510 }
14511}
14512impl From<TerminalSemicolonGreen> for MaybeModuleBodyGreen {
14513 fn from(value: TerminalSemicolonGreen) -> Self {
14514 Self(value.0)
14515 }
14516}
14517#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14518pub struct MaybeModuleBodyGreen(pub GreenId);
14519impl TypedSyntaxNode for MaybeModuleBody {
14520 const OPTIONAL_KIND: Option<SyntaxKind> = None;
14521 type StablePtr = MaybeModuleBodyPtr;
14522 type Green = MaybeModuleBodyGreen;
14523 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14524 panic!("No missing variant.");
14525 }
14526 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14527 let kind = node.kind(db);
14528 match kind {
14529 SyntaxKind::ModuleBody => MaybeModuleBody::Some(ModuleBody::from_syntax_node(db, node)),
14530 SyntaxKind::TerminalSemicolon => {
14531 MaybeModuleBody::None(TerminalSemicolon::from_syntax_node(db, node))
14532 }
14533 _ => {
14534 panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "MaybeModuleBody")
14535 }
14536 }
14537 }
14538 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14539 let kind = node.kind(db);
14540 match kind {
14541 SyntaxKind::ModuleBody => {
14542 Some(MaybeModuleBody::Some(ModuleBody::from_syntax_node(db, node)))
14543 }
14544 SyntaxKind::TerminalSemicolon => {
14545 Some(MaybeModuleBody::None(TerminalSemicolon::from_syntax_node(db, node)))
14546 }
14547 _ => None,
14548 }
14549 }
14550 fn as_syntax_node(&self) -> SyntaxNode {
14551 match self {
14552 MaybeModuleBody::Some(x) => x.as_syntax_node(),
14553 MaybeModuleBody::None(x) => x.as_syntax_node(),
14554 }
14555 }
14556 fn stable_ptr(&self) -> Self::StablePtr {
14557 MaybeModuleBodyPtr(self.as_syntax_node().0.stable_ptr)
14558 }
14559}
14560impl From<&MaybeModuleBody> for SyntaxStablePtrId {
14561 fn from(node: &MaybeModuleBody) -> Self {
14562 node.stable_ptr().untyped()
14563 }
14564}
14565impl MaybeModuleBody {
14566 pub fn is_variant(kind: SyntaxKind) -> bool {
14568 matches!(kind, SyntaxKind::ModuleBody | SyntaxKind::TerminalSemicolon)
14569 }
14570}
14571#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14572pub struct ModuleBody {
14573 node: SyntaxNode,
14574 children: Arc<[SyntaxNode]>,
14575}
14576impl ModuleBody {
14577 pub const INDEX_LBRACE: usize = 0;
14578 pub const INDEX_ITEMS: usize = 1;
14579 pub const INDEX_RBRACE: usize = 2;
14580 pub fn new_green(
14581 db: &dyn SyntaxGroup,
14582 lbrace: TerminalLBraceGreen,
14583 items: ModuleItemListGreen,
14584 rbrace: TerminalRBraceGreen,
14585 ) -> ModuleBodyGreen {
14586 let children: Vec<GreenId> = vec![lbrace.0, items.0, rbrace.0];
14587 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
14588 ModuleBodyGreen(
14589 Arc::new(GreenNode {
14590 kind: SyntaxKind::ModuleBody,
14591 details: GreenNodeDetails::Node { children, width },
14592 })
14593 .intern(db),
14594 )
14595 }
14596}
14597impl ModuleBody {
14598 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
14599 TerminalLBrace::from_syntax_node(db, self.children[0].clone())
14600 }
14601 pub fn items(&self, db: &dyn SyntaxGroup) -> ModuleItemList {
14602 ModuleItemList::from_syntax_node(db, self.children[1].clone())
14603 }
14604 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
14605 TerminalRBrace::from_syntax_node(db, self.children[2].clone())
14606 }
14607}
14608#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14609pub struct ModuleBodyPtr(pub SyntaxStablePtrId);
14610impl ModuleBodyPtr {}
14611impl TypedStablePtr for ModuleBodyPtr {
14612 type SyntaxNode = ModuleBody;
14613 fn untyped(&self) -> SyntaxStablePtrId {
14614 self.0
14615 }
14616 fn lookup(&self, db: &dyn SyntaxGroup) -> ModuleBody {
14617 ModuleBody::from_syntax_node(db, self.0.lookup(db))
14618 }
14619}
14620impl From<ModuleBodyPtr> for SyntaxStablePtrId {
14621 fn from(ptr: ModuleBodyPtr) -> Self {
14622 ptr.untyped()
14623 }
14624}
14625#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14626pub struct ModuleBodyGreen(pub GreenId);
14627impl TypedSyntaxNode for ModuleBody {
14628 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ModuleBody);
14629 type StablePtr = ModuleBodyPtr;
14630 type Green = ModuleBodyGreen;
14631 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14632 ModuleBodyGreen(
14633 Arc::new(GreenNode {
14634 kind: SyntaxKind::ModuleBody,
14635 details: GreenNodeDetails::Node {
14636 children: vec![
14637 TerminalLBrace::missing(db).0,
14638 ModuleItemList::missing(db).0,
14639 TerminalRBrace::missing(db).0,
14640 ],
14641 width: TextWidth::default(),
14642 },
14643 })
14644 .intern(db),
14645 )
14646 }
14647 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14648 let kind = node.kind(db);
14649 assert_eq!(
14650 kind,
14651 SyntaxKind::ModuleBody,
14652 "Unexpected SyntaxKind {:?}. Expected {:?}.",
14653 kind,
14654 SyntaxKind::ModuleBody
14655 );
14656 let children = db.get_children(node.clone());
14657 Self { node, children }
14658 }
14659 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14660 let kind = node.kind(db);
14661 if kind == SyntaxKind::ModuleBody { Some(Self::from_syntax_node(db, node)) } else { None }
14662 }
14663 fn as_syntax_node(&self) -> SyntaxNode {
14664 self.node.clone()
14665 }
14666 fn stable_ptr(&self) -> Self::StablePtr {
14667 ModuleBodyPtr(self.node.0.stable_ptr)
14668 }
14669}
14670impl From<&ModuleBody> for SyntaxStablePtrId {
14671 fn from(node: &ModuleBody) -> Self {
14672 node.stable_ptr().untyped()
14673 }
14674}
14675#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14676pub struct FunctionDeclaration {
14677 node: SyntaxNode,
14678 children: Arc<[SyntaxNode]>,
14679}
14680impl FunctionDeclaration {
14681 pub const INDEX_OPTIONAL_CONST: usize = 0;
14682 pub const INDEX_FUNCTION_KW: usize = 1;
14683 pub const INDEX_NAME: usize = 2;
14684 pub const INDEX_GENERIC_PARAMS: usize = 3;
14685 pub const INDEX_SIGNATURE: usize = 4;
14686 pub fn new_green(
14687 db: &dyn SyntaxGroup,
14688 optional_const: OptionTerminalConstGreen,
14689 function_kw: TerminalFunctionGreen,
14690 name: TerminalIdentifierGreen,
14691 generic_params: OptionWrappedGenericParamListGreen,
14692 signature: FunctionSignatureGreen,
14693 ) -> FunctionDeclarationGreen {
14694 let children: Vec<GreenId> =
14695 vec![optional_const.0, function_kw.0, name.0, generic_params.0, signature.0];
14696 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
14697 FunctionDeclarationGreen(
14698 Arc::new(GreenNode {
14699 kind: SyntaxKind::FunctionDeclaration,
14700 details: GreenNodeDetails::Node { children, width },
14701 })
14702 .intern(db),
14703 )
14704 }
14705}
14706impl FunctionDeclaration {
14707 pub fn optional_const(&self, db: &dyn SyntaxGroup) -> OptionTerminalConst {
14708 OptionTerminalConst::from_syntax_node(db, self.children[0].clone())
14709 }
14710 pub fn function_kw(&self, db: &dyn SyntaxGroup) -> TerminalFunction {
14711 TerminalFunction::from_syntax_node(db, self.children[1].clone())
14712 }
14713 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
14714 TerminalIdentifier::from_syntax_node(db, self.children[2].clone())
14715 }
14716 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
14717 OptionWrappedGenericParamList::from_syntax_node(db, self.children[3].clone())
14718 }
14719 pub fn signature(&self, db: &dyn SyntaxGroup) -> FunctionSignature {
14720 FunctionSignature::from_syntax_node(db, self.children[4].clone())
14721 }
14722}
14723#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14724pub struct FunctionDeclarationPtr(pub SyntaxStablePtrId);
14725impl FunctionDeclarationPtr {
14726 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
14727 let ptr = self.0.lookup_intern(db);
14728 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
14729 TerminalIdentifierGreen(key_fields[0])
14730 } else {
14731 panic!("Unexpected key field query on root.");
14732 }
14733 }
14734}
14735impl TypedStablePtr for FunctionDeclarationPtr {
14736 type SyntaxNode = FunctionDeclaration;
14737 fn untyped(&self) -> SyntaxStablePtrId {
14738 self.0
14739 }
14740 fn lookup(&self, db: &dyn SyntaxGroup) -> FunctionDeclaration {
14741 FunctionDeclaration::from_syntax_node(db, self.0.lookup(db))
14742 }
14743}
14744impl From<FunctionDeclarationPtr> for SyntaxStablePtrId {
14745 fn from(ptr: FunctionDeclarationPtr) -> Self {
14746 ptr.untyped()
14747 }
14748}
14749#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14750pub struct FunctionDeclarationGreen(pub GreenId);
14751impl TypedSyntaxNode for FunctionDeclaration {
14752 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::FunctionDeclaration);
14753 type StablePtr = FunctionDeclarationPtr;
14754 type Green = FunctionDeclarationGreen;
14755 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14756 FunctionDeclarationGreen(
14757 Arc::new(GreenNode {
14758 kind: SyntaxKind::FunctionDeclaration,
14759 details: GreenNodeDetails::Node {
14760 children: vec![
14761 OptionTerminalConst::missing(db).0,
14762 TerminalFunction::missing(db).0,
14763 TerminalIdentifier::missing(db).0,
14764 OptionWrappedGenericParamList::missing(db).0,
14765 FunctionSignature::missing(db).0,
14766 ],
14767 width: TextWidth::default(),
14768 },
14769 })
14770 .intern(db),
14771 )
14772 }
14773 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14774 let kind = node.kind(db);
14775 assert_eq!(
14776 kind,
14777 SyntaxKind::FunctionDeclaration,
14778 "Unexpected SyntaxKind {:?}. Expected {:?}.",
14779 kind,
14780 SyntaxKind::FunctionDeclaration
14781 );
14782 let children = db.get_children(node.clone());
14783 Self { node, children }
14784 }
14785 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14786 let kind = node.kind(db);
14787 if kind == SyntaxKind::FunctionDeclaration {
14788 Some(Self::from_syntax_node(db, node))
14789 } else {
14790 None
14791 }
14792 }
14793 fn as_syntax_node(&self) -> SyntaxNode {
14794 self.node.clone()
14795 }
14796 fn stable_ptr(&self) -> Self::StablePtr {
14797 FunctionDeclarationPtr(self.node.0.stable_ptr)
14798 }
14799}
14800impl From<&FunctionDeclaration> for SyntaxStablePtrId {
14801 fn from(node: &FunctionDeclaration) -> Self {
14802 node.stable_ptr().untyped()
14803 }
14804}
14805#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14806pub struct ItemConstant {
14807 node: SyntaxNode,
14808 children: Arc<[SyntaxNode]>,
14809}
14810impl ItemConstant {
14811 pub const INDEX_ATTRIBUTES: usize = 0;
14812 pub const INDEX_VISIBILITY: usize = 1;
14813 pub const INDEX_CONST_KW: usize = 2;
14814 pub const INDEX_NAME: usize = 3;
14815 pub const INDEX_TYPE_CLAUSE: usize = 4;
14816 pub const INDEX_EQ: usize = 5;
14817 pub const INDEX_VALUE: usize = 6;
14818 pub const INDEX_SEMICOLON: usize = 7;
14819 pub fn new_green(
14820 db: &dyn SyntaxGroup,
14821 attributes: AttributeListGreen,
14822 visibility: VisibilityGreen,
14823 const_kw: TerminalConstGreen,
14824 name: TerminalIdentifierGreen,
14825 type_clause: TypeClauseGreen,
14826 eq: TerminalEqGreen,
14827 value: ExprGreen,
14828 semicolon: TerminalSemicolonGreen,
14829 ) -> ItemConstantGreen {
14830 let children: Vec<GreenId> = vec![
14831 attributes.0,
14832 visibility.0,
14833 const_kw.0,
14834 name.0,
14835 type_clause.0,
14836 eq.0,
14837 value.0,
14838 semicolon.0,
14839 ];
14840 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
14841 ItemConstantGreen(
14842 Arc::new(GreenNode {
14843 kind: SyntaxKind::ItemConstant,
14844 details: GreenNodeDetails::Node { children, width },
14845 })
14846 .intern(db),
14847 )
14848 }
14849}
14850impl ItemConstant {
14851 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
14852 AttributeList::from_syntax_node(db, self.children[0].clone())
14853 }
14854 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
14855 Visibility::from_syntax_node(db, self.children[1].clone())
14856 }
14857 pub fn const_kw(&self, db: &dyn SyntaxGroup) -> TerminalConst {
14858 TerminalConst::from_syntax_node(db, self.children[2].clone())
14859 }
14860 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
14861 TerminalIdentifier::from_syntax_node(db, self.children[3].clone())
14862 }
14863 pub fn type_clause(&self, db: &dyn SyntaxGroup) -> TypeClause {
14864 TypeClause::from_syntax_node(db, self.children[4].clone())
14865 }
14866 pub fn eq(&self, db: &dyn SyntaxGroup) -> TerminalEq {
14867 TerminalEq::from_syntax_node(db, self.children[5].clone())
14868 }
14869 pub fn value(&self, db: &dyn SyntaxGroup) -> Expr {
14870 Expr::from_syntax_node(db, self.children[6].clone())
14871 }
14872 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
14873 TerminalSemicolon::from_syntax_node(db, self.children[7].clone())
14874 }
14875}
14876#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14877pub struct ItemConstantPtr(pub SyntaxStablePtrId);
14878impl ItemConstantPtr {
14879 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
14880 let ptr = self.0.lookup_intern(db);
14881 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
14882 TerminalIdentifierGreen(key_fields[0])
14883 } else {
14884 panic!("Unexpected key field query on root.");
14885 }
14886 }
14887}
14888impl TypedStablePtr for ItemConstantPtr {
14889 type SyntaxNode = ItemConstant;
14890 fn untyped(&self) -> SyntaxStablePtrId {
14891 self.0
14892 }
14893 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemConstant {
14894 ItemConstant::from_syntax_node(db, self.0.lookup(db))
14895 }
14896}
14897impl From<ItemConstantPtr> for SyntaxStablePtrId {
14898 fn from(ptr: ItemConstantPtr) -> Self {
14899 ptr.untyped()
14900 }
14901}
14902#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14903pub struct ItemConstantGreen(pub GreenId);
14904impl TypedSyntaxNode for ItemConstant {
14905 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemConstant);
14906 type StablePtr = ItemConstantPtr;
14907 type Green = ItemConstantGreen;
14908 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14909 ItemConstantGreen(
14910 Arc::new(GreenNode {
14911 kind: SyntaxKind::ItemConstant,
14912 details: GreenNodeDetails::Node {
14913 children: vec![
14914 AttributeList::missing(db).0,
14915 Visibility::missing(db).0,
14916 TerminalConst::missing(db).0,
14917 TerminalIdentifier::missing(db).0,
14918 TypeClause::missing(db).0,
14919 TerminalEq::missing(db).0,
14920 Expr::missing(db).0,
14921 TerminalSemicolon::missing(db).0,
14922 ],
14923 width: TextWidth::default(),
14924 },
14925 })
14926 .intern(db),
14927 )
14928 }
14929 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14930 let kind = node.kind(db);
14931 assert_eq!(
14932 kind,
14933 SyntaxKind::ItemConstant,
14934 "Unexpected SyntaxKind {:?}. Expected {:?}.",
14935 kind,
14936 SyntaxKind::ItemConstant
14937 );
14938 let children = db.get_children(node.clone());
14939 Self { node, children }
14940 }
14941 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14942 let kind = node.kind(db);
14943 if kind == SyntaxKind::ItemConstant { Some(Self::from_syntax_node(db, node)) } else { None }
14944 }
14945 fn as_syntax_node(&self) -> SyntaxNode {
14946 self.node.clone()
14947 }
14948 fn stable_ptr(&self) -> Self::StablePtr {
14949 ItemConstantPtr(self.node.0.stable_ptr)
14950 }
14951}
14952impl From<&ItemConstant> for SyntaxStablePtrId {
14953 fn from(node: &ItemConstant) -> Self {
14954 node.stable_ptr().untyped()
14955 }
14956}
14957#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14958pub struct FunctionWithBody {
14959 node: SyntaxNode,
14960 children: Arc<[SyntaxNode]>,
14961}
14962impl FunctionWithBody {
14963 pub const INDEX_ATTRIBUTES: usize = 0;
14964 pub const INDEX_VISIBILITY: usize = 1;
14965 pub const INDEX_DECLARATION: usize = 2;
14966 pub const INDEX_BODY: usize = 3;
14967 pub fn new_green(
14968 db: &dyn SyntaxGroup,
14969 attributes: AttributeListGreen,
14970 visibility: VisibilityGreen,
14971 declaration: FunctionDeclarationGreen,
14972 body: ExprBlockGreen,
14973 ) -> FunctionWithBodyGreen {
14974 let children: Vec<GreenId> = vec![attributes.0, visibility.0, declaration.0, body.0];
14975 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
14976 FunctionWithBodyGreen(
14977 Arc::new(GreenNode {
14978 kind: SyntaxKind::FunctionWithBody,
14979 details: GreenNodeDetails::Node { children, width },
14980 })
14981 .intern(db),
14982 )
14983 }
14984}
14985impl FunctionWithBody {
14986 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
14987 AttributeList::from_syntax_node(db, self.children[0].clone())
14988 }
14989 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
14990 Visibility::from_syntax_node(db, self.children[1].clone())
14991 }
14992 pub fn declaration(&self, db: &dyn SyntaxGroup) -> FunctionDeclaration {
14993 FunctionDeclaration::from_syntax_node(db, self.children[2].clone())
14994 }
14995 pub fn body(&self, db: &dyn SyntaxGroup) -> ExprBlock {
14996 ExprBlock::from_syntax_node(db, self.children[3].clone())
14997 }
14998}
14999#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15000pub struct FunctionWithBodyPtr(pub SyntaxStablePtrId);
15001impl FunctionWithBodyPtr {
15002 pub fn declaration_green(self, db: &dyn SyntaxGroup) -> FunctionDeclarationGreen {
15003 let ptr = self.0.lookup_intern(db);
15004 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
15005 FunctionDeclarationGreen(key_fields[0])
15006 } else {
15007 panic!("Unexpected key field query on root.");
15008 }
15009 }
15010}
15011impl TypedStablePtr for FunctionWithBodyPtr {
15012 type SyntaxNode = FunctionWithBody;
15013 fn untyped(&self) -> SyntaxStablePtrId {
15014 self.0
15015 }
15016 fn lookup(&self, db: &dyn SyntaxGroup) -> FunctionWithBody {
15017 FunctionWithBody::from_syntax_node(db, self.0.lookup(db))
15018 }
15019}
15020impl From<FunctionWithBodyPtr> for SyntaxStablePtrId {
15021 fn from(ptr: FunctionWithBodyPtr) -> Self {
15022 ptr.untyped()
15023 }
15024}
15025#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15026pub struct FunctionWithBodyGreen(pub GreenId);
15027impl TypedSyntaxNode for FunctionWithBody {
15028 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::FunctionWithBody);
15029 type StablePtr = FunctionWithBodyPtr;
15030 type Green = FunctionWithBodyGreen;
15031 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15032 FunctionWithBodyGreen(
15033 Arc::new(GreenNode {
15034 kind: SyntaxKind::FunctionWithBody,
15035 details: GreenNodeDetails::Node {
15036 children: vec![
15037 AttributeList::missing(db).0,
15038 Visibility::missing(db).0,
15039 FunctionDeclaration::missing(db).0,
15040 ExprBlock::missing(db).0,
15041 ],
15042 width: TextWidth::default(),
15043 },
15044 })
15045 .intern(db),
15046 )
15047 }
15048 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15049 let kind = node.kind(db);
15050 assert_eq!(
15051 kind,
15052 SyntaxKind::FunctionWithBody,
15053 "Unexpected SyntaxKind {:?}. Expected {:?}.",
15054 kind,
15055 SyntaxKind::FunctionWithBody
15056 );
15057 let children = db.get_children(node.clone());
15058 Self { node, children }
15059 }
15060 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15061 let kind = node.kind(db);
15062 if kind == SyntaxKind::FunctionWithBody {
15063 Some(Self::from_syntax_node(db, node))
15064 } else {
15065 None
15066 }
15067 }
15068 fn as_syntax_node(&self) -> SyntaxNode {
15069 self.node.clone()
15070 }
15071 fn stable_ptr(&self) -> Self::StablePtr {
15072 FunctionWithBodyPtr(self.node.0.stable_ptr)
15073 }
15074}
15075impl From<&FunctionWithBody> for SyntaxStablePtrId {
15076 fn from(node: &FunctionWithBody) -> Self {
15077 node.stable_ptr().untyped()
15078 }
15079}
15080#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15081pub struct ItemExternFunction {
15082 node: SyntaxNode,
15083 children: Arc<[SyntaxNode]>,
15084}
15085impl ItemExternFunction {
15086 pub const INDEX_ATTRIBUTES: usize = 0;
15087 pub const INDEX_VISIBILITY: usize = 1;
15088 pub const INDEX_EXTERN_KW: usize = 2;
15089 pub const INDEX_DECLARATION: usize = 3;
15090 pub const INDEX_SEMICOLON: usize = 4;
15091 pub fn new_green(
15092 db: &dyn SyntaxGroup,
15093 attributes: AttributeListGreen,
15094 visibility: VisibilityGreen,
15095 extern_kw: TerminalExternGreen,
15096 declaration: FunctionDeclarationGreen,
15097 semicolon: TerminalSemicolonGreen,
15098 ) -> ItemExternFunctionGreen {
15099 let children: Vec<GreenId> =
15100 vec![attributes.0, visibility.0, extern_kw.0, declaration.0, semicolon.0];
15101 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
15102 ItemExternFunctionGreen(
15103 Arc::new(GreenNode {
15104 kind: SyntaxKind::ItemExternFunction,
15105 details: GreenNodeDetails::Node { children, width },
15106 })
15107 .intern(db),
15108 )
15109 }
15110}
15111impl ItemExternFunction {
15112 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
15113 AttributeList::from_syntax_node(db, self.children[0].clone())
15114 }
15115 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
15116 Visibility::from_syntax_node(db, self.children[1].clone())
15117 }
15118 pub fn extern_kw(&self, db: &dyn SyntaxGroup) -> TerminalExtern {
15119 TerminalExtern::from_syntax_node(db, self.children[2].clone())
15120 }
15121 pub fn declaration(&self, db: &dyn SyntaxGroup) -> FunctionDeclaration {
15122 FunctionDeclaration::from_syntax_node(db, self.children[3].clone())
15123 }
15124 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
15125 TerminalSemicolon::from_syntax_node(db, self.children[4].clone())
15126 }
15127}
15128#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15129pub struct ItemExternFunctionPtr(pub SyntaxStablePtrId);
15130impl ItemExternFunctionPtr {
15131 pub fn declaration_green(self, db: &dyn SyntaxGroup) -> FunctionDeclarationGreen {
15132 let ptr = self.0.lookup_intern(db);
15133 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
15134 FunctionDeclarationGreen(key_fields[0])
15135 } else {
15136 panic!("Unexpected key field query on root.");
15137 }
15138 }
15139}
15140impl TypedStablePtr for ItemExternFunctionPtr {
15141 type SyntaxNode = ItemExternFunction;
15142 fn untyped(&self) -> SyntaxStablePtrId {
15143 self.0
15144 }
15145 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemExternFunction {
15146 ItemExternFunction::from_syntax_node(db, self.0.lookup(db))
15147 }
15148}
15149impl From<ItemExternFunctionPtr> for SyntaxStablePtrId {
15150 fn from(ptr: ItemExternFunctionPtr) -> Self {
15151 ptr.untyped()
15152 }
15153}
15154#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15155pub struct ItemExternFunctionGreen(pub GreenId);
15156impl TypedSyntaxNode for ItemExternFunction {
15157 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemExternFunction);
15158 type StablePtr = ItemExternFunctionPtr;
15159 type Green = ItemExternFunctionGreen;
15160 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15161 ItemExternFunctionGreen(
15162 Arc::new(GreenNode {
15163 kind: SyntaxKind::ItemExternFunction,
15164 details: GreenNodeDetails::Node {
15165 children: vec![
15166 AttributeList::missing(db).0,
15167 Visibility::missing(db).0,
15168 TerminalExtern::missing(db).0,
15169 FunctionDeclaration::missing(db).0,
15170 TerminalSemicolon::missing(db).0,
15171 ],
15172 width: TextWidth::default(),
15173 },
15174 })
15175 .intern(db),
15176 )
15177 }
15178 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15179 let kind = node.kind(db);
15180 assert_eq!(
15181 kind,
15182 SyntaxKind::ItemExternFunction,
15183 "Unexpected SyntaxKind {:?}. Expected {:?}.",
15184 kind,
15185 SyntaxKind::ItemExternFunction
15186 );
15187 let children = db.get_children(node.clone());
15188 Self { node, children }
15189 }
15190 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15191 let kind = node.kind(db);
15192 if kind == SyntaxKind::ItemExternFunction {
15193 Some(Self::from_syntax_node(db, node))
15194 } else {
15195 None
15196 }
15197 }
15198 fn as_syntax_node(&self) -> SyntaxNode {
15199 self.node.clone()
15200 }
15201 fn stable_ptr(&self) -> Self::StablePtr {
15202 ItemExternFunctionPtr(self.node.0.stable_ptr)
15203 }
15204}
15205impl From<&ItemExternFunction> for SyntaxStablePtrId {
15206 fn from(node: &ItemExternFunction) -> Self {
15207 node.stable_ptr().untyped()
15208 }
15209}
15210#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15211pub struct ItemExternType {
15212 node: SyntaxNode,
15213 children: Arc<[SyntaxNode]>,
15214}
15215impl ItemExternType {
15216 pub const INDEX_ATTRIBUTES: usize = 0;
15217 pub const INDEX_VISIBILITY: usize = 1;
15218 pub const INDEX_EXTERN_KW: usize = 2;
15219 pub const INDEX_TYPE_KW: usize = 3;
15220 pub const INDEX_NAME: usize = 4;
15221 pub const INDEX_GENERIC_PARAMS: usize = 5;
15222 pub const INDEX_SEMICOLON: usize = 6;
15223 pub fn new_green(
15224 db: &dyn SyntaxGroup,
15225 attributes: AttributeListGreen,
15226 visibility: VisibilityGreen,
15227 extern_kw: TerminalExternGreen,
15228 type_kw: TerminalTypeGreen,
15229 name: TerminalIdentifierGreen,
15230 generic_params: OptionWrappedGenericParamListGreen,
15231 semicolon: TerminalSemicolonGreen,
15232 ) -> ItemExternTypeGreen {
15233 let children: Vec<GreenId> = vec![
15234 attributes.0,
15235 visibility.0,
15236 extern_kw.0,
15237 type_kw.0,
15238 name.0,
15239 generic_params.0,
15240 semicolon.0,
15241 ];
15242 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
15243 ItemExternTypeGreen(
15244 Arc::new(GreenNode {
15245 kind: SyntaxKind::ItemExternType,
15246 details: GreenNodeDetails::Node { children, width },
15247 })
15248 .intern(db),
15249 )
15250 }
15251}
15252impl ItemExternType {
15253 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
15254 AttributeList::from_syntax_node(db, self.children[0].clone())
15255 }
15256 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
15257 Visibility::from_syntax_node(db, self.children[1].clone())
15258 }
15259 pub fn extern_kw(&self, db: &dyn SyntaxGroup) -> TerminalExtern {
15260 TerminalExtern::from_syntax_node(db, self.children[2].clone())
15261 }
15262 pub fn type_kw(&self, db: &dyn SyntaxGroup) -> TerminalType {
15263 TerminalType::from_syntax_node(db, self.children[3].clone())
15264 }
15265 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
15266 TerminalIdentifier::from_syntax_node(db, self.children[4].clone())
15267 }
15268 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
15269 OptionWrappedGenericParamList::from_syntax_node(db, self.children[5].clone())
15270 }
15271 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
15272 TerminalSemicolon::from_syntax_node(db, self.children[6].clone())
15273 }
15274}
15275#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15276pub struct ItemExternTypePtr(pub SyntaxStablePtrId);
15277impl ItemExternTypePtr {
15278 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
15279 let ptr = self.0.lookup_intern(db);
15280 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
15281 TerminalIdentifierGreen(key_fields[0])
15282 } else {
15283 panic!("Unexpected key field query on root.");
15284 }
15285 }
15286}
15287impl TypedStablePtr for ItemExternTypePtr {
15288 type SyntaxNode = ItemExternType;
15289 fn untyped(&self) -> SyntaxStablePtrId {
15290 self.0
15291 }
15292 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemExternType {
15293 ItemExternType::from_syntax_node(db, self.0.lookup(db))
15294 }
15295}
15296impl From<ItemExternTypePtr> for SyntaxStablePtrId {
15297 fn from(ptr: ItemExternTypePtr) -> Self {
15298 ptr.untyped()
15299 }
15300}
15301#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15302pub struct ItemExternTypeGreen(pub GreenId);
15303impl TypedSyntaxNode for ItemExternType {
15304 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemExternType);
15305 type StablePtr = ItemExternTypePtr;
15306 type Green = ItemExternTypeGreen;
15307 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15308 ItemExternTypeGreen(
15309 Arc::new(GreenNode {
15310 kind: SyntaxKind::ItemExternType,
15311 details: GreenNodeDetails::Node {
15312 children: vec![
15313 AttributeList::missing(db).0,
15314 Visibility::missing(db).0,
15315 TerminalExtern::missing(db).0,
15316 TerminalType::missing(db).0,
15317 TerminalIdentifier::missing(db).0,
15318 OptionWrappedGenericParamList::missing(db).0,
15319 TerminalSemicolon::missing(db).0,
15320 ],
15321 width: TextWidth::default(),
15322 },
15323 })
15324 .intern(db),
15325 )
15326 }
15327 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15328 let kind = node.kind(db);
15329 assert_eq!(
15330 kind,
15331 SyntaxKind::ItemExternType,
15332 "Unexpected SyntaxKind {:?}. Expected {:?}.",
15333 kind,
15334 SyntaxKind::ItemExternType
15335 );
15336 let children = db.get_children(node.clone());
15337 Self { node, children }
15338 }
15339 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15340 let kind = node.kind(db);
15341 if kind == SyntaxKind::ItemExternType {
15342 Some(Self::from_syntax_node(db, node))
15343 } else {
15344 None
15345 }
15346 }
15347 fn as_syntax_node(&self) -> SyntaxNode {
15348 self.node.clone()
15349 }
15350 fn stable_ptr(&self) -> Self::StablePtr {
15351 ItemExternTypePtr(self.node.0.stable_ptr)
15352 }
15353}
15354impl From<&ItemExternType> for SyntaxStablePtrId {
15355 fn from(node: &ItemExternType) -> Self {
15356 node.stable_ptr().untyped()
15357 }
15358}
15359#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15360pub struct ItemTrait {
15361 node: SyntaxNode,
15362 children: Arc<[SyntaxNode]>,
15363}
15364impl ItemTrait {
15365 pub const INDEX_ATTRIBUTES: usize = 0;
15366 pub const INDEX_VISIBILITY: usize = 1;
15367 pub const INDEX_TRAIT_KW: usize = 2;
15368 pub const INDEX_NAME: usize = 3;
15369 pub const INDEX_GENERIC_PARAMS: usize = 4;
15370 pub const INDEX_BODY: usize = 5;
15371 pub fn new_green(
15372 db: &dyn SyntaxGroup,
15373 attributes: AttributeListGreen,
15374 visibility: VisibilityGreen,
15375 trait_kw: TerminalTraitGreen,
15376 name: TerminalIdentifierGreen,
15377 generic_params: OptionWrappedGenericParamListGreen,
15378 body: MaybeTraitBodyGreen,
15379 ) -> ItemTraitGreen {
15380 let children: Vec<GreenId> =
15381 vec![attributes.0, visibility.0, trait_kw.0, name.0, generic_params.0, body.0];
15382 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
15383 ItemTraitGreen(
15384 Arc::new(GreenNode {
15385 kind: SyntaxKind::ItemTrait,
15386 details: GreenNodeDetails::Node { children, width },
15387 })
15388 .intern(db),
15389 )
15390 }
15391}
15392impl ItemTrait {
15393 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
15394 AttributeList::from_syntax_node(db, self.children[0].clone())
15395 }
15396 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
15397 Visibility::from_syntax_node(db, self.children[1].clone())
15398 }
15399 pub fn trait_kw(&self, db: &dyn SyntaxGroup) -> TerminalTrait {
15400 TerminalTrait::from_syntax_node(db, self.children[2].clone())
15401 }
15402 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
15403 TerminalIdentifier::from_syntax_node(db, self.children[3].clone())
15404 }
15405 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
15406 OptionWrappedGenericParamList::from_syntax_node(db, self.children[4].clone())
15407 }
15408 pub fn body(&self, db: &dyn SyntaxGroup) -> MaybeTraitBody {
15409 MaybeTraitBody::from_syntax_node(db, self.children[5].clone())
15410 }
15411}
15412#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15413pub struct ItemTraitPtr(pub SyntaxStablePtrId);
15414impl ItemTraitPtr {
15415 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
15416 let ptr = self.0.lookup_intern(db);
15417 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
15418 TerminalIdentifierGreen(key_fields[0])
15419 } else {
15420 panic!("Unexpected key field query on root.");
15421 }
15422 }
15423}
15424impl TypedStablePtr for ItemTraitPtr {
15425 type SyntaxNode = ItemTrait;
15426 fn untyped(&self) -> SyntaxStablePtrId {
15427 self.0
15428 }
15429 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemTrait {
15430 ItemTrait::from_syntax_node(db, self.0.lookup(db))
15431 }
15432}
15433impl From<ItemTraitPtr> for SyntaxStablePtrId {
15434 fn from(ptr: ItemTraitPtr) -> Self {
15435 ptr.untyped()
15436 }
15437}
15438#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15439pub struct ItemTraitGreen(pub GreenId);
15440impl TypedSyntaxNode for ItemTrait {
15441 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemTrait);
15442 type StablePtr = ItemTraitPtr;
15443 type Green = ItemTraitGreen;
15444 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15445 ItemTraitGreen(
15446 Arc::new(GreenNode {
15447 kind: SyntaxKind::ItemTrait,
15448 details: GreenNodeDetails::Node {
15449 children: vec![
15450 AttributeList::missing(db).0,
15451 Visibility::missing(db).0,
15452 TerminalTrait::missing(db).0,
15453 TerminalIdentifier::missing(db).0,
15454 OptionWrappedGenericParamList::missing(db).0,
15455 MaybeTraitBody::missing(db).0,
15456 ],
15457 width: TextWidth::default(),
15458 },
15459 })
15460 .intern(db),
15461 )
15462 }
15463 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15464 let kind = node.kind(db);
15465 assert_eq!(
15466 kind,
15467 SyntaxKind::ItemTrait,
15468 "Unexpected SyntaxKind {:?}. Expected {:?}.",
15469 kind,
15470 SyntaxKind::ItemTrait
15471 );
15472 let children = db.get_children(node.clone());
15473 Self { node, children }
15474 }
15475 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15476 let kind = node.kind(db);
15477 if kind == SyntaxKind::ItemTrait { Some(Self::from_syntax_node(db, node)) } else { None }
15478 }
15479 fn as_syntax_node(&self) -> SyntaxNode {
15480 self.node.clone()
15481 }
15482 fn stable_ptr(&self) -> Self::StablePtr {
15483 ItemTraitPtr(self.node.0.stable_ptr)
15484 }
15485}
15486impl From<&ItemTrait> for SyntaxStablePtrId {
15487 fn from(node: &ItemTrait) -> Self {
15488 node.stable_ptr().untyped()
15489 }
15490}
15491#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15492pub enum MaybeTraitBody {
15493 Some(TraitBody),
15494 None(TerminalSemicolon),
15495}
15496#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15497pub struct MaybeTraitBodyPtr(pub SyntaxStablePtrId);
15498impl TypedStablePtr for MaybeTraitBodyPtr {
15499 type SyntaxNode = MaybeTraitBody;
15500 fn untyped(&self) -> SyntaxStablePtrId {
15501 self.0
15502 }
15503 fn lookup(&self, db: &dyn SyntaxGroup) -> MaybeTraitBody {
15504 MaybeTraitBody::from_syntax_node(db, self.0.lookup(db))
15505 }
15506}
15507impl From<MaybeTraitBodyPtr> for SyntaxStablePtrId {
15508 fn from(ptr: MaybeTraitBodyPtr) -> Self {
15509 ptr.untyped()
15510 }
15511}
15512impl From<TraitBodyPtr> for MaybeTraitBodyPtr {
15513 fn from(value: TraitBodyPtr) -> Self {
15514 Self(value.0)
15515 }
15516}
15517impl From<TerminalSemicolonPtr> for MaybeTraitBodyPtr {
15518 fn from(value: TerminalSemicolonPtr) -> Self {
15519 Self(value.0)
15520 }
15521}
15522impl From<TraitBodyGreen> for MaybeTraitBodyGreen {
15523 fn from(value: TraitBodyGreen) -> Self {
15524 Self(value.0)
15525 }
15526}
15527impl From<TerminalSemicolonGreen> for MaybeTraitBodyGreen {
15528 fn from(value: TerminalSemicolonGreen) -> Self {
15529 Self(value.0)
15530 }
15531}
15532#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15533pub struct MaybeTraitBodyGreen(pub GreenId);
15534impl TypedSyntaxNode for MaybeTraitBody {
15535 const OPTIONAL_KIND: Option<SyntaxKind> = None;
15536 type StablePtr = MaybeTraitBodyPtr;
15537 type Green = MaybeTraitBodyGreen;
15538 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15539 panic!("No missing variant.");
15540 }
15541 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15542 let kind = node.kind(db);
15543 match kind {
15544 SyntaxKind::TraitBody => MaybeTraitBody::Some(TraitBody::from_syntax_node(db, node)),
15545 SyntaxKind::TerminalSemicolon => {
15546 MaybeTraitBody::None(TerminalSemicolon::from_syntax_node(db, node))
15547 }
15548 _ => {
15549 panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "MaybeTraitBody")
15550 }
15551 }
15552 }
15553 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15554 let kind = node.kind(db);
15555 match kind {
15556 SyntaxKind::TraitBody => {
15557 Some(MaybeTraitBody::Some(TraitBody::from_syntax_node(db, node)))
15558 }
15559 SyntaxKind::TerminalSemicolon => {
15560 Some(MaybeTraitBody::None(TerminalSemicolon::from_syntax_node(db, node)))
15561 }
15562 _ => None,
15563 }
15564 }
15565 fn as_syntax_node(&self) -> SyntaxNode {
15566 match self {
15567 MaybeTraitBody::Some(x) => x.as_syntax_node(),
15568 MaybeTraitBody::None(x) => x.as_syntax_node(),
15569 }
15570 }
15571 fn stable_ptr(&self) -> Self::StablePtr {
15572 MaybeTraitBodyPtr(self.as_syntax_node().0.stable_ptr)
15573 }
15574}
15575impl From<&MaybeTraitBody> for SyntaxStablePtrId {
15576 fn from(node: &MaybeTraitBody) -> Self {
15577 node.stable_ptr().untyped()
15578 }
15579}
15580impl MaybeTraitBody {
15581 pub fn is_variant(kind: SyntaxKind) -> bool {
15583 matches!(kind, SyntaxKind::TraitBody | SyntaxKind::TerminalSemicolon)
15584 }
15585}
15586#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15587pub struct TraitBody {
15588 node: SyntaxNode,
15589 children: Arc<[SyntaxNode]>,
15590}
15591impl TraitBody {
15592 pub const INDEX_LBRACE: usize = 0;
15593 pub const INDEX_ITEMS: usize = 1;
15594 pub const INDEX_RBRACE: usize = 2;
15595 pub fn new_green(
15596 db: &dyn SyntaxGroup,
15597 lbrace: TerminalLBraceGreen,
15598 items: TraitItemListGreen,
15599 rbrace: TerminalRBraceGreen,
15600 ) -> TraitBodyGreen {
15601 let children: Vec<GreenId> = vec![lbrace.0, items.0, rbrace.0];
15602 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
15603 TraitBodyGreen(
15604 Arc::new(GreenNode {
15605 kind: SyntaxKind::TraitBody,
15606 details: GreenNodeDetails::Node { children, width },
15607 })
15608 .intern(db),
15609 )
15610 }
15611}
15612impl TraitBody {
15613 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
15614 TerminalLBrace::from_syntax_node(db, self.children[0].clone())
15615 }
15616 pub fn items(&self, db: &dyn SyntaxGroup) -> TraitItemList {
15617 TraitItemList::from_syntax_node(db, self.children[1].clone())
15618 }
15619 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
15620 TerminalRBrace::from_syntax_node(db, self.children[2].clone())
15621 }
15622}
15623#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15624pub struct TraitBodyPtr(pub SyntaxStablePtrId);
15625impl TraitBodyPtr {}
15626impl TypedStablePtr for TraitBodyPtr {
15627 type SyntaxNode = TraitBody;
15628 fn untyped(&self) -> SyntaxStablePtrId {
15629 self.0
15630 }
15631 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitBody {
15632 TraitBody::from_syntax_node(db, self.0.lookup(db))
15633 }
15634}
15635impl From<TraitBodyPtr> for SyntaxStablePtrId {
15636 fn from(ptr: TraitBodyPtr) -> Self {
15637 ptr.untyped()
15638 }
15639}
15640#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15641pub struct TraitBodyGreen(pub GreenId);
15642impl TypedSyntaxNode for TraitBody {
15643 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TraitBody);
15644 type StablePtr = TraitBodyPtr;
15645 type Green = TraitBodyGreen;
15646 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15647 TraitBodyGreen(
15648 Arc::new(GreenNode {
15649 kind: SyntaxKind::TraitBody,
15650 details: GreenNodeDetails::Node {
15651 children: vec![
15652 TerminalLBrace::missing(db).0,
15653 TraitItemList::missing(db).0,
15654 TerminalRBrace::missing(db).0,
15655 ],
15656 width: TextWidth::default(),
15657 },
15658 })
15659 .intern(db),
15660 )
15661 }
15662 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15663 let kind = node.kind(db);
15664 assert_eq!(
15665 kind,
15666 SyntaxKind::TraitBody,
15667 "Unexpected SyntaxKind {:?}. Expected {:?}.",
15668 kind,
15669 SyntaxKind::TraitBody
15670 );
15671 let children = db.get_children(node.clone());
15672 Self { node, children }
15673 }
15674 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15675 let kind = node.kind(db);
15676 if kind == SyntaxKind::TraitBody { Some(Self::from_syntax_node(db, node)) } else { None }
15677 }
15678 fn as_syntax_node(&self) -> SyntaxNode {
15679 self.node.clone()
15680 }
15681 fn stable_ptr(&self) -> Self::StablePtr {
15682 TraitBodyPtr(self.node.0.stable_ptr)
15683 }
15684}
15685impl From<&TraitBody> for SyntaxStablePtrId {
15686 fn from(node: &TraitBody) -> Self {
15687 node.stable_ptr().untyped()
15688 }
15689}
15690#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15691pub struct TraitItemList(ElementList<TraitItem, 1>);
15692impl Deref for TraitItemList {
15693 type Target = ElementList<TraitItem, 1>;
15694 fn deref(&self) -> &Self::Target {
15695 &self.0
15696 }
15697}
15698impl TraitItemList {
15699 pub fn new_green(db: &dyn SyntaxGroup, children: Vec<TraitItemGreen>) -> TraitItemListGreen {
15700 let width = children.iter().map(|id| id.0.lookup_intern(db).width()).sum();
15701 TraitItemListGreen(
15702 Arc::new(GreenNode {
15703 kind: SyntaxKind::TraitItemList,
15704 details: GreenNodeDetails::Node {
15705 children: children.iter().map(|x| x.0).collect(),
15706 width,
15707 },
15708 })
15709 .intern(db),
15710 )
15711 }
15712}
15713#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15714pub struct TraitItemListPtr(pub SyntaxStablePtrId);
15715impl TypedStablePtr for TraitItemListPtr {
15716 type SyntaxNode = TraitItemList;
15717 fn untyped(&self) -> SyntaxStablePtrId {
15718 self.0
15719 }
15720 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitItemList {
15721 TraitItemList::from_syntax_node(db, self.0.lookup(db))
15722 }
15723}
15724impl From<TraitItemListPtr> for SyntaxStablePtrId {
15725 fn from(ptr: TraitItemListPtr) -> Self {
15726 ptr.untyped()
15727 }
15728}
15729#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15730pub struct TraitItemListGreen(pub GreenId);
15731impl TypedSyntaxNode for TraitItemList {
15732 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TraitItemList);
15733 type StablePtr = TraitItemListPtr;
15734 type Green = TraitItemListGreen;
15735 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15736 TraitItemListGreen(
15737 Arc::new(GreenNode {
15738 kind: SyntaxKind::TraitItemList,
15739 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
15740 })
15741 .intern(db),
15742 )
15743 }
15744 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15745 Self(ElementList::new(node))
15746 }
15747 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15748 if node.kind(db) == SyntaxKind::TraitItemList {
15749 Some(Self(ElementList::new(node)))
15750 } else {
15751 None
15752 }
15753 }
15754 fn as_syntax_node(&self) -> SyntaxNode {
15755 self.node.clone()
15756 }
15757 fn stable_ptr(&self) -> Self::StablePtr {
15758 TraitItemListPtr(self.node.0.stable_ptr)
15759 }
15760}
15761impl From<&TraitItemList> for SyntaxStablePtrId {
15762 fn from(node: &TraitItemList) -> Self {
15763 node.stable_ptr().untyped()
15764 }
15765}
15766#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15767pub enum TraitItem {
15768 Function(TraitItemFunction),
15769 Type(TraitItemType),
15770 Constant(TraitItemConstant),
15771 Impl(TraitItemImpl),
15772 Missing(TraitItemMissing),
15773}
15774#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15775pub struct TraitItemPtr(pub SyntaxStablePtrId);
15776impl TypedStablePtr for TraitItemPtr {
15777 type SyntaxNode = TraitItem;
15778 fn untyped(&self) -> SyntaxStablePtrId {
15779 self.0
15780 }
15781 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitItem {
15782 TraitItem::from_syntax_node(db, self.0.lookup(db))
15783 }
15784}
15785impl From<TraitItemPtr> for SyntaxStablePtrId {
15786 fn from(ptr: TraitItemPtr) -> Self {
15787 ptr.untyped()
15788 }
15789}
15790impl From<TraitItemFunctionPtr> for TraitItemPtr {
15791 fn from(value: TraitItemFunctionPtr) -> Self {
15792 Self(value.0)
15793 }
15794}
15795impl From<TraitItemTypePtr> for TraitItemPtr {
15796 fn from(value: TraitItemTypePtr) -> Self {
15797 Self(value.0)
15798 }
15799}
15800impl From<TraitItemConstantPtr> for TraitItemPtr {
15801 fn from(value: TraitItemConstantPtr) -> Self {
15802 Self(value.0)
15803 }
15804}
15805impl From<TraitItemImplPtr> for TraitItemPtr {
15806 fn from(value: TraitItemImplPtr) -> Self {
15807 Self(value.0)
15808 }
15809}
15810impl From<TraitItemMissingPtr> for TraitItemPtr {
15811 fn from(value: TraitItemMissingPtr) -> Self {
15812 Self(value.0)
15813 }
15814}
15815impl From<TraitItemFunctionGreen> for TraitItemGreen {
15816 fn from(value: TraitItemFunctionGreen) -> Self {
15817 Self(value.0)
15818 }
15819}
15820impl From<TraitItemTypeGreen> for TraitItemGreen {
15821 fn from(value: TraitItemTypeGreen) -> Self {
15822 Self(value.0)
15823 }
15824}
15825impl From<TraitItemConstantGreen> for TraitItemGreen {
15826 fn from(value: TraitItemConstantGreen) -> Self {
15827 Self(value.0)
15828 }
15829}
15830impl From<TraitItemImplGreen> for TraitItemGreen {
15831 fn from(value: TraitItemImplGreen) -> Self {
15832 Self(value.0)
15833 }
15834}
15835impl From<TraitItemMissingGreen> for TraitItemGreen {
15836 fn from(value: TraitItemMissingGreen) -> Self {
15837 Self(value.0)
15838 }
15839}
15840#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15841pub struct TraitItemGreen(pub GreenId);
15842impl TypedSyntaxNode for TraitItem {
15843 const OPTIONAL_KIND: Option<SyntaxKind> = None;
15844 type StablePtr = TraitItemPtr;
15845 type Green = TraitItemGreen;
15846 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15847 TraitItemGreen(TraitItemMissing::missing(db).0)
15848 }
15849 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15850 let kind = node.kind(db);
15851 match kind {
15852 SyntaxKind::TraitItemFunction => {
15853 TraitItem::Function(TraitItemFunction::from_syntax_node(db, node))
15854 }
15855 SyntaxKind::TraitItemType => TraitItem::Type(TraitItemType::from_syntax_node(db, node)),
15856 SyntaxKind::TraitItemConstant => {
15857 TraitItem::Constant(TraitItemConstant::from_syntax_node(db, node))
15858 }
15859 SyntaxKind::TraitItemImpl => TraitItem::Impl(TraitItemImpl::from_syntax_node(db, node)),
15860 SyntaxKind::TraitItemMissing => {
15861 TraitItem::Missing(TraitItemMissing::from_syntax_node(db, node))
15862 }
15863 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "TraitItem"),
15864 }
15865 }
15866 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15867 let kind = node.kind(db);
15868 match kind {
15869 SyntaxKind::TraitItemFunction => {
15870 Some(TraitItem::Function(TraitItemFunction::from_syntax_node(db, node)))
15871 }
15872 SyntaxKind::TraitItemType => {
15873 Some(TraitItem::Type(TraitItemType::from_syntax_node(db, node)))
15874 }
15875 SyntaxKind::TraitItemConstant => {
15876 Some(TraitItem::Constant(TraitItemConstant::from_syntax_node(db, node)))
15877 }
15878 SyntaxKind::TraitItemImpl => {
15879 Some(TraitItem::Impl(TraitItemImpl::from_syntax_node(db, node)))
15880 }
15881 SyntaxKind::TraitItemMissing => {
15882 Some(TraitItem::Missing(TraitItemMissing::from_syntax_node(db, node)))
15883 }
15884 _ => None,
15885 }
15886 }
15887 fn as_syntax_node(&self) -> SyntaxNode {
15888 match self {
15889 TraitItem::Function(x) => x.as_syntax_node(),
15890 TraitItem::Type(x) => x.as_syntax_node(),
15891 TraitItem::Constant(x) => x.as_syntax_node(),
15892 TraitItem::Impl(x) => x.as_syntax_node(),
15893 TraitItem::Missing(x) => x.as_syntax_node(),
15894 }
15895 }
15896 fn stable_ptr(&self) -> Self::StablePtr {
15897 TraitItemPtr(self.as_syntax_node().0.stable_ptr)
15898 }
15899}
15900impl From<&TraitItem> for SyntaxStablePtrId {
15901 fn from(node: &TraitItem) -> Self {
15902 node.stable_ptr().untyped()
15903 }
15904}
15905impl TraitItem {
15906 pub fn is_variant(kind: SyntaxKind) -> bool {
15908 matches!(
15909 kind,
15910 SyntaxKind::TraitItemFunction
15911 | SyntaxKind::TraitItemType
15912 | SyntaxKind::TraitItemConstant
15913 | SyntaxKind::TraitItemImpl
15914 | SyntaxKind::TraitItemMissing
15915 )
15916 }
15917}
15918#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15919pub struct TraitItemMissing {
15920 node: SyntaxNode,
15921 children: Arc<[SyntaxNode]>,
15922}
15923impl TraitItemMissing {
15924 pub fn new_green(db: &dyn SyntaxGroup) -> TraitItemMissingGreen {
15925 let children: Vec<GreenId> = vec![];
15926 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
15927 TraitItemMissingGreen(
15928 Arc::new(GreenNode {
15929 kind: SyntaxKind::TraitItemMissing,
15930 details: GreenNodeDetails::Node { children, width },
15931 })
15932 .intern(db),
15933 )
15934 }
15935}
15936impl TraitItemMissing {}
15937#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15938pub struct TraitItemMissingPtr(pub SyntaxStablePtrId);
15939impl TraitItemMissingPtr {}
15940impl TypedStablePtr for TraitItemMissingPtr {
15941 type SyntaxNode = TraitItemMissing;
15942 fn untyped(&self) -> SyntaxStablePtrId {
15943 self.0
15944 }
15945 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitItemMissing {
15946 TraitItemMissing::from_syntax_node(db, self.0.lookup(db))
15947 }
15948}
15949impl From<TraitItemMissingPtr> for SyntaxStablePtrId {
15950 fn from(ptr: TraitItemMissingPtr) -> Self {
15951 ptr.untyped()
15952 }
15953}
15954#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15955pub struct TraitItemMissingGreen(pub GreenId);
15956impl TypedSyntaxNode for TraitItemMissing {
15957 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TraitItemMissing);
15958 type StablePtr = TraitItemMissingPtr;
15959 type Green = TraitItemMissingGreen;
15960 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15961 TraitItemMissingGreen(
15962 Arc::new(GreenNode {
15963 kind: SyntaxKind::TraitItemMissing,
15964 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
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::TraitItemMissing,
15974 "Unexpected SyntaxKind {:?}. Expected {:?}.",
15975 kind,
15976 SyntaxKind::TraitItemMissing
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::TraitItemMissing {
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 TraitItemMissingPtr(self.node.0.stable_ptr)
15994 }
15995}
15996impl From<&TraitItemMissing> for SyntaxStablePtrId {
15997 fn from(node: &TraitItemMissing) -> Self {
15998 node.stable_ptr().untyped()
15999 }
16000}
16001#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16002pub struct TraitItemFunction {
16003 node: SyntaxNode,
16004 children: Arc<[SyntaxNode]>,
16005}
16006impl TraitItemFunction {
16007 pub const INDEX_ATTRIBUTES: usize = 0;
16008 pub const INDEX_DECLARATION: usize = 1;
16009 pub const INDEX_BODY: usize = 2;
16010 pub fn new_green(
16011 db: &dyn SyntaxGroup,
16012 attributes: AttributeListGreen,
16013 declaration: FunctionDeclarationGreen,
16014 body: MaybeTraitFunctionBodyGreen,
16015 ) -> TraitItemFunctionGreen {
16016 let children: Vec<GreenId> = vec![attributes.0, declaration.0, body.0];
16017 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
16018 TraitItemFunctionGreen(
16019 Arc::new(GreenNode {
16020 kind: SyntaxKind::TraitItemFunction,
16021 details: GreenNodeDetails::Node { children, width },
16022 })
16023 .intern(db),
16024 )
16025 }
16026}
16027impl TraitItemFunction {
16028 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
16029 AttributeList::from_syntax_node(db, self.children[0].clone())
16030 }
16031 pub fn declaration(&self, db: &dyn SyntaxGroup) -> FunctionDeclaration {
16032 FunctionDeclaration::from_syntax_node(db, self.children[1].clone())
16033 }
16034 pub fn body(&self, db: &dyn SyntaxGroup) -> MaybeTraitFunctionBody {
16035 MaybeTraitFunctionBody::from_syntax_node(db, self.children[2].clone())
16036 }
16037}
16038#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16039pub struct TraitItemFunctionPtr(pub SyntaxStablePtrId);
16040impl TraitItemFunctionPtr {
16041 pub fn declaration_green(self, db: &dyn SyntaxGroup) -> FunctionDeclarationGreen {
16042 let ptr = self.0.lookup_intern(db);
16043 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
16044 FunctionDeclarationGreen(key_fields[0])
16045 } else {
16046 panic!("Unexpected key field query on root.");
16047 }
16048 }
16049}
16050impl TypedStablePtr for TraitItemFunctionPtr {
16051 type SyntaxNode = TraitItemFunction;
16052 fn untyped(&self) -> SyntaxStablePtrId {
16053 self.0
16054 }
16055 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitItemFunction {
16056 TraitItemFunction::from_syntax_node(db, self.0.lookup(db))
16057 }
16058}
16059impl From<TraitItemFunctionPtr> for SyntaxStablePtrId {
16060 fn from(ptr: TraitItemFunctionPtr) -> Self {
16061 ptr.untyped()
16062 }
16063}
16064#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16065pub struct TraitItemFunctionGreen(pub GreenId);
16066impl TypedSyntaxNode for TraitItemFunction {
16067 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TraitItemFunction);
16068 type StablePtr = TraitItemFunctionPtr;
16069 type Green = TraitItemFunctionGreen;
16070 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16071 TraitItemFunctionGreen(
16072 Arc::new(GreenNode {
16073 kind: SyntaxKind::TraitItemFunction,
16074 details: GreenNodeDetails::Node {
16075 children: vec![
16076 AttributeList::missing(db).0,
16077 FunctionDeclaration::missing(db).0,
16078 MaybeTraitFunctionBody::missing(db).0,
16079 ],
16080 width: TextWidth::default(),
16081 },
16082 })
16083 .intern(db),
16084 )
16085 }
16086 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16087 let kind = node.kind(db);
16088 assert_eq!(
16089 kind,
16090 SyntaxKind::TraitItemFunction,
16091 "Unexpected SyntaxKind {:?}. Expected {:?}.",
16092 kind,
16093 SyntaxKind::TraitItemFunction
16094 );
16095 let children = db.get_children(node.clone());
16096 Self { node, children }
16097 }
16098 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16099 let kind = node.kind(db);
16100 if kind == SyntaxKind::TraitItemFunction {
16101 Some(Self::from_syntax_node(db, node))
16102 } else {
16103 None
16104 }
16105 }
16106 fn as_syntax_node(&self) -> SyntaxNode {
16107 self.node.clone()
16108 }
16109 fn stable_ptr(&self) -> Self::StablePtr {
16110 TraitItemFunctionPtr(self.node.0.stable_ptr)
16111 }
16112}
16113impl From<&TraitItemFunction> for SyntaxStablePtrId {
16114 fn from(node: &TraitItemFunction) -> Self {
16115 node.stable_ptr().untyped()
16116 }
16117}
16118#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16119pub struct TraitItemType {
16120 node: SyntaxNode,
16121 children: Arc<[SyntaxNode]>,
16122}
16123impl TraitItemType {
16124 pub const INDEX_ATTRIBUTES: usize = 0;
16125 pub const INDEX_TYPE_KW: usize = 1;
16126 pub const INDEX_NAME: usize = 2;
16127 pub const INDEX_GENERIC_PARAMS: usize = 3;
16128 pub const INDEX_SEMICOLON: usize = 4;
16129 pub fn new_green(
16130 db: &dyn SyntaxGroup,
16131 attributes: AttributeListGreen,
16132 type_kw: TerminalTypeGreen,
16133 name: TerminalIdentifierGreen,
16134 generic_params: OptionWrappedGenericParamListGreen,
16135 semicolon: TerminalSemicolonGreen,
16136 ) -> TraitItemTypeGreen {
16137 let children: Vec<GreenId> =
16138 vec![attributes.0, type_kw.0, name.0, generic_params.0, semicolon.0];
16139 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
16140 TraitItemTypeGreen(
16141 Arc::new(GreenNode {
16142 kind: SyntaxKind::TraitItemType,
16143 details: GreenNodeDetails::Node { children, width },
16144 })
16145 .intern(db),
16146 )
16147 }
16148}
16149impl TraitItemType {
16150 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
16151 AttributeList::from_syntax_node(db, self.children[0].clone())
16152 }
16153 pub fn type_kw(&self, db: &dyn SyntaxGroup) -> TerminalType {
16154 TerminalType::from_syntax_node(db, self.children[1].clone())
16155 }
16156 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
16157 TerminalIdentifier::from_syntax_node(db, self.children[2].clone())
16158 }
16159 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
16160 OptionWrappedGenericParamList::from_syntax_node(db, self.children[3].clone())
16161 }
16162 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
16163 TerminalSemicolon::from_syntax_node(db, self.children[4].clone())
16164 }
16165}
16166#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16167pub struct TraitItemTypePtr(pub SyntaxStablePtrId);
16168impl TraitItemTypePtr {
16169 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
16170 let ptr = self.0.lookup_intern(db);
16171 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
16172 TerminalIdentifierGreen(key_fields[0])
16173 } else {
16174 panic!("Unexpected key field query on root.");
16175 }
16176 }
16177}
16178impl TypedStablePtr for TraitItemTypePtr {
16179 type SyntaxNode = TraitItemType;
16180 fn untyped(&self) -> SyntaxStablePtrId {
16181 self.0
16182 }
16183 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitItemType {
16184 TraitItemType::from_syntax_node(db, self.0.lookup(db))
16185 }
16186}
16187impl From<TraitItemTypePtr> for SyntaxStablePtrId {
16188 fn from(ptr: TraitItemTypePtr) -> Self {
16189 ptr.untyped()
16190 }
16191}
16192#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16193pub struct TraitItemTypeGreen(pub GreenId);
16194impl TypedSyntaxNode for TraitItemType {
16195 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TraitItemType);
16196 type StablePtr = TraitItemTypePtr;
16197 type Green = TraitItemTypeGreen;
16198 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16199 TraitItemTypeGreen(
16200 Arc::new(GreenNode {
16201 kind: SyntaxKind::TraitItemType,
16202 details: GreenNodeDetails::Node {
16203 children: vec![
16204 AttributeList::missing(db).0,
16205 TerminalType::missing(db).0,
16206 TerminalIdentifier::missing(db).0,
16207 OptionWrappedGenericParamList::missing(db).0,
16208 TerminalSemicolon::missing(db).0,
16209 ],
16210 width: TextWidth::default(),
16211 },
16212 })
16213 .intern(db),
16214 )
16215 }
16216 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16217 let kind = node.kind(db);
16218 assert_eq!(
16219 kind,
16220 SyntaxKind::TraitItemType,
16221 "Unexpected SyntaxKind {:?}. Expected {:?}.",
16222 kind,
16223 SyntaxKind::TraitItemType
16224 );
16225 let children = db.get_children(node.clone());
16226 Self { node, children }
16227 }
16228 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16229 let kind = node.kind(db);
16230 if kind == SyntaxKind::TraitItemType {
16231 Some(Self::from_syntax_node(db, node))
16232 } else {
16233 None
16234 }
16235 }
16236 fn as_syntax_node(&self) -> SyntaxNode {
16237 self.node.clone()
16238 }
16239 fn stable_ptr(&self) -> Self::StablePtr {
16240 TraitItemTypePtr(self.node.0.stable_ptr)
16241 }
16242}
16243impl From<&TraitItemType> for SyntaxStablePtrId {
16244 fn from(node: &TraitItemType) -> Self {
16245 node.stable_ptr().untyped()
16246 }
16247}
16248#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16249pub struct TraitItemConstant {
16250 node: SyntaxNode,
16251 children: Arc<[SyntaxNode]>,
16252}
16253impl TraitItemConstant {
16254 pub const INDEX_ATTRIBUTES: usize = 0;
16255 pub const INDEX_CONST_KW: usize = 1;
16256 pub const INDEX_NAME: usize = 2;
16257 pub const INDEX_TYPE_CLAUSE: usize = 3;
16258 pub const INDEX_SEMICOLON: usize = 4;
16259 pub fn new_green(
16260 db: &dyn SyntaxGroup,
16261 attributes: AttributeListGreen,
16262 const_kw: TerminalConstGreen,
16263 name: TerminalIdentifierGreen,
16264 type_clause: TypeClauseGreen,
16265 semicolon: TerminalSemicolonGreen,
16266 ) -> TraitItemConstantGreen {
16267 let children: Vec<GreenId> =
16268 vec![attributes.0, const_kw.0, name.0, type_clause.0, semicolon.0];
16269 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
16270 TraitItemConstantGreen(
16271 Arc::new(GreenNode {
16272 kind: SyntaxKind::TraitItemConstant,
16273 details: GreenNodeDetails::Node { children, width },
16274 })
16275 .intern(db),
16276 )
16277 }
16278}
16279impl TraitItemConstant {
16280 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
16281 AttributeList::from_syntax_node(db, self.children[0].clone())
16282 }
16283 pub fn const_kw(&self, db: &dyn SyntaxGroup) -> TerminalConst {
16284 TerminalConst::from_syntax_node(db, self.children[1].clone())
16285 }
16286 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
16287 TerminalIdentifier::from_syntax_node(db, self.children[2].clone())
16288 }
16289 pub fn type_clause(&self, db: &dyn SyntaxGroup) -> TypeClause {
16290 TypeClause::from_syntax_node(db, self.children[3].clone())
16291 }
16292 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
16293 TerminalSemicolon::from_syntax_node(db, self.children[4].clone())
16294 }
16295}
16296#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16297pub struct TraitItemConstantPtr(pub SyntaxStablePtrId);
16298impl TraitItemConstantPtr {
16299 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
16300 let ptr = self.0.lookup_intern(db);
16301 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
16302 TerminalIdentifierGreen(key_fields[0])
16303 } else {
16304 panic!("Unexpected key field query on root.");
16305 }
16306 }
16307}
16308impl TypedStablePtr for TraitItemConstantPtr {
16309 type SyntaxNode = TraitItemConstant;
16310 fn untyped(&self) -> SyntaxStablePtrId {
16311 self.0
16312 }
16313 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitItemConstant {
16314 TraitItemConstant::from_syntax_node(db, self.0.lookup(db))
16315 }
16316}
16317impl From<TraitItemConstantPtr> for SyntaxStablePtrId {
16318 fn from(ptr: TraitItemConstantPtr) -> Self {
16319 ptr.untyped()
16320 }
16321}
16322#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16323pub struct TraitItemConstantGreen(pub GreenId);
16324impl TypedSyntaxNode for TraitItemConstant {
16325 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TraitItemConstant);
16326 type StablePtr = TraitItemConstantPtr;
16327 type Green = TraitItemConstantGreen;
16328 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16329 TraitItemConstantGreen(
16330 Arc::new(GreenNode {
16331 kind: SyntaxKind::TraitItemConstant,
16332 details: GreenNodeDetails::Node {
16333 children: vec![
16334 AttributeList::missing(db).0,
16335 TerminalConst::missing(db).0,
16336 TerminalIdentifier::missing(db).0,
16337 TypeClause::missing(db).0,
16338 TerminalSemicolon::missing(db).0,
16339 ],
16340 width: TextWidth::default(),
16341 },
16342 })
16343 .intern(db),
16344 )
16345 }
16346 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16347 let kind = node.kind(db);
16348 assert_eq!(
16349 kind,
16350 SyntaxKind::TraitItemConstant,
16351 "Unexpected SyntaxKind {:?}. Expected {:?}.",
16352 kind,
16353 SyntaxKind::TraitItemConstant
16354 );
16355 let children = db.get_children(node.clone());
16356 Self { node, children }
16357 }
16358 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16359 let kind = node.kind(db);
16360 if kind == SyntaxKind::TraitItemConstant {
16361 Some(Self::from_syntax_node(db, node))
16362 } else {
16363 None
16364 }
16365 }
16366 fn as_syntax_node(&self) -> SyntaxNode {
16367 self.node.clone()
16368 }
16369 fn stable_ptr(&self) -> Self::StablePtr {
16370 TraitItemConstantPtr(self.node.0.stable_ptr)
16371 }
16372}
16373impl From<&TraitItemConstant> for SyntaxStablePtrId {
16374 fn from(node: &TraitItemConstant) -> Self {
16375 node.stable_ptr().untyped()
16376 }
16377}
16378#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16379pub struct TraitItemImpl {
16380 node: SyntaxNode,
16381 children: Arc<[SyntaxNode]>,
16382}
16383impl TraitItemImpl {
16384 pub const INDEX_ATTRIBUTES: usize = 0;
16385 pub const INDEX_IMPL_KW: usize = 1;
16386 pub const INDEX_NAME: usize = 2;
16387 pub const INDEX_COLON: usize = 3;
16388 pub const INDEX_TRAIT_PATH: usize = 4;
16389 pub const INDEX_SEMICOLON: usize = 5;
16390 pub fn new_green(
16391 db: &dyn SyntaxGroup,
16392 attributes: AttributeListGreen,
16393 impl_kw: TerminalImplGreen,
16394 name: TerminalIdentifierGreen,
16395 colon: TerminalColonGreen,
16396 trait_path: ExprPathGreen,
16397 semicolon: TerminalSemicolonGreen,
16398 ) -> TraitItemImplGreen {
16399 let children: Vec<GreenId> =
16400 vec![attributes.0, impl_kw.0, name.0, colon.0, trait_path.0, semicolon.0];
16401 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
16402 TraitItemImplGreen(
16403 Arc::new(GreenNode {
16404 kind: SyntaxKind::TraitItemImpl,
16405 details: GreenNodeDetails::Node { children, width },
16406 })
16407 .intern(db),
16408 )
16409 }
16410}
16411impl TraitItemImpl {
16412 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
16413 AttributeList::from_syntax_node(db, self.children[0].clone())
16414 }
16415 pub fn impl_kw(&self, db: &dyn SyntaxGroup) -> TerminalImpl {
16416 TerminalImpl::from_syntax_node(db, self.children[1].clone())
16417 }
16418 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
16419 TerminalIdentifier::from_syntax_node(db, self.children[2].clone())
16420 }
16421 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
16422 TerminalColon::from_syntax_node(db, self.children[3].clone())
16423 }
16424 pub fn trait_path(&self, db: &dyn SyntaxGroup) -> ExprPath {
16425 ExprPath::from_syntax_node(db, self.children[4].clone())
16426 }
16427 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
16428 TerminalSemicolon::from_syntax_node(db, self.children[5].clone())
16429 }
16430}
16431#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16432pub struct TraitItemImplPtr(pub SyntaxStablePtrId);
16433impl TraitItemImplPtr {
16434 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
16435 let ptr = self.0.lookup_intern(db);
16436 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
16437 TerminalIdentifierGreen(key_fields[0])
16438 } else {
16439 panic!("Unexpected key field query on root.");
16440 }
16441 }
16442}
16443impl TypedStablePtr for TraitItemImplPtr {
16444 type SyntaxNode = TraitItemImpl;
16445 fn untyped(&self) -> SyntaxStablePtrId {
16446 self.0
16447 }
16448 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitItemImpl {
16449 TraitItemImpl::from_syntax_node(db, self.0.lookup(db))
16450 }
16451}
16452impl From<TraitItemImplPtr> for SyntaxStablePtrId {
16453 fn from(ptr: TraitItemImplPtr) -> Self {
16454 ptr.untyped()
16455 }
16456}
16457#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16458pub struct TraitItemImplGreen(pub GreenId);
16459impl TypedSyntaxNode for TraitItemImpl {
16460 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TraitItemImpl);
16461 type StablePtr = TraitItemImplPtr;
16462 type Green = TraitItemImplGreen;
16463 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16464 TraitItemImplGreen(
16465 Arc::new(GreenNode {
16466 kind: SyntaxKind::TraitItemImpl,
16467 details: GreenNodeDetails::Node {
16468 children: vec![
16469 AttributeList::missing(db).0,
16470 TerminalImpl::missing(db).0,
16471 TerminalIdentifier::missing(db).0,
16472 TerminalColon::missing(db).0,
16473 ExprPath::missing(db).0,
16474 TerminalSemicolon::missing(db).0,
16475 ],
16476 width: TextWidth::default(),
16477 },
16478 })
16479 .intern(db),
16480 )
16481 }
16482 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16483 let kind = node.kind(db);
16484 assert_eq!(
16485 kind,
16486 SyntaxKind::TraitItemImpl,
16487 "Unexpected SyntaxKind {:?}. Expected {:?}.",
16488 kind,
16489 SyntaxKind::TraitItemImpl
16490 );
16491 let children = db.get_children(node.clone());
16492 Self { node, children }
16493 }
16494 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16495 let kind = node.kind(db);
16496 if kind == SyntaxKind::TraitItemImpl {
16497 Some(Self::from_syntax_node(db, node))
16498 } else {
16499 None
16500 }
16501 }
16502 fn as_syntax_node(&self) -> SyntaxNode {
16503 self.node.clone()
16504 }
16505 fn stable_ptr(&self) -> Self::StablePtr {
16506 TraitItemImplPtr(self.node.0.stable_ptr)
16507 }
16508}
16509impl From<&TraitItemImpl> for SyntaxStablePtrId {
16510 fn from(node: &TraitItemImpl) -> Self {
16511 node.stable_ptr().untyped()
16512 }
16513}
16514#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16515pub enum MaybeTraitFunctionBody {
16516 Some(ExprBlock),
16517 None(TerminalSemicolon),
16518}
16519#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16520pub struct MaybeTraitFunctionBodyPtr(pub SyntaxStablePtrId);
16521impl TypedStablePtr for MaybeTraitFunctionBodyPtr {
16522 type SyntaxNode = MaybeTraitFunctionBody;
16523 fn untyped(&self) -> SyntaxStablePtrId {
16524 self.0
16525 }
16526 fn lookup(&self, db: &dyn SyntaxGroup) -> MaybeTraitFunctionBody {
16527 MaybeTraitFunctionBody::from_syntax_node(db, self.0.lookup(db))
16528 }
16529}
16530impl From<MaybeTraitFunctionBodyPtr> for SyntaxStablePtrId {
16531 fn from(ptr: MaybeTraitFunctionBodyPtr) -> Self {
16532 ptr.untyped()
16533 }
16534}
16535impl From<ExprBlockPtr> for MaybeTraitFunctionBodyPtr {
16536 fn from(value: ExprBlockPtr) -> Self {
16537 Self(value.0)
16538 }
16539}
16540impl From<TerminalSemicolonPtr> for MaybeTraitFunctionBodyPtr {
16541 fn from(value: TerminalSemicolonPtr) -> Self {
16542 Self(value.0)
16543 }
16544}
16545impl From<ExprBlockGreen> for MaybeTraitFunctionBodyGreen {
16546 fn from(value: ExprBlockGreen) -> Self {
16547 Self(value.0)
16548 }
16549}
16550impl From<TerminalSemicolonGreen> for MaybeTraitFunctionBodyGreen {
16551 fn from(value: TerminalSemicolonGreen) -> Self {
16552 Self(value.0)
16553 }
16554}
16555#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16556pub struct MaybeTraitFunctionBodyGreen(pub GreenId);
16557impl TypedSyntaxNode for MaybeTraitFunctionBody {
16558 const OPTIONAL_KIND: Option<SyntaxKind> = None;
16559 type StablePtr = MaybeTraitFunctionBodyPtr;
16560 type Green = MaybeTraitFunctionBodyGreen;
16561 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16562 panic!("No missing variant.");
16563 }
16564 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16565 let kind = node.kind(db);
16566 match kind {
16567 SyntaxKind::ExprBlock => {
16568 MaybeTraitFunctionBody::Some(ExprBlock::from_syntax_node(db, node))
16569 }
16570 SyntaxKind::TerminalSemicolon => {
16571 MaybeTraitFunctionBody::None(TerminalSemicolon::from_syntax_node(db, node))
16572 }
16573 _ => panic!(
16574 "Unexpected syntax kind {:?} when constructing {}.",
16575 kind, "MaybeTraitFunctionBody"
16576 ),
16577 }
16578 }
16579 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16580 let kind = node.kind(db);
16581 match kind {
16582 SyntaxKind::ExprBlock => {
16583 Some(MaybeTraitFunctionBody::Some(ExprBlock::from_syntax_node(db, node)))
16584 }
16585 SyntaxKind::TerminalSemicolon => {
16586 Some(MaybeTraitFunctionBody::None(TerminalSemicolon::from_syntax_node(db, node)))
16587 }
16588 _ => None,
16589 }
16590 }
16591 fn as_syntax_node(&self) -> SyntaxNode {
16592 match self {
16593 MaybeTraitFunctionBody::Some(x) => x.as_syntax_node(),
16594 MaybeTraitFunctionBody::None(x) => x.as_syntax_node(),
16595 }
16596 }
16597 fn stable_ptr(&self) -> Self::StablePtr {
16598 MaybeTraitFunctionBodyPtr(self.as_syntax_node().0.stable_ptr)
16599 }
16600}
16601impl From<&MaybeTraitFunctionBody> for SyntaxStablePtrId {
16602 fn from(node: &MaybeTraitFunctionBody) -> Self {
16603 node.stable_ptr().untyped()
16604 }
16605}
16606impl MaybeTraitFunctionBody {
16607 pub fn is_variant(kind: SyntaxKind) -> bool {
16609 matches!(kind, SyntaxKind::ExprBlock | SyntaxKind::TerminalSemicolon)
16610 }
16611}
16612#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16613pub struct ItemImpl {
16614 node: SyntaxNode,
16615 children: Arc<[SyntaxNode]>,
16616}
16617impl ItemImpl {
16618 pub const INDEX_ATTRIBUTES: usize = 0;
16619 pub const INDEX_VISIBILITY: usize = 1;
16620 pub const INDEX_IMPL_KW: usize = 2;
16621 pub const INDEX_NAME: usize = 3;
16622 pub const INDEX_GENERIC_PARAMS: usize = 4;
16623 pub const INDEX_OF_KW: usize = 5;
16624 pub const INDEX_TRAIT_PATH: usize = 6;
16625 pub const INDEX_BODY: usize = 7;
16626 pub fn new_green(
16627 db: &dyn SyntaxGroup,
16628 attributes: AttributeListGreen,
16629 visibility: VisibilityGreen,
16630 impl_kw: TerminalImplGreen,
16631 name: TerminalIdentifierGreen,
16632 generic_params: OptionWrappedGenericParamListGreen,
16633 of_kw: TerminalOfGreen,
16634 trait_path: ExprPathGreen,
16635 body: MaybeImplBodyGreen,
16636 ) -> ItemImplGreen {
16637 let children: Vec<GreenId> = vec![
16638 attributes.0,
16639 visibility.0,
16640 impl_kw.0,
16641 name.0,
16642 generic_params.0,
16643 of_kw.0,
16644 trait_path.0,
16645 body.0,
16646 ];
16647 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
16648 ItemImplGreen(
16649 Arc::new(GreenNode {
16650 kind: SyntaxKind::ItemImpl,
16651 details: GreenNodeDetails::Node { children, width },
16652 })
16653 .intern(db),
16654 )
16655 }
16656}
16657impl ItemImpl {
16658 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
16659 AttributeList::from_syntax_node(db, self.children[0].clone())
16660 }
16661 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
16662 Visibility::from_syntax_node(db, self.children[1].clone())
16663 }
16664 pub fn impl_kw(&self, db: &dyn SyntaxGroup) -> TerminalImpl {
16665 TerminalImpl::from_syntax_node(db, self.children[2].clone())
16666 }
16667 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
16668 TerminalIdentifier::from_syntax_node(db, self.children[3].clone())
16669 }
16670 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
16671 OptionWrappedGenericParamList::from_syntax_node(db, self.children[4].clone())
16672 }
16673 pub fn of_kw(&self, db: &dyn SyntaxGroup) -> TerminalOf {
16674 TerminalOf::from_syntax_node(db, self.children[5].clone())
16675 }
16676 pub fn trait_path(&self, db: &dyn SyntaxGroup) -> ExprPath {
16677 ExprPath::from_syntax_node(db, self.children[6].clone())
16678 }
16679 pub fn body(&self, db: &dyn SyntaxGroup) -> MaybeImplBody {
16680 MaybeImplBody::from_syntax_node(db, self.children[7].clone())
16681 }
16682}
16683#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16684pub struct ItemImplPtr(pub SyntaxStablePtrId);
16685impl ItemImplPtr {
16686 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
16687 let ptr = self.0.lookup_intern(db);
16688 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
16689 TerminalIdentifierGreen(key_fields[0])
16690 } else {
16691 panic!("Unexpected key field query on root.");
16692 }
16693 }
16694}
16695impl TypedStablePtr for ItemImplPtr {
16696 type SyntaxNode = ItemImpl;
16697 fn untyped(&self) -> SyntaxStablePtrId {
16698 self.0
16699 }
16700 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemImpl {
16701 ItemImpl::from_syntax_node(db, self.0.lookup(db))
16702 }
16703}
16704impl From<ItemImplPtr> for SyntaxStablePtrId {
16705 fn from(ptr: ItemImplPtr) -> Self {
16706 ptr.untyped()
16707 }
16708}
16709#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16710pub struct ItemImplGreen(pub GreenId);
16711impl TypedSyntaxNode for ItemImpl {
16712 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemImpl);
16713 type StablePtr = ItemImplPtr;
16714 type Green = ItemImplGreen;
16715 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16716 ItemImplGreen(
16717 Arc::new(GreenNode {
16718 kind: SyntaxKind::ItemImpl,
16719 details: GreenNodeDetails::Node {
16720 children: vec![
16721 AttributeList::missing(db).0,
16722 Visibility::missing(db).0,
16723 TerminalImpl::missing(db).0,
16724 TerminalIdentifier::missing(db).0,
16725 OptionWrappedGenericParamList::missing(db).0,
16726 TerminalOf::missing(db).0,
16727 ExprPath::missing(db).0,
16728 MaybeImplBody::missing(db).0,
16729 ],
16730 width: TextWidth::default(),
16731 },
16732 })
16733 .intern(db),
16734 )
16735 }
16736 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16737 let kind = node.kind(db);
16738 assert_eq!(
16739 kind,
16740 SyntaxKind::ItemImpl,
16741 "Unexpected SyntaxKind {:?}. Expected {:?}.",
16742 kind,
16743 SyntaxKind::ItemImpl
16744 );
16745 let children = db.get_children(node.clone());
16746 Self { node, children }
16747 }
16748 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16749 let kind = node.kind(db);
16750 if kind == SyntaxKind::ItemImpl { Some(Self::from_syntax_node(db, node)) } else { None }
16751 }
16752 fn as_syntax_node(&self) -> SyntaxNode {
16753 self.node.clone()
16754 }
16755 fn stable_ptr(&self) -> Self::StablePtr {
16756 ItemImplPtr(self.node.0.stable_ptr)
16757 }
16758}
16759impl From<&ItemImpl> for SyntaxStablePtrId {
16760 fn from(node: &ItemImpl) -> Self {
16761 node.stable_ptr().untyped()
16762 }
16763}
16764#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16765pub struct ItemInlineMacro {
16766 node: SyntaxNode,
16767 children: Arc<[SyntaxNode]>,
16768}
16769impl ItemInlineMacro {
16770 pub const INDEX_ATTRIBUTES: usize = 0;
16771 pub const INDEX_NAME: usize = 1;
16772 pub const INDEX_BANG: usize = 2;
16773 pub const INDEX_ARGUMENTS: usize = 3;
16774 pub const INDEX_SEMICOLON: usize = 4;
16775 pub fn new_green(
16776 db: &dyn SyntaxGroup,
16777 attributes: AttributeListGreen,
16778 name: TerminalIdentifierGreen,
16779 bang: TerminalNotGreen,
16780 arguments: WrappedArgListGreen,
16781 semicolon: TerminalSemicolonGreen,
16782 ) -> ItemInlineMacroGreen {
16783 let children: Vec<GreenId> = vec![attributes.0, name.0, bang.0, arguments.0, semicolon.0];
16784 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
16785 ItemInlineMacroGreen(
16786 Arc::new(GreenNode {
16787 kind: SyntaxKind::ItemInlineMacro,
16788 details: GreenNodeDetails::Node { children, width },
16789 })
16790 .intern(db),
16791 )
16792 }
16793}
16794impl ItemInlineMacro {
16795 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
16796 AttributeList::from_syntax_node(db, self.children[0].clone())
16797 }
16798 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
16799 TerminalIdentifier::from_syntax_node(db, self.children[1].clone())
16800 }
16801 pub fn bang(&self, db: &dyn SyntaxGroup) -> TerminalNot {
16802 TerminalNot::from_syntax_node(db, self.children[2].clone())
16803 }
16804 pub fn arguments(&self, db: &dyn SyntaxGroup) -> WrappedArgList {
16805 WrappedArgList::from_syntax_node(db, self.children[3].clone())
16806 }
16807 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
16808 TerminalSemicolon::from_syntax_node(db, self.children[4].clone())
16809 }
16810}
16811#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16812pub struct ItemInlineMacroPtr(pub SyntaxStablePtrId);
16813impl ItemInlineMacroPtr {}
16814impl TypedStablePtr for ItemInlineMacroPtr {
16815 type SyntaxNode = ItemInlineMacro;
16816 fn untyped(&self) -> SyntaxStablePtrId {
16817 self.0
16818 }
16819 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemInlineMacro {
16820 ItemInlineMacro::from_syntax_node(db, self.0.lookup(db))
16821 }
16822}
16823impl From<ItemInlineMacroPtr> for SyntaxStablePtrId {
16824 fn from(ptr: ItemInlineMacroPtr) -> Self {
16825 ptr.untyped()
16826 }
16827}
16828#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16829pub struct ItemInlineMacroGreen(pub GreenId);
16830impl TypedSyntaxNode for ItemInlineMacro {
16831 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemInlineMacro);
16832 type StablePtr = ItemInlineMacroPtr;
16833 type Green = ItemInlineMacroGreen;
16834 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16835 ItemInlineMacroGreen(
16836 Arc::new(GreenNode {
16837 kind: SyntaxKind::ItemInlineMacro,
16838 details: GreenNodeDetails::Node {
16839 children: vec![
16840 AttributeList::missing(db).0,
16841 TerminalIdentifier::missing(db).0,
16842 TerminalNot::missing(db).0,
16843 WrappedArgList::missing(db).0,
16844 TerminalSemicolon::missing(db).0,
16845 ],
16846 width: TextWidth::default(),
16847 },
16848 })
16849 .intern(db),
16850 )
16851 }
16852 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16853 let kind = node.kind(db);
16854 assert_eq!(
16855 kind,
16856 SyntaxKind::ItemInlineMacro,
16857 "Unexpected SyntaxKind {:?}. Expected {:?}.",
16858 kind,
16859 SyntaxKind::ItemInlineMacro
16860 );
16861 let children = db.get_children(node.clone());
16862 Self { node, children }
16863 }
16864 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16865 let kind = node.kind(db);
16866 if kind == SyntaxKind::ItemInlineMacro {
16867 Some(Self::from_syntax_node(db, node))
16868 } else {
16869 None
16870 }
16871 }
16872 fn as_syntax_node(&self) -> SyntaxNode {
16873 self.node.clone()
16874 }
16875 fn stable_ptr(&self) -> Self::StablePtr {
16876 ItemInlineMacroPtr(self.node.0.stable_ptr)
16877 }
16878}
16879impl From<&ItemInlineMacro> for SyntaxStablePtrId {
16880 fn from(node: &ItemInlineMacro) -> Self {
16881 node.stable_ptr().untyped()
16882 }
16883}
16884#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16885pub struct ItemHeaderDoc {
16886 node: SyntaxNode,
16887 children: Arc<[SyntaxNode]>,
16888}
16889impl ItemHeaderDoc {
16890 pub const INDEX_EMPTY: usize = 0;
16891 pub fn new_green(db: &dyn SyntaxGroup, empty: TerminalEmptyGreen) -> ItemHeaderDocGreen {
16892 let children: Vec<GreenId> = vec![empty.0];
16893 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
16894 ItemHeaderDocGreen(
16895 Arc::new(GreenNode {
16896 kind: SyntaxKind::ItemHeaderDoc,
16897 details: GreenNodeDetails::Node { children, width },
16898 })
16899 .intern(db),
16900 )
16901 }
16902}
16903impl ItemHeaderDoc {
16904 pub fn empty(&self, db: &dyn SyntaxGroup) -> TerminalEmpty {
16905 TerminalEmpty::from_syntax_node(db, self.children[0].clone())
16906 }
16907}
16908#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16909pub struct ItemHeaderDocPtr(pub SyntaxStablePtrId);
16910impl ItemHeaderDocPtr {}
16911impl TypedStablePtr for ItemHeaderDocPtr {
16912 type SyntaxNode = ItemHeaderDoc;
16913 fn untyped(&self) -> SyntaxStablePtrId {
16914 self.0
16915 }
16916 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemHeaderDoc {
16917 ItemHeaderDoc::from_syntax_node(db, self.0.lookup(db))
16918 }
16919}
16920impl From<ItemHeaderDocPtr> for SyntaxStablePtrId {
16921 fn from(ptr: ItemHeaderDocPtr) -> Self {
16922 ptr.untyped()
16923 }
16924}
16925#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16926pub struct ItemHeaderDocGreen(pub GreenId);
16927impl TypedSyntaxNode for ItemHeaderDoc {
16928 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemHeaderDoc);
16929 type StablePtr = ItemHeaderDocPtr;
16930 type Green = ItemHeaderDocGreen;
16931 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16932 ItemHeaderDocGreen(
16933 Arc::new(GreenNode {
16934 kind: SyntaxKind::ItemHeaderDoc,
16935 details: GreenNodeDetails::Node {
16936 children: vec![TerminalEmpty::missing(db).0],
16937 width: TextWidth::default(),
16938 },
16939 })
16940 .intern(db),
16941 )
16942 }
16943 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16944 let kind = node.kind(db);
16945 assert_eq!(
16946 kind,
16947 SyntaxKind::ItemHeaderDoc,
16948 "Unexpected SyntaxKind {:?}. Expected {:?}.",
16949 kind,
16950 SyntaxKind::ItemHeaderDoc
16951 );
16952 let children = db.get_children(node.clone());
16953 Self { node, children }
16954 }
16955 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16956 let kind = node.kind(db);
16957 if kind == SyntaxKind::ItemHeaderDoc {
16958 Some(Self::from_syntax_node(db, node))
16959 } else {
16960 None
16961 }
16962 }
16963 fn as_syntax_node(&self) -> SyntaxNode {
16964 self.node.clone()
16965 }
16966 fn stable_ptr(&self) -> Self::StablePtr {
16967 ItemHeaderDocPtr(self.node.0.stable_ptr)
16968 }
16969}
16970impl From<&ItemHeaderDoc> for SyntaxStablePtrId {
16971 fn from(node: &ItemHeaderDoc) -> Self {
16972 node.stable_ptr().untyped()
16973 }
16974}
16975#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16976pub enum MaybeImplBody {
16977 Some(ImplBody),
16978 None(TerminalSemicolon),
16979}
16980#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16981pub struct MaybeImplBodyPtr(pub SyntaxStablePtrId);
16982impl TypedStablePtr for MaybeImplBodyPtr {
16983 type SyntaxNode = MaybeImplBody;
16984 fn untyped(&self) -> SyntaxStablePtrId {
16985 self.0
16986 }
16987 fn lookup(&self, db: &dyn SyntaxGroup) -> MaybeImplBody {
16988 MaybeImplBody::from_syntax_node(db, self.0.lookup(db))
16989 }
16990}
16991impl From<MaybeImplBodyPtr> for SyntaxStablePtrId {
16992 fn from(ptr: MaybeImplBodyPtr) -> Self {
16993 ptr.untyped()
16994 }
16995}
16996impl From<ImplBodyPtr> for MaybeImplBodyPtr {
16997 fn from(value: ImplBodyPtr) -> Self {
16998 Self(value.0)
16999 }
17000}
17001impl From<TerminalSemicolonPtr> for MaybeImplBodyPtr {
17002 fn from(value: TerminalSemicolonPtr) -> Self {
17003 Self(value.0)
17004 }
17005}
17006impl From<ImplBodyGreen> for MaybeImplBodyGreen {
17007 fn from(value: ImplBodyGreen) -> Self {
17008 Self(value.0)
17009 }
17010}
17011impl From<TerminalSemicolonGreen> for MaybeImplBodyGreen {
17012 fn from(value: TerminalSemicolonGreen) -> Self {
17013 Self(value.0)
17014 }
17015}
17016#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17017pub struct MaybeImplBodyGreen(pub GreenId);
17018impl TypedSyntaxNode for MaybeImplBody {
17019 const OPTIONAL_KIND: Option<SyntaxKind> = None;
17020 type StablePtr = MaybeImplBodyPtr;
17021 type Green = MaybeImplBodyGreen;
17022 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
17023 panic!("No missing variant.");
17024 }
17025 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
17026 let kind = node.kind(db);
17027 match kind {
17028 SyntaxKind::ImplBody => MaybeImplBody::Some(ImplBody::from_syntax_node(db, node)),
17029 SyntaxKind::TerminalSemicolon => {
17030 MaybeImplBody::None(TerminalSemicolon::from_syntax_node(db, node))
17031 }
17032 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "MaybeImplBody"),
17033 }
17034 }
17035 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
17036 let kind = node.kind(db);
17037 match kind {
17038 SyntaxKind::ImplBody => Some(MaybeImplBody::Some(ImplBody::from_syntax_node(db, node))),
17039 SyntaxKind::TerminalSemicolon => {
17040 Some(MaybeImplBody::None(TerminalSemicolon::from_syntax_node(db, node)))
17041 }
17042 _ => None,
17043 }
17044 }
17045 fn as_syntax_node(&self) -> SyntaxNode {
17046 match self {
17047 MaybeImplBody::Some(x) => x.as_syntax_node(),
17048 MaybeImplBody::None(x) => x.as_syntax_node(),
17049 }
17050 }
17051 fn stable_ptr(&self) -> Self::StablePtr {
17052 MaybeImplBodyPtr(self.as_syntax_node().0.stable_ptr)
17053 }
17054}
17055impl From<&MaybeImplBody> for SyntaxStablePtrId {
17056 fn from(node: &MaybeImplBody) -> Self {
17057 node.stable_ptr().untyped()
17058 }
17059}
17060impl MaybeImplBody {
17061 pub fn is_variant(kind: SyntaxKind) -> bool {
17063 matches!(kind, SyntaxKind::ImplBody | SyntaxKind::TerminalSemicolon)
17064 }
17065}
17066#[derive(Clone, Debug, Eq, Hash, PartialEq)]
17067pub struct ImplBody {
17068 node: SyntaxNode,
17069 children: Arc<[SyntaxNode]>,
17070}
17071impl ImplBody {
17072 pub const INDEX_LBRACE: usize = 0;
17073 pub const INDEX_ITEMS: usize = 1;
17074 pub const INDEX_RBRACE: usize = 2;
17075 pub fn new_green(
17076 db: &dyn SyntaxGroup,
17077 lbrace: TerminalLBraceGreen,
17078 items: ImplItemListGreen,
17079 rbrace: TerminalRBraceGreen,
17080 ) -> ImplBodyGreen {
17081 let children: Vec<GreenId> = vec![lbrace.0, items.0, rbrace.0];
17082 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
17083 ImplBodyGreen(
17084 Arc::new(GreenNode {
17085 kind: SyntaxKind::ImplBody,
17086 details: GreenNodeDetails::Node { children, width },
17087 })
17088 .intern(db),
17089 )
17090 }
17091}
17092impl ImplBody {
17093 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
17094 TerminalLBrace::from_syntax_node(db, self.children[0].clone())
17095 }
17096 pub fn items(&self, db: &dyn SyntaxGroup) -> ImplItemList {
17097 ImplItemList::from_syntax_node(db, self.children[1].clone())
17098 }
17099 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
17100 TerminalRBrace::from_syntax_node(db, self.children[2].clone())
17101 }
17102}
17103#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17104pub struct ImplBodyPtr(pub SyntaxStablePtrId);
17105impl ImplBodyPtr {}
17106impl TypedStablePtr for ImplBodyPtr {
17107 type SyntaxNode = ImplBody;
17108 fn untyped(&self) -> SyntaxStablePtrId {
17109 self.0
17110 }
17111 fn lookup(&self, db: &dyn SyntaxGroup) -> ImplBody {
17112 ImplBody::from_syntax_node(db, self.0.lookup(db))
17113 }
17114}
17115impl From<ImplBodyPtr> for SyntaxStablePtrId {
17116 fn from(ptr: ImplBodyPtr) -> Self {
17117 ptr.untyped()
17118 }
17119}
17120#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17121pub struct ImplBodyGreen(pub GreenId);
17122impl TypedSyntaxNode for ImplBody {
17123 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ImplBody);
17124 type StablePtr = ImplBodyPtr;
17125 type Green = ImplBodyGreen;
17126 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
17127 ImplBodyGreen(
17128 Arc::new(GreenNode {
17129 kind: SyntaxKind::ImplBody,
17130 details: GreenNodeDetails::Node {
17131 children: vec![
17132 TerminalLBrace::missing(db).0,
17133 ImplItemList::missing(db).0,
17134 TerminalRBrace::missing(db).0,
17135 ],
17136 width: TextWidth::default(),
17137 },
17138 })
17139 .intern(db),
17140 )
17141 }
17142 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
17143 let kind = node.kind(db);
17144 assert_eq!(
17145 kind,
17146 SyntaxKind::ImplBody,
17147 "Unexpected SyntaxKind {:?}. Expected {:?}.",
17148 kind,
17149 SyntaxKind::ImplBody
17150 );
17151 let children = db.get_children(node.clone());
17152 Self { node, children }
17153 }
17154 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
17155 let kind = node.kind(db);
17156 if kind == SyntaxKind::ImplBody { Some(Self::from_syntax_node(db, node)) } else { None }
17157 }
17158 fn as_syntax_node(&self) -> SyntaxNode {
17159 self.node.clone()
17160 }
17161 fn stable_ptr(&self) -> Self::StablePtr {
17162 ImplBodyPtr(self.node.0.stable_ptr)
17163 }
17164}
17165impl From<&ImplBody> for SyntaxStablePtrId {
17166 fn from(node: &ImplBody) -> Self {
17167 node.stable_ptr().untyped()
17168 }
17169}
17170#[derive(Clone, Debug, Eq, Hash, PartialEq)]
17171pub struct ImplItemList(ElementList<ImplItem, 1>);
17172impl Deref for ImplItemList {
17173 type Target = ElementList<ImplItem, 1>;
17174 fn deref(&self) -> &Self::Target {
17175 &self.0
17176 }
17177}
17178impl ImplItemList {
17179 pub fn new_green(db: &dyn SyntaxGroup, children: Vec<ImplItemGreen>) -> ImplItemListGreen {
17180 let width = children.iter().map(|id| id.0.lookup_intern(db).width()).sum();
17181 ImplItemListGreen(
17182 Arc::new(GreenNode {
17183 kind: SyntaxKind::ImplItemList,
17184 details: GreenNodeDetails::Node {
17185 children: children.iter().map(|x| x.0).collect(),
17186 width,
17187 },
17188 })
17189 .intern(db),
17190 )
17191 }
17192}
17193#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17194pub struct ImplItemListPtr(pub SyntaxStablePtrId);
17195impl TypedStablePtr for ImplItemListPtr {
17196 type SyntaxNode = ImplItemList;
17197 fn untyped(&self) -> SyntaxStablePtrId {
17198 self.0
17199 }
17200 fn lookup(&self, db: &dyn SyntaxGroup) -> ImplItemList {
17201 ImplItemList::from_syntax_node(db, self.0.lookup(db))
17202 }
17203}
17204impl From<ImplItemListPtr> for SyntaxStablePtrId {
17205 fn from(ptr: ImplItemListPtr) -> Self {
17206 ptr.untyped()
17207 }
17208}
17209#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17210pub struct ImplItemListGreen(pub GreenId);
17211impl TypedSyntaxNode for ImplItemList {
17212 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ImplItemList);
17213 type StablePtr = ImplItemListPtr;
17214 type Green = ImplItemListGreen;
17215 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
17216 ImplItemListGreen(
17217 Arc::new(GreenNode {
17218 kind: SyntaxKind::ImplItemList,
17219 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
17220 })
17221 .intern(db),
17222 )
17223 }
17224 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
17225 Self(ElementList::new(node))
17226 }
17227 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
17228 if node.kind(db) == SyntaxKind::ImplItemList {
17229 Some(Self(ElementList::new(node)))
17230 } else {
17231 None
17232 }
17233 }
17234 fn as_syntax_node(&self) -> SyntaxNode {
17235 self.node.clone()
17236 }
17237 fn stable_ptr(&self) -> Self::StablePtr {
17238 ImplItemListPtr(self.node.0.stable_ptr)
17239 }
17240}
17241impl From<&ImplItemList> for SyntaxStablePtrId {
17242 fn from(node: &ImplItemList) -> Self {
17243 node.stable_ptr().untyped()
17244 }
17245}
17246#[derive(Clone, Debug, Eq, Hash, PartialEq)]
17247pub enum ImplItem {
17248 Function(FunctionWithBody),
17249 Type(ItemTypeAlias),
17250 Constant(ItemConstant),
17251 Impl(ItemImplAlias),
17252 Module(ItemModule),
17253 Use(ItemUse),
17254 ExternFunction(ItemExternFunction),
17255 ExternType(ItemExternType),
17256 Trait(ItemTrait),
17257 Struct(ItemStruct),
17258 Enum(ItemEnum),
17259 Missing(ImplItemMissing),
17260}
17261#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17262pub struct ImplItemPtr(pub SyntaxStablePtrId);
17263impl TypedStablePtr for ImplItemPtr {
17264 type SyntaxNode = ImplItem;
17265 fn untyped(&self) -> SyntaxStablePtrId {
17266 self.0
17267 }
17268 fn lookup(&self, db: &dyn SyntaxGroup) -> ImplItem {
17269 ImplItem::from_syntax_node(db, self.0.lookup(db))
17270 }
17271}
17272impl From<ImplItemPtr> for SyntaxStablePtrId {
17273 fn from(ptr: ImplItemPtr) -> Self {
17274 ptr.untyped()
17275 }
17276}
17277impl From<FunctionWithBodyPtr> for ImplItemPtr {
17278 fn from(value: FunctionWithBodyPtr) -> Self {
17279 Self(value.0)
17280 }
17281}
17282impl From<ItemTypeAliasPtr> for ImplItemPtr {
17283 fn from(value: ItemTypeAliasPtr) -> Self {
17284 Self(value.0)
17285 }
17286}
17287impl From<ItemConstantPtr> for ImplItemPtr {
17288 fn from(value: ItemConstantPtr) -> Self {
17289 Self(value.0)
17290 }
17291}
17292impl From<ItemImplAliasPtr> for ImplItemPtr {
17293 fn from(value: ItemImplAliasPtr) -> Self {
17294 Self(value.0)
17295 }
17296}
17297impl From<ItemModulePtr> for ImplItemPtr {
17298 fn from(value: ItemModulePtr) -> Self {
17299 Self(value.0)
17300 }
17301}
17302impl From<ItemUsePtr> for ImplItemPtr {
17303 fn from(value: ItemUsePtr) -> Self {
17304 Self(value.0)
17305 }
17306}
17307impl From<ItemExternFunctionPtr> for ImplItemPtr {
17308 fn from(value: ItemExternFunctionPtr) -> Self {
17309 Self(value.0)
17310 }
17311}
17312impl From<ItemExternTypePtr> for ImplItemPtr {
17313 fn from(value: ItemExternTypePtr) -> Self {
17314 Self(value.0)
17315 }
17316}
17317impl From<ItemTraitPtr> for ImplItemPtr {
17318 fn from(value: ItemTraitPtr) -> Self {
17319 Self(value.0)
17320 }
17321}
17322impl From<ItemStructPtr> for ImplItemPtr {
17323 fn from(value: ItemStructPtr) -> Self {
17324 Self(value.0)
17325 }
17326}
17327impl From<ItemEnumPtr> for ImplItemPtr {
17328 fn from(value: ItemEnumPtr) -> Self {
17329 Self(value.0)
17330 }
17331}
17332impl From<ImplItemMissingPtr> for ImplItemPtr {
17333 fn from(value: ImplItemMissingPtr) -> Self {
17334 Self(value.0)
17335 }
17336}
17337impl From<FunctionWithBodyGreen> for ImplItemGreen {
17338 fn from(value: FunctionWithBodyGreen) -> Self {
17339 Self(value.0)
17340 }
17341}
17342impl From<ItemTypeAliasGreen> for ImplItemGreen {
17343 fn from(value: ItemTypeAliasGreen) -> Self {
17344 Self(value.0)
17345 }
17346}
17347impl From<ItemConstantGreen> for ImplItemGreen {
17348 fn from(value: ItemConstantGreen) -> Self {
17349 Self(value.0)
17350 }
17351}
17352impl From<ItemImplAliasGreen> for ImplItemGreen {
17353 fn from(value: ItemImplAliasGreen) -> Self {
17354 Self(value.0)
17355 }
17356}
17357impl From<ItemModuleGreen> for ImplItemGreen {
17358 fn from(value: ItemModuleGreen) -> Self {
17359 Self(value.0)
17360 }
17361}
17362impl From<ItemUseGreen> for ImplItemGreen {
17363 fn from(value: ItemUseGreen) -> Self {
17364 Self(value.0)
17365 }
17366}
17367impl From<ItemExternFunctionGreen> for ImplItemGreen {
17368 fn from(value: ItemExternFunctionGreen) -> Self {
17369 Self(value.0)
17370 }
17371}
17372impl From<ItemExternTypeGreen> for ImplItemGreen {
17373 fn from(value: ItemExternTypeGreen) -> Self {
17374 Self(value.0)
17375 }
17376}
17377impl From<ItemTraitGreen> for ImplItemGreen {
17378 fn from(value: ItemTraitGreen) -> Self {
17379 Self(value.0)
17380 }
17381}
17382impl From<ItemStructGreen> for ImplItemGreen {
17383 fn from(value: ItemStructGreen) -> Self {
17384 Self(value.0)
17385 }
17386}
17387impl From<ItemEnumGreen> for ImplItemGreen {
17388 fn from(value: ItemEnumGreen) -> Self {
17389 Self(value.0)
17390 }
17391}
17392impl From<ImplItemMissingGreen> for ImplItemGreen {
17393 fn from(value: ImplItemMissingGreen) -> Self {
17394 Self(value.0)
17395 }
17396}
17397#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17398pub struct ImplItemGreen(pub GreenId);
17399impl TypedSyntaxNode for ImplItem {
17400 const OPTIONAL_KIND: Option<SyntaxKind> = None;
17401 type StablePtr = ImplItemPtr;
17402 type Green = ImplItemGreen;
17403 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
17404 ImplItemGreen(ImplItemMissing::missing(db).0)
17405 }
17406 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
17407 let kind = node.kind(db);
17408 match kind {
17409 SyntaxKind::FunctionWithBody => {
17410 ImplItem::Function(FunctionWithBody::from_syntax_node(db, node))
17411 }
17412 SyntaxKind::ItemTypeAlias => ImplItem::Type(ItemTypeAlias::from_syntax_node(db, node)),
17413 SyntaxKind::ItemConstant => {
17414 ImplItem::Constant(ItemConstant::from_syntax_node(db, node))
17415 }
17416 SyntaxKind::ItemImplAlias => ImplItem::Impl(ItemImplAlias::from_syntax_node(db, node)),
17417 SyntaxKind::ItemModule => ImplItem::Module(ItemModule::from_syntax_node(db, node)),
17418 SyntaxKind::ItemUse => ImplItem::Use(ItemUse::from_syntax_node(db, node)),
17419 SyntaxKind::ItemExternFunction => {
17420 ImplItem::ExternFunction(ItemExternFunction::from_syntax_node(db, node))
17421 }
17422 SyntaxKind::ItemExternType => {
17423 ImplItem::ExternType(ItemExternType::from_syntax_node(db, node))
17424 }
17425 SyntaxKind::ItemTrait => ImplItem::Trait(ItemTrait::from_syntax_node(db, node)),
17426 SyntaxKind::ItemStruct => ImplItem::Struct(ItemStruct::from_syntax_node(db, node)),
17427 SyntaxKind::ItemEnum => ImplItem::Enum(ItemEnum::from_syntax_node(db, node)),
17428 SyntaxKind::ImplItemMissing => {
17429 ImplItem::Missing(ImplItemMissing::from_syntax_node(db, node))
17430 }
17431 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "ImplItem"),
17432 }
17433 }
17434 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
17435 let kind = node.kind(db);
17436 match kind {
17437 SyntaxKind::FunctionWithBody => {
17438 Some(ImplItem::Function(FunctionWithBody::from_syntax_node(db, node)))
17439 }
17440 SyntaxKind::ItemTypeAlias => {
17441 Some(ImplItem::Type(ItemTypeAlias::from_syntax_node(db, node)))
17442 }
17443 SyntaxKind::ItemConstant => {
17444 Some(ImplItem::Constant(ItemConstant::from_syntax_node(db, node)))
17445 }
17446 SyntaxKind::ItemImplAlias => {
17447 Some(ImplItem::Impl(ItemImplAlias::from_syntax_node(db, node)))
17448 }
17449 SyntaxKind::ItemModule => {
17450 Some(ImplItem::Module(ItemModule::from_syntax_node(db, node)))
17451 }
17452 SyntaxKind::ItemUse => Some(ImplItem::Use(ItemUse::from_syntax_node(db, node))),
17453 SyntaxKind::ItemExternFunction => {
17454 Some(ImplItem::ExternFunction(ItemExternFunction::from_syntax_node(db, node)))
17455 }
17456 SyntaxKind::ItemExternType => {
17457 Some(ImplItem::ExternType(ItemExternType::from_syntax_node(db, node)))
17458 }
17459 SyntaxKind::ItemTrait => Some(ImplItem::Trait(ItemTrait::from_syntax_node(db, node))),
17460 SyntaxKind::ItemStruct => {
17461 Some(ImplItem::Struct(ItemStruct::from_syntax_node(db, node)))
17462 }
17463 SyntaxKind::ItemEnum => Some(ImplItem::Enum(ItemEnum::from_syntax_node(db, node))),
17464 SyntaxKind::ImplItemMissing => {
17465 Some(ImplItem::Missing(ImplItemMissing::from_syntax_node(db, node)))
17466 }
17467 _ => None,
17468 }
17469 }
17470 fn as_syntax_node(&self) -> SyntaxNode {
17471 match self {
17472 ImplItem::Function(x) => x.as_syntax_node(),
17473 ImplItem::Type(x) => x.as_syntax_node(),
17474 ImplItem::Constant(x) => x.as_syntax_node(),
17475 ImplItem::Impl(x) => x.as_syntax_node(),
17476 ImplItem::Module(x) => x.as_syntax_node(),
17477 ImplItem::Use(x) => x.as_syntax_node(),
17478 ImplItem::ExternFunction(x) => x.as_syntax_node(),
17479 ImplItem::ExternType(x) => x.as_syntax_node(),
17480 ImplItem::Trait(x) => x.as_syntax_node(),
17481 ImplItem::Struct(x) => x.as_syntax_node(),
17482 ImplItem::Enum(x) => x.as_syntax_node(),
17483 ImplItem::Missing(x) => x.as_syntax_node(),
17484 }
17485 }
17486 fn stable_ptr(&self) -> Self::StablePtr {
17487 ImplItemPtr(self.as_syntax_node().0.stable_ptr)
17488 }
17489}
17490impl From<&ImplItem> for SyntaxStablePtrId {
17491 fn from(node: &ImplItem) -> Self {
17492 node.stable_ptr().untyped()
17493 }
17494}
17495impl ImplItem {
17496 pub fn is_variant(kind: SyntaxKind) -> bool {
17498 matches!(
17499 kind,
17500 SyntaxKind::FunctionWithBody
17501 | SyntaxKind::ItemTypeAlias
17502 | SyntaxKind::ItemConstant
17503 | SyntaxKind::ItemImplAlias
17504 | SyntaxKind::ItemModule
17505 | SyntaxKind::ItemUse
17506 | SyntaxKind::ItemExternFunction
17507 | SyntaxKind::ItemExternType
17508 | SyntaxKind::ItemTrait
17509 | SyntaxKind::ItemStruct
17510 | SyntaxKind::ItemEnum
17511 | SyntaxKind::ImplItemMissing
17512 )
17513 }
17514}
17515#[derive(Clone, Debug, Eq, Hash, PartialEq)]
17516pub struct ImplItemMissing {
17517 node: SyntaxNode,
17518 children: Arc<[SyntaxNode]>,
17519}
17520impl ImplItemMissing {
17521 pub fn new_green(db: &dyn SyntaxGroup) -> ImplItemMissingGreen {
17522 let children: Vec<GreenId> = vec![];
17523 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
17524 ImplItemMissingGreen(
17525 Arc::new(GreenNode {
17526 kind: SyntaxKind::ImplItemMissing,
17527 details: GreenNodeDetails::Node { children, width },
17528 })
17529 .intern(db),
17530 )
17531 }
17532}
17533impl ImplItemMissing {}
17534#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17535pub struct ImplItemMissingPtr(pub SyntaxStablePtrId);
17536impl ImplItemMissingPtr {}
17537impl TypedStablePtr for ImplItemMissingPtr {
17538 type SyntaxNode = ImplItemMissing;
17539 fn untyped(&self) -> SyntaxStablePtrId {
17540 self.0
17541 }
17542 fn lookup(&self, db: &dyn SyntaxGroup) -> ImplItemMissing {
17543 ImplItemMissing::from_syntax_node(db, self.0.lookup(db))
17544 }
17545}
17546impl From<ImplItemMissingPtr> for SyntaxStablePtrId {
17547 fn from(ptr: ImplItemMissingPtr) -> Self {
17548 ptr.untyped()
17549 }
17550}
17551#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17552pub struct ImplItemMissingGreen(pub GreenId);
17553impl TypedSyntaxNode for ImplItemMissing {
17554 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ImplItemMissing);
17555 type StablePtr = ImplItemMissingPtr;
17556 type Green = ImplItemMissingGreen;
17557 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
17558 ImplItemMissingGreen(
17559 Arc::new(GreenNode {
17560 kind: SyntaxKind::ImplItemMissing,
17561 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
17562 })
17563 .intern(db),
17564 )
17565 }
17566 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
17567 let kind = node.kind(db);
17568 assert_eq!(
17569 kind,
17570 SyntaxKind::ImplItemMissing,
17571 "Unexpected SyntaxKind {:?}. Expected {:?}.",
17572 kind,
17573 SyntaxKind::ImplItemMissing
17574 );
17575 let children = db.get_children(node.clone());
17576 Self { node, children }
17577 }
17578 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
17579 let kind = node.kind(db);
17580 if kind == SyntaxKind::ImplItemMissing {
17581 Some(Self::from_syntax_node(db, node))
17582 } else {
17583 None
17584 }
17585 }
17586 fn as_syntax_node(&self) -> SyntaxNode {
17587 self.node.clone()
17588 }
17589 fn stable_ptr(&self) -> Self::StablePtr {
17590 ImplItemMissingPtr(self.node.0.stable_ptr)
17591 }
17592}
17593impl From<&ImplItemMissing> for SyntaxStablePtrId {
17594 fn from(node: &ImplItemMissing) -> Self {
17595 node.stable_ptr().untyped()
17596 }
17597}
17598#[derive(Clone, Debug, Eq, Hash, PartialEq)]
17599pub struct ItemImplAlias {
17600 node: SyntaxNode,
17601 children: Arc<[SyntaxNode]>,
17602}
17603impl ItemImplAlias {
17604 pub const INDEX_ATTRIBUTES: usize = 0;
17605 pub const INDEX_VISIBILITY: usize = 1;
17606 pub const INDEX_IMPL_KW: usize = 2;
17607 pub const INDEX_NAME: usize = 3;
17608 pub const INDEX_GENERIC_PARAMS: usize = 4;
17609 pub const INDEX_EQ: usize = 5;
17610 pub const INDEX_IMPL_PATH: usize = 6;
17611 pub const INDEX_SEMICOLON: usize = 7;
17612 pub fn new_green(
17613 db: &dyn SyntaxGroup,
17614 attributes: AttributeListGreen,
17615 visibility: VisibilityGreen,
17616 impl_kw: TerminalImplGreen,
17617 name: TerminalIdentifierGreen,
17618 generic_params: OptionWrappedGenericParamListGreen,
17619 eq: TerminalEqGreen,
17620 impl_path: ExprPathGreen,
17621 semicolon: TerminalSemicolonGreen,
17622 ) -> ItemImplAliasGreen {
17623 let children: Vec<GreenId> = vec![
17624 attributes.0,
17625 visibility.0,
17626 impl_kw.0,
17627 name.0,
17628 generic_params.0,
17629 eq.0,
17630 impl_path.0,
17631 semicolon.0,
17632 ];
17633 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
17634 ItemImplAliasGreen(
17635 Arc::new(GreenNode {
17636 kind: SyntaxKind::ItemImplAlias,
17637 details: GreenNodeDetails::Node { children, width },
17638 })
17639 .intern(db),
17640 )
17641 }
17642}
17643impl ItemImplAlias {
17644 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
17645 AttributeList::from_syntax_node(db, self.children[0].clone())
17646 }
17647 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
17648 Visibility::from_syntax_node(db, self.children[1].clone())
17649 }
17650 pub fn impl_kw(&self, db: &dyn SyntaxGroup) -> TerminalImpl {
17651 TerminalImpl::from_syntax_node(db, self.children[2].clone())
17652 }
17653 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
17654 TerminalIdentifier::from_syntax_node(db, self.children[3].clone())
17655 }
17656 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
17657 OptionWrappedGenericParamList::from_syntax_node(db, self.children[4].clone())
17658 }
17659 pub fn eq(&self, db: &dyn SyntaxGroup) -> TerminalEq {
17660 TerminalEq::from_syntax_node(db, self.children[5].clone())
17661 }
17662 pub fn impl_path(&self, db: &dyn SyntaxGroup) -> ExprPath {
17663 ExprPath::from_syntax_node(db, self.children[6].clone())
17664 }
17665 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
17666 TerminalSemicolon::from_syntax_node(db, self.children[7].clone())
17667 }
17668}
17669#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17670pub struct ItemImplAliasPtr(pub SyntaxStablePtrId);
17671impl ItemImplAliasPtr {
17672 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
17673 let ptr = self.0.lookup_intern(db);
17674 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
17675 TerminalIdentifierGreen(key_fields[0])
17676 } else {
17677 panic!("Unexpected key field query on root.");
17678 }
17679 }
17680}
17681impl TypedStablePtr for ItemImplAliasPtr {
17682 type SyntaxNode = ItemImplAlias;
17683 fn untyped(&self) -> SyntaxStablePtrId {
17684 self.0
17685 }
17686 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemImplAlias {
17687 ItemImplAlias::from_syntax_node(db, self.0.lookup(db))
17688 }
17689}
17690impl From<ItemImplAliasPtr> for SyntaxStablePtrId {
17691 fn from(ptr: ItemImplAliasPtr) -> Self {
17692 ptr.untyped()
17693 }
17694}
17695#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17696pub struct ItemImplAliasGreen(pub GreenId);
17697impl TypedSyntaxNode for ItemImplAlias {
17698 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemImplAlias);
17699 type StablePtr = ItemImplAliasPtr;
17700 type Green = ItemImplAliasGreen;
17701 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
17702 ItemImplAliasGreen(
17703 Arc::new(GreenNode {
17704 kind: SyntaxKind::ItemImplAlias,
17705 details: GreenNodeDetails::Node {
17706 children: vec![
17707 AttributeList::missing(db).0,
17708 Visibility::missing(db).0,
17709 TerminalImpl::missing(db).0,
17710 TerminalIdentifier::missing(db).0,
17711 OptionWrappedGenericParamList::missing(db).0,
17712 TerminalEq::missing(db).0,
17713 ExprPath::missing(db).0,
17714 TerminalSemicolon::missing(db).0,
17715 ],
17716 width: TextWidth::default(),
17717 },
17718 })
17719 .intern(db),
17720 )
17721 }
17722 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
17723 let kind = node.kind(db);
17724 assert_eq!(
17725 kind,
17726 SyntaxKind::ItemImplAlias,
17727 "Unexpected SyntaxKind {:?}. Expected {:?}.",
17728 kind,
17729 SyntaxKind::ItemImplAlias
17730 );
17731 let children = db.get_children(node.clone());
17732 Self { node, children }
17733 }
17734 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
17735 let kind = node.kind(db);
17736 if kind == SyntaxKind::ItemImplAlias {
17737 Some(Self::from_syntax_node(db, node))
17738 } else {
17739 None
17740 }
17741 }
17742 fn as_syntax_node(&self) -> SyntaxNode {
17743 self.node.clone()
17744 }
17745 fn stable_ptr(&self) -> Self::StablePtr {
17746 ItemImplAliasPtr(self.node.0.stable_ptr)
17747 }
17748}
17749impl From<&ItemImplAlias> for SyntaxStablePtrId {
17750 fn from(node: &ItemImplAlias) -> Self {
17751 node.stable_ptr().untyped()
17752 }
17753}
17754#[derive(Clone, Debug, Eq, Hash, PartialEq)]
17755pub struct ItemStruct {
17756 node: SyntaxNode,
17757 children: Arc<[SyntaxNode]>,
17758}
17759impl ItemStruct {
17760 pub const INDEX_ATTRIBUTES: usize = 0;
17761 pub const INDEX_VISIBILITY: usize = 1;
17762 pub const INDEX_STRUCT_KW: usize = 2;
17763 pub const INDEX_NAME: usize = 3;
17764 pub const INDEX_GENERIC_PARAMS: usize = 4;
17765 pub const INDEX_LBRACE: usize = 5;
17766 pub const INDEX_MEMBERS: usize = 6;
17767 pub const INDEX_RBRACE: usize = 7;
17768 pub fn new_green(
17769 db: &dyn SyntaxGroup,
17770 attributes: AttributeListGreen,
17771 visibility: VisibilityGreen,
17772 struct_kw: TerminalStructGreen,
17773 name: TerminalIdentifierGreen,
17774 generic_params: OptionWrappedGenericParamListGreen,
17775 lbrace: TerminalLBraceGreen,
17776 members: MemberListGreen,
17777 rbrace: TerminalRBraceGreen,
17778 ) -> ItemStructGreen {
17779 let children: Vec<GreenId> = vec![
17780 attributes.0,
17781 visibility.0,
17782 struct_kw.0,
17783 name.0,
17784 generic_params.0,
17785 lbrace.0,
17786 members.0,
17787 rbrace.0,
17788 ];
17789 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
17790 ItemStructGreen(
17791 Arc::new(GreenNode {
17792 kind: SyntaxKind::ItemStruct,
17793 details: GreenNodeDetails::Node { children, width },
17794 })
17795 .intern(db),
17796 )
17797 }
17798}
17799impl ItemStruct {
17800 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
17801 AttributeList::from_syntax_node(db, self.children[0].clone())
17802 }
17803 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
17804 Visibility::from_syntax_node(db, self.children[1].clone())
17805 }
17806 pub fn struct_kw(&self, db: &dyn SyntaxGroup) -> TerminalStruct {
17807 TerminalStruct::from_syntax_node(db, self.children[2].clone())
17808 }
17809 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
17810 TerminalIdentifier::from_syntax_node(db, self.children[3].clone())
17811 }
17812 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
17813 OptionWrappedGenericParamList::from_syntax_node(db, self.children[4].clone())
17814 }
17815 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
17816 TerminalLBrace::from_syntax_node(db, self.children[5].clone())
17817 }
17818 pub fn members(&self, db: &dyn SyntaxGroup) -> MemberList {
17819 MemberList::from_syntax_node(db, self.children[6].clone())
17820 }
17821 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
17822 TerminalRBrace::from_syntax_node(db, self.children[7].clone())
17823 }
17824}
17825#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17826pub struct ItemStructPtr(pub SyntaxStablePtrId);
17827impl ItemStructPtr {
17828 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
17829 let ptr = self.0.lookup_intern(db);
17830 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
17831 TerminalIdentifierGreen(key_fields[0])
17832 } else {
17833 panic!("Unexpected key field query on root.");
17834 }
17835 }
17836}
17837impl TypedStablePtr for ItemStructPtr {
17838 type SyntaxNode = ItemStruct;
17839 fn untyped(&self) -> SyntaxStablePtrId {
17840 self.0
17841 }
17842 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemStruct {
17843 ItemStruct::from_syntax_node(db, self.0.lookup(db))
17844 }
17845}
17846impl From<ItemStructPtr> for SyntaxStablePtrId {
17847 fn from(ptr: ItemStructPtr) -> Self {
17848 ptr.untyped()
17849 }
17850}
17851#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17852pub struct ItemStructGreen(pub GreenId);
17853impl TypedSyntaxNode for ItemStruct {
17854 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemStruct);
17855 type StablePtr = ItemStructPtr;
17856 type Green = ItemStructGreen;
17857 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
17858 ItemStructGreen(
17859 Arc::new(GreenNode {
17860 kind: SyntaxKind::ItemStruct,
17861 details: GreenNodeDetails::Node {
17862 children: vec![
17863 AttributeList::missing(db).0,
17864 Visibility::missing(db).0,
17865 TerminalStruct::missing(db).0,
17866 TerminalIdentifier::missing(db).0,
17867 OptionWrappedGenericParamList::missing(db).0,
17868 TerminalLBrace::missing(db).0,
17869 MemberList::missing(db).0,
17870 TerminalRBrace::missing(db).0,
17871 ],
17872 width: TextWidth::default(),
17873 },
17874 })
17875 .intern(db),
17876 )
17877 }
17878 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
17879 let kind = node.kind(db);
17880 assert_eq!(
17881 kind,
17882 SyntaxKind::ItemStruct,
17883 "Unexpected SyntaxKind {:?}. Expected {:?}.",
17884 kind,
17885 SyntaxKind::ItemStruct
17886 );
17887 let children = db.get_children(node.clone());
17888 Self { node, children }
17889 }
17890 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
17891 let kind = node.kind(db);
17892 if kind == SyntaxKind::ItemStruct { Some(Self::from_syntax_node(db, node)) } else { None }
17893 }
17894 fn as_syntax_node(&self) -> SyntaxNode {
17895 self.node.clone()
17896 }
17897 fn stable_ptr(&self) -> Self::StablePtr {
17898 ItemStructPtr(self.node.0.stable_ptr)
17899 }
17900}
17901impl From<&ItemStruct> for SyntaxStablePtrId {
17902 fn from(node: &ItemStruct) -> Self {
17903 node.stable_ptr().untyped()
17904 }
17905}
17906#[derive(Clone, Debug, Eq, Hash, PartialEq)]
17907pub struct ItemEnum {
17908 node: SyntaxNode,
17909 children: Arc<[SyntaxNode]>,
17910}
17911impl ItemEnum {
17912 pub const INDEX_ATTRIBUTES: usize = 0;
17913 pub const INDEX_VISIBILITY: usize = 1;
17914 pub const INDEX_ENUM_KW: usize = 2;
17915 pub const INDEX_NAME: usize = 3;
17916 pub const INDEX_GENERIC_PARAMS: usize = 4;
17917 pub const INDEX_LBRACE: usize = 5;
17918 pub const INDEX_VARIANTS: usize = 6;
17919 pub const INDEX_RBRACE: usize = 7;
17920 pub fn new_green(
17921 db: &dyn SyntaxGroup,
17922 attributes: AttributeListGreen,
17923 visibility: VisibilityGreen,
17924 enum_kw: TerminalEnumGreen,
17925 name: TerminalIdentifierGreen,
17926 generic_params: OptionWrappedGenericParamListGreen,
17927 lbrace: TerminalLBraceGreen,
17928 variants: VariantListGreen,
17929 rbrace: TerminalRBraceGreen,
17930 ) -> ItemEnumGreen {
17931 let children: Vec<GreenId> = vec![
17932 attributes.0,
17933 visibility.0,
17934 enum_kw.0,
17935 name.0,
17936 generic_params.0,
17937 lbrace.0,
17938 variants.0,
17939 rbrace.0,
17940 ];
17941 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
17942 ItemEnumGreen(
17943 Arc::new(GreenNode {
17944 kind: SyntaxKind::ItemEnum,
17945 details: GreenNodeDetails::Node { children, width },
17946 })
17947 .intern(db),
17948 )
17949 }
17950}
17951impl ItemEnum {
17952 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
17953 AttributeList::from_syntax_node(db, self.children[0].clone())
17954 }
17955 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
17956 Visibility::from_syntax_node(db, self.children[1].clone())
17957 }
17958 pub fn enum_kw(&self, db: &dyn SyntaxGroup) -> TerminalEnum {
17959 TerminalEnum::from_syntax_node(db, self.children[2].clone())
17960 }
17961 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
17962 TerminalIdentifier::from_syntax_node(db, self.children[3].clone())
17963 }
17964 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
17965 OptionWrappedGenericParamList::from_syntax_node(db, self.children[4].clone())
17966 }
17967 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
17968 TerminalLBrace::from_syntax_node(db, self.children[5].clone())
17969 }
17970 pub fn variants(&self, db: &dyn SyntaxGroup) -> VariantList {
17971 VariantList::from_syntax_node(db, self.children[6].clone())
17972 }
17973 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
17974 TerminalRBrace::from_syntax_node(db, self.children[7].clone())
17975 }
17976}
17977#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17978pub struct ItemEnumPtr(pub SyntaxStablePtrId);
17979impl ItemEnumPtr {
17980 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
17981 let ptr = self.0.lookup_intern(db);
17982 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
17983 TerminalIdentifierGreen(key_fields[0])
17984 } else {
17985 panic!("Unexpected key field query on root.");
17986 }
17987 }
17988}
17989impl TypedStablePtr for ItemEnumPtr {
17990 type SyntaxNode = ItemEnum;
17991 fn untyped(&self) -> SyntaxStablePtrId {
17992 self.0
17993 }
17994 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemEnum {
17995 ItemEnum::from_syntax_node(db, self.0.lookup(db))
17996 }
17997}
17998impl From<ItemEnumPtr> for SyntaxStablePtrId {
17999 fn from(ptr: ItemEnumPtr) -> Self {
18000 ptr.untyped()
18001 }
18002}
18003#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18004pub struct ItemEnumGreen(pub GreenId);
18005impl TypedSyntaxNode for ItemEnum {
18006 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemEnum);
18007 type StablePtr = ItemEnumPtr;
18008 type Green = ItemEnumGreen;
18009 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18010 ItemEnumGreen(
18011 Arc::new(GreenNode {
18012 kind: SyntaxKind::ItemEnum,
18013 details: GreenNodeDetails::Node {
18014 children: vec![
18015 AttributeList::missing(db).0,
18016 Visibility::missing(db).0,
18017 TerminalEnum::missing(db).0,
18018 TerminalIdentifier::missing(db).0,
18019 OptionWrappedGenericParamList::missing(db).0,
18020 TerminalLBrace::missing(db).0,
18021 VariantList::missing(db).0,
18022 TerminalRBrace::missing(db).0,
18023 ],
18024 width: TextWidth::default(),
18025 },
18026 })
18027 .intern(db),
18028 )
18029 }
18030 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18031 let kind = node.kind(db);
18032 assert_eq!(
18033 kind,
18034 SyntaxKind::ItemEnum,
18035 "Unexpected SyntaxKind {:?}. Expected {:?}.",
18036 kind,
18037 SyntaxKind::ItemEnum
18038 );
18039 let children = db.get_children(node.clone());
18040 Self { node, children }
18041 }
18042 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18043 let kind = node.kind(db);
18044 if kind == SyntaxKind::ItemEnum { Some(Self::from_syntax_node(db, node)) } else { None }
18045 }
18046 fn as_syntax_node(&self) -> SyntaxNode {
18047 self.node.clone()
18048 }
18049 fn stable_ptr(&self) -> Self::StablePtr {
18050 ItemEnumPtr(self.node.0.stable_ptr)
18051 }
18052}
18053impl From<&ItemEnum> for SyntaxStablePtrId {
18054 fn from(node: &ItemEnum) -> Self {
18055 node.stable_ptr().untyped()
18056 }
18057}
18058#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18059pub struct ItemTypeAlias {
18060 node: SyntaxNode,
18061 children: Arc<[SyntaxNode]>,
18062}
18063impl ItemTypeAlias {
18064 pub const INDEX_ATTRIBUTES: usize = 0;
18065 pub const INDEX_VISIBILITY: usize = 1;
18066 pub const INDEX_TYPE_KW: usize = 2;
18067 pub const INDEX_NAME: usize = 3;
18068 pub const INDEX_GENERIC_PARAMS: usize = 4;
18069 pub const INDEX_EQ: usize = 5;
18070 pub const INDEX_TY: usize = 6;
18071 pub const INDEX_SEMICOLON: usize = 7;
18072 pub fn new_green(
18073 db: &dyn SyntaxGroup,
18074 attributes: AttributeListGreen,
18075 visibility: VisibilityGreen,
18076 type_kw: TerminalTypeGreen,
18077 name: TerminalIdentifierGreen,
18078 generic_params: OptionWrappedGenericParamListGreen,
18079 eq: TerminalEqGreen,
18080 ty: ExprGreen,
18081 semicolon: TerminalSemicolonGreen,
18082 ) -> ItemTypeAliasGreen {
18083 let children: Vec<GreenId> = vec![
18084 attributes.0,
18085 visibility.0,
18086 type_kw.0,
18087 name.0,
18088 generic_params.0,
18089 eq.0,
18090 ty.0,
18091 semicolon.0,
18092 ];
18093 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
18094 ItemTypeAliasGreen(
18095 Arc::new(GreenNode {
18096 kind: SyntaxKind::ItemTypeAlias,
18097 details: GreenNodeDetails::Node { children, width },
18098 })
18099 .intern(db),
18100 )
18101 }
18102}
18103impl ItemTypeAlias {
18104 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
18105 AttributeList::from_syntax_node(db, self.children[0].clone())
18106 }
18107 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
18108 Visibility::from_syntax_node(db, self.children[1].clone())
18109 }
18110 pub fn type_kw(&self, db: &dyn SyntaxGroup) -> TerminalType {
18111 TerminalType::from_syntax_node(db, self.children[2].clone())
18112 }
18113 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
18114 TerminalIdentifier::from_syntax_node(db, self.children[3].clone())
18115 }
18116 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
18117 OptionWrappedGenericParamList::from_syntax_node(db, self.children[4].clone())
18118 }
18119 pub fn eq(&self, db: &dyn SyntaxGroup) -> TerminalEq {
18120 TerminalEq::from_syntax_node(db, self.children[5].clone())
18121 }
18122 pub fn ty(&self, db: &dyn SyntaxGroup) -> Expr {
18123 Expr::from_syntax_node(db, self.children[6].clone())
18124 }
18125 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
18126 TerminalSemicolon::from_syntax_node(db, self.children[7].clone())
18127 }
18128}
18129#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18130pub struct ItemTypeAliasPtr(pub SyntaxStablePtrId);
18131impl ItemTypeAliasPtr {
18132 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
18133 let ptr = self.0.lookup_intern(db);
18134 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
18135 TerminalIdentifierGreen(key_fields[0])
18136 } else {
18137 panic!("Unexpected key field query on root.");
18138 }
18139 }
18140}
18141impl TypedStablePtr for ItemTypeAliasPtr {
18142 type SyntaxNode = ItemTypeAlias;
18143 fn untyped(&self) -> SyntaxStablePtrId {
18144 self.0
18145 }
18146 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemTypeAlias {
18147 ItemTypeAlias::from_syntax_node(db, self.0.lookup(db))
18148 }
18149}
18150impl From<ItemTypeAliasPtr> for SyntaxStablePtrId {
18151 fn from(ptr: ItemTypeAliasPtr) -> Self {
18152 ptr.untyped()
18153 }
18154}
18155#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18156pub struct ItemTypeAliasGreen(pub GreenId);
18157impl TypedSyntaxNode for ItemTypeAlias {
18158 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemTypeAlias);
18159 type StablePtr = ItemTypeAliasPtr;
18160 type Green = ItemTypeAliasGreen;
18161 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18162 ItemTypeAliasGreen(
18163 Arc::new(GreenNode {
18164 kind: SyntaxKind::ItemTypeAlias,
18165 details: GreenNodeDetails::Node {
18166 children: vec![
18167 AttributeList::missing(db).0,
18168 Visibility::missing(db).0,
18169 TerminalType::missing(db).0,
18170 TerminalIdentifier::missing(db).0,
18171 OptionWrappedGenericParamList::missing(db).0,
18172 TerminalEq::missing(db).0,
18173 Expr::missing(db).0,
18174 TerminalSemicolon::missing(db).0,
18175 ],
18176 width: TextWidth::default(),
18177 },
18178 })
18179 .intern(db),
18180 )
18181 }
18182 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18183 let kind = node.kind(db);
18184 assert_eq!(
18185 kind,
18186 SyntaxKind::ItemTypeAlias,
18187 "Unexpected SyntaxKind {:?}. Expected {:?}.",
18188 kind,
18189 SyntaxKind::ItemTypeAlias
18190 );
18191 let children = db.get_children(node.clone());
18192 Self { node, children }
18193 }
18194 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18195 let kind = node.kind(db);
18196 if kind == SyntaxKind::ItemTypeAlias {
18197 Some(Self::from_syntax_node(db, node))
18198 } else {
18199 None
18200 }
18201 }
18202 fn as_syntax_node(&self) -> SyntaxNode {
18203 self.node.clone()
18204 }
18205 fn stable_ptr(&self) -> Self::StablePtr {
18206 ItemTypeAliasPtr(self.node.0.stable_ptr)
18207 }
18208}
18209impl From<&ItemTypeAlias> for SyntaxStablePtrId {
18210 fn from(node: &ItemTypeAlias) -> Self {
18211 node.stable_ptr().untyped()
18212 }
18213}
18214#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18215pub struct ItemUse {
18216 node: SyntaxNode,
18217 children: Arc<[SyntaxNode]>,
18218}
18219impl ItemUse {
18220 pub const INDEX_ATTRIBUTES: usize = 0;
18221 pub const INDEX_VISIBILITY: usize = 1;
18222 pub const INDEX_USE_KW: usize = 2;
18223 pub const INDEX_USE_PATH: usize = 3;
18224 pub const INDEX_SEMICOLON: usize = 4;
18225 pub fn new_green(
18226 db: &dyn SyntaxGroup,
18227 attributes: AttributeListGreen,
18228 visibility: VisibilityGreen,
18229 use_kw: TerminalUseGreen,
18230 use_path: UsePathGreen,
18231 semicolon: TerminalSemicolonGreen,
18232 ) -> ItemUseGreen {
18233 let children: Vec<GreenId> =
18234 vec![attributes.0, visibility.0, use_kw.0, use_path.0, semicolon.0];
18235 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
18236 ItemUseGreen(
18237 Arc::new(GreenNode {
18238 kind: SyntaxKind::ItemUse,
18239 details: GreenNodeDetails::Node { children, width },
18240 })
18241 .intern(db),
18242 )
18243 }
18244}
18245impl ItemUse {
18246 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
18247 AttributeList::from_syntax_node(db, self.children[0].clone())
18248 }
18249 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
18250 Visibility::from_syntax_node(db, self.children[1].clone())
18251 }
18252 pub fn use_kw(&self, db: &dyn SyntaxGroup) -> TerminalUse {
18253 TerminalUse::from_syntax_node(db, self.children[2].clone())
18254 }
18255 pub fn use_path(&self, db: &dyn SyntaxGroup) -> UsePath {
18256 UsePath::from_syntax_node(db, self.children[3].clone())
18257 }
18258 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
18259 TerminalSemicolon::from_syntax_node(db, self.children[4].clone())
18260 }
18261}
18262#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18263pub struct ItemUsePtr(pub SyntaxStablePtrId);
18264impl ItemUsePtr {
18265 pub fn use_path_green(self, db: &dyn SyntaxGroup) -> UsePathGreen {
18266 let ptr = self.0.lookup_intern(db);
18267 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
18268 UsePathGreen(key_fields[0])
18269 } else {
18270 panic!("Unexpected key field query on root.");
18271 }
18272 }
18273}
18274impl TypedStablePtr for ItemUsePtr {
18275 type SyntaxNode = ItemUse;
18276 fn untyped(&self) -> SyntaxStablePtrId {
18277 self.0
18278 }
18279 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemUse {
18280 ItemUse::from_syntax_node(db, self.0.lookup(db))
18281 }
18282}
18283impl From<ItemUsePtr> for SyntaxStablePtrId {
18284 fn from(ptr: ItemUsePtr) -> Self {
18285 ptr.untyped()
18286 }
18287}
18288#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18289pub struct ItemUseGreen(pub GreenId);
18290impl TypedSyntaxNode for ItemUse {
18291 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemUse);
18292 type StablePtr = ItemUsePtr;
18293 type Green = ItemUseGreen;
18294 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18295 ItemUseGreen(
18296 Arc::new(GreenNode {
18297 kind: SyntaxKind::ItemUse,
18298 details: GreenNodeDetails::Node {
18299 children: vec![
18300 AttributeList::missing(db).0,
18301 Visibility::missing(db).0,
18302 TerminalUse::missing(db).0,
18303 UsePath::missing(db).0,
18304 TerminalSemicolon::missing(db).0,
18305 ],
18306 width: TextWidth::default(),
18307 },
18308 })
18309 .intern(db),
18310 )
18311 }
18312 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18313 let kind = node.kind(db);
18314 assert_eq!(
18315 kind,
18316 SyntaxKind::ItemUse,
18317 "Unexpected SyntaxKind {:?}. Expected {:?}.",
18318 kind,
18319 SyntaxKind::ItemUse
18320 );
18321 let children = db.get_children(node.clone());
18322 Self { node, children }
18323 }
18324 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18325 let kind = node.kind(db);
18326 if kind == SyntaxKind::ItemUse { Some(Self::from_syntax_node(db, node)) } else { None }
18327 }
18328 fn as_syntax_node(&self) -> SyntaxNode {
18329 self.node.clone()
18330 }
18331 fn stable_ptr(&self) -> Self::StablePtr {
18332 ItemUsePtr(self.node.0.stable_ptr)
18333 }
18334}
18335impl From<&ItemUse> for SyntaxStablePtrId {
18336 fn from(node: &ItemUse) -> Self {
18337 node.stable_ptr().untyped()
18338 }
18339}
18340#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18341pub enum UsePath {
18342 Leaf(UsePathLeaf),
18343 Single(UsePathSingle),
18344 Multi(UsePathMulti),
18345 Star(UsePathStar),
18346}
18347#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18348pub struct UsePathPtr(pub SyntaxStablePtrId);
18349impl TypedStablePtr for UsePathPtr {
18350 type SyntaxNode = UsePath;
18351 fn untyped(&self) -> SyntaxStablePtrId {
18352 self.0
18353 }
18354 fn lookup(&self, db: &dyn SyntaxGroup) -> UsePath {
18355 UsePath::from_syntax_node(db, self.0.lookup(db))
18356 }
18357}
18358impl From<UsePathPtr> for SyntaxStablePtrId {
18359 fn from(ptr: UsePathPtr) -> Self {
18360 ptr.untyped()
18361 }
18362}
18363impl From<UsePathLeafPtr> for UsePathPtr {
18364 fn from(value: UsePathLeafPtr) -> Self {
18365 Self(value.0)
18366 }
18367}
18368impl From<UsePathSinglePtr> for UsePathPtr {
18369 fn from(value: UsePathSinglePtr) -> Self {
18370 Self(value.0)
18371 }
18372}
18373impl From<UsePathMultiPtr> for UsePathPtr {
18374 fn from(value: UsePathMultiPtr) -> Self {
18375 Self(value.0)
18376 }
18377}
18378impl From<UsePathStarPtr> for UsePathPtr {
18379 fn from(value: UsePathStarPtr) -> Self {
18380 Self(value.0)
18381 }
18382}
18383impl From<UsePathLeafGreen> for UsePathGreen {
18384 fn from(value: UsePathLeafGreen) -> Self {
18385 Self(value.0)
18386 }
18387}
18388impl From<UsePathSingleGreen> for UsePathGreen {
18389 fn from(value: UsePathSingleGreen) -> Self {
18390 Self(value.0)
18391 }
18392}
18393impl From<UsePathMultiGreen> for UsePathGreen {
18394 fn from(value: UsePathMultiGreen) -> Self {
18395 Self(value.0)
18396 }
18397}
18398impl From<UsePathStarGreen> for UsePathGreen {
18399 fn from(value: UsePathStarGreen) -> Self {
18400 Self(value.0)
18401 }
18402}
18403#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18404pub struct UsePathGreen(pub GreenId);
18405impl TypedSyntaxNode for UsePath {
18406 const OPTIONAL_KIND: Option<SyntaxKind> = None;
18407 type StablePtr = UsePathPtr;
18408 type Green = UsePathGreen;
18409 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18410 panic!("No missing variant.");
18411 }
18412 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18413 let kind = node.kind(db);
18414 match kind {
18415 SyntaxKind::UsePathLeaf => UsePath::Leaf(UsePathLeaf::from_syntax_node(db, node)),
18416 SyntaxKind::UsePathSingle => UsePath::Single(UsePathSingle::from_syntax_node(db, node)),
18417 SyntaxKind::UsePathMulti => UsePath::Multi(UsePathMulti::from_syntax_node(db, node)),
18418 SyntaxKind::UsePathStar => UsePath::Star(UsePathStar::from_syntax_node(db, node)),
18419 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "UsePath"),
18420 }
18421 }
18422 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18423 let kind = node.kind(db);
18424 match kind {
18425 SyntaxKind::UsePathLeaf => Some(UsePath::Leaf(UsePathLeaf::from_syntax_node(db, node))),
18426 SyntaxKind::UsePathSingle => {
18427 Some(UsePath::Single(UsePathSingle::from_syntax_node(db, node)))
18428 }
18429 SyntaxKind::UsePathMulti => {
18430 Some(UsePath::Multi(UsePathMulti::from_syntax_node(db, node)))
18431 }
18432 SyntaxKind::UsePathStar => Some(UsePath::Star(UsePathStar::from_syntax_node(db, node))),
18433 _ => None,
18434 }
18435 }
18436 fn as_syntax_node(&self) -> SyntaxNode {
18437 match self {
18438 UsePath::Leaf(x) => x.as_syntax_node(),
18439 UsePath::Single(x) => x.as_syntax_node(),
18440 UsePath::Multi(x) => x.as_syntax_node(),
18441 UsePath::Star(x) => x.as_syntax_node(),
18442 }
18443 }
18444 fn stable_ptr(&self) -> Self::StablePtr {
18445 UsePathPtr(self.as_syntax_node().0.stable_ptr)
18446 }
18447}
18448impl From<&UsePath> for SyntaxStablePtrId {
18449 fn from(node: &UsePath) -> Self {
18450 node.stable_ptr().untyped()
18451 }
18452}
18453impl UsePath {
18454 pub fn is_variant(kind: SyntaxKind) -> bool {
18456 matches!(
18457 kind,
18458 SyntaxKind::UsePathLeaf
18459 | SyntaxKind::UsePathSingle
18460 | SyntaxKind::UsePathMulti
18461 | SyntaxKind::UsePathStar
18462 )
18463 }
18464}
18465#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18466pub struct UsePathLeaf {
18467 node: SyntaxNode,
18468 children: Arc<[SyntaxNode]>,
18469}
18470impl UsePathLeaf {
18471 pub const INDEX_IDENT: usize = 0;
18472 pub const INDEX_ALIAS_CLAUSE: usize = 1;
18473 pub fn new_green(
18474 db: &dyn SyntaxGroup,
18475 ident: PathSegmentGreen,
18476 alias_clause: OptionAliasClauseGreen,
18477 ) -> UsePathLeafGreen {
18478 let children: Vec<GreenId> = vec![ident.0, alias_clause.0];
18479 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
18480 UsePathLeafGreen(
18481 Arc::new(GreenNode {
18482 kind: SyntaxKind::UsePathLeaf,
18483 details: GreenNodeDetails::Node { children, width },
18484 })
18485 .intern(db),
18486 )
18487 }
18488}
18489impl UsePathLeaf {
18490 pub fn ident(&self, db: &dyn SyntaxGroup) -> PathSegment {
18491 PathSegment::from_syntax_node(db, self.children[0].clone())
18492 }
18493 pub fn alias_clause(&self, db: &dyn SyntaxGroup) -> OptionAliasClause {
18494 OptionAliasClause::from_syntax_node(db, self.children[1].clone())
18495 }
18496}
18497#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18498pub struct UsePathLeafPtr(pub SyntaxStablePtrId);
18499impl UsePathLeafPtr {
18500 pub fn ident_green(self, db: &dyn SyntaxGroup) -> PathSegmentGreen {
18501 let ptr = self.0.lookup_intern(db);
18502 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
18503 PathSegmentGreen(key_fields[0])
18504 } else {
18505 panic!("Unexpected key field query on root.");
18506 }
18507 }
18508 pub fn alias_clause_green(self, db: &dyn SyntaxGroup) -> OptionAliasClauseGreen {
18509 let ptr = self.0.lookup_intern(db);
18510 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
18511 OptionAliasClauseGreen(key_fields[1])
18512 } else {
18513 panic!("Unexpected key field query on root.");
18514 }
18515 }
18516}
18517impl TypedStablePtr for UsePathLeafPtr {
18518 type SyntaxNode = UsePathLeaf;
18519 fn untyped(&self) -> SyntaxStablePtrId {
18520 self.0
18521 }
18522 fn lookup(&self, db: &dyn SyntaxGroup) -> UsePathLeaf {
18523 UsePathLeaf::from_syntax_node(db, self.0.lookup(db))
18524 }
18525}
18526impl From<UsePathLeafPtr> for SyntaxStablePtrId {
18527 fn from(ptr: UsePathLeafPtr) -> Self {
18528 ptr.untyped()
18529 }
18530}
18531#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18532pub struct UsePathLeafGreen(pub GreenId);
18533impl TypedSyntaxNode for UsePathLeaf {
18534 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::UsePathLeaf);
18535 type StablePtr = UsePathLeafPtr;
18536 type Green = UsePathLeafGreen;
18537 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18538 UsePathLeafGreen(
18539 Arc::new(GreenNode {
18540 kind: SyntaxKind::UsePathLeaf,
18541 details: GreenNodeDetails::Node {
18542 children: vec![PathSegment::missing(db).0, OptionAliasClause::missing(db).0],
18543 width: TextWidth::default(),
18544 },
18545 })
18546 .intern(db),
18547 )
18548 }
18549 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18550 let kind = node.kind(db);
18551 assert_eq!(
18552 kind,
18553 SyntaxKind::UsePathLeaf,
18554 "Unexpected SyntaxKind {:?}. Expected {:?}.",
18555 kind,
18556 SyntaxKind::UsePathLeaf
18557 );
18558 let children = db.get_children(node.clone());
18559 Self { node, children }
18560 }
18561 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18562 let kind = node.kind(db);
18563 if kind == SyntaxKind::UsePathLeaf { Some(Self::from_syntax_node(db, node)) } else { None }
18564 }
18565 fn as_syntax_node(&self) -> SyntaxNode {
18566 self.node.clone()
18567 }
18568 fn stable_ptr(&self) -> Self::StablePtr {
18569 UsePathLeafPtr(self.node.0.stable_ptr)
18570 }
18571}
18572impl From<&UsePathLeaf> for SyntaxStablePtrId {
18573 fn from(node: &UsePathLeaf) -> Self {
18574 node.stable_ptr().untyped()
18575 }
18576}
18577#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18578pub struct UsePathSingle {
18579 node: SyntaxNode,
18580 children: Arc<[SyntaxNode]>,
18581}
18582impl UsePathSingle {
18583 pub const INDEX_IDENT: usize = 0;
18584 pub const INDEX_COLON_COLON: usize = 1;
18585 pub const INDEX_USE_PATH: usize = 2;
18586 pub fn new_green(
18587 db: &dyn SyntaxGroup,
18588 ident: PathSegmentGreen,
18589 colon_colon: TerminalColonColonGreen,
18590 use_path: UsePathGreen,
18591 ) -> UsePathSingleGreen {
18592 let children: Vec<GreenId> = vec![ident.0, colon_colon.0, use_path.0];
18593 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
18594 UsePathSingleGreen(
18595 Arc::new(GreenNode {
18596 kind: SyntaxKind::UsePathSingle,
18597 details: GreenNodeDetails::Node { children, width },
18598 })
18599 .intern(db),
18600 )
18601 }
18602}
18603impl UsePathSingle {
18604 pub fn ident(&self, db: &dyn SyntaxGroup) -> PathSegment {
18605 PathSegment::from_syntax_node(db, self.children[0].clone())
18606 }
18607 pub fn colon_colon(&self, db: &dyn SyntaxGroup) -> TerminalColonColon {
18608 TerminalColonColon::from_syntax_node(db, self.children[1].clone())
18609 }
18610 pub fn use_path(&self, db: &dyn SyntaxGroup) -> UsePath {
18611 UsePath::from_syntax_node(db, self.children[2].clone())
18612 }
18613}
18614#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18615pub struct UsePathSinglePtr(pub SyntaxStablePtrId);
18616impl UsePathSinglePtr {}
18617impl TypedStablePtr for UsePathSinglePtr {
18618 type SyntaxNode = UsePathSingle;
18619 fn untyped(&self) -> SyntaxStablePtrId {
18620 self.0
18621 }
18622 fn lookup(&self, db: &dyn SyntaxGroup) -> UsePathSingle {
18623 UsePathSingle::from_syntax_node(db, self.0.lookup(db))
18624 }
18625}
18626impl From<UsePathSinglePtr> for SyntaxStablePtrId {
18627 fn from(ptr: UsePathSinglePtr) -> Self {
18628 ptr.untyped()
18629 }
18630}
18631#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18632pub struct UsePathSingleGreen(pub GreenId);
18633impl TypedSyntaxNode for UsePathSingle {
18634 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::UsePathSingle);
18635 type StablePtr = UsePathSinglePtr;
18636 type Green = UsePathSingleGreen;
18637 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18638 UsePathSingleGreen(
18639 Arc::new(GreenNode {
18640 kind: SyntaxKind::UsePathSingle,
18641 details: GreenNodeDetails::Node {
18642 children: vec![
18643 PathSegment::missing(db).0,
18644 TerminalColonColon::missing(db).0,
18645 UsePath::missing(db).0,
18646 ],
18647 width: TextWidth::default(),
18648 },
18649 })
18650 .intern(db),
18651 )
18652 }
18653 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18654 let kind = node.kind(db);
18655 assert_eq!(
18656 kind,
18657 SyntaxKind::UsePathSingle,
18658 "Unexpected SyntaxKind {:?}. Expected {:?}.",
18659 kind,
18660 SyntaxKind::UsePathSingle
18661 );
18662 let children = db.get_children(node.clone());
18663 Self { node, children }
18664 }
18665 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18666 let kind = node.kind(db);
18667 if kind == SyntaxKind::UsePathSingle {
18668 Some(Self::from_syntax_node(db, node))
18669 } else {
18670 None
18671 }
18672 }
18673 fn as_syntax_node(&self) -> SyntaxNode {
18674 self.node.clone()
18675 }
18676 fn stable_ptr(&self) -> Self::StablePtr {
18677 UsePathSinglePtr(self.node.0.stable_ptr)
18678 }
18679}
18680impl From<&UsePathSingle> for SyntaxStablePtrId {
18681 fn from(node: &UsePathSingle) -> Self {
18682 node.stable_ptr().untyped()
18683 }
18684}
18685#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18686pub struct UsePathMulti {
18687 node: SyntaxNode,
18688 children: Arc<[SyntaxNode]>,
18689}
18690impl UsePathMulti {
18691 pub const INDEX_LBRACE: usize = 0;
18692 pub const INDEX_USE_PATHS: usize = 1;
18693 pub const INDEX_RBRACE: usize = 2;
18694 pub fn new_green(
18695 db: &dyn SyntaxGroup,
18696 lbrace: TerminalLBraceGreen,
18697 use_paths: UsePathListGreen,
18698 rbrace: TerminalRBraceGreen,
18699 ) -> UsePathMultiGreen {
18700 let children: Vec<GreenId> = vec![lbrace.0, use_paths.0, rbrace.0];
18701 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
18702 UsePathMultiGreen(
18703 Arc::new(GreenNode {
18704 kind: SyntaxKind::UsePathMulti,
18705 details: GreenNodeDetails::Node { children, width },
18706 })
18707 .intern(db),
18708 )
18709 }
18710}
18711impl UsePathMulti {
18712 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
18713 TerminalLBrace::from_syntax_node(db, self.children[0].clone())
18714 }
18715 pub fn use_paths(&self, db: &dyn SyntaxGroup) -> UsePathList {
18716 UsePathList::from_syntax_node(db, self.children[1].clone())
18717 }
18718 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
18719 TerminalRBrace::from_syntax_node(db, self.children[2].clone())
18720 }
18721}
18722#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18723pub struct UsePathMultiPtr(pub SyntaxStablePtrId);
18724impl UsePathMultiPtr {}
18725impl TypedStablePtr for UsePathMultiPtr {
18726 type SyntaxNode = UsePathMulti;
18727 fn untyped(&self) -> SyntaxStablePtrId {
18728 self.0
18729 }
18730 fn lookup(&self, db: &dyn SyntaxGroup) -> UsePathMulti {
18731 UsePathMulti::from_syntax_node(db, self.0.lookup(db))
18732 }
18733}
18734impl From<UsePathMultiPtr> for SyntaxStablePtrId {
18735 fn from(ptr: UsePathMultiPtr) -> Self {
18736 ptr.untyped()
18737 }
18738}
18739#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18740pub struct UsePathMultiGreen(pub GreenId);
18741impl TypedSyntaxNode for UsePathMulti {
18742 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::UsePathMulti);
18743 type StablePtr = UsePathMultiPtr;
18744 type Green = UsePathMultiGreen;
18745 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18746 UsePathMultiGreen(
18747 Arc::new(GreenNode {
18748 kind: SyntaxKind::UsePathMulti,
18749 details: GreenNodeDetails::Node {
18750 children: vec![
18751 TerminalLBrace::missing(db).0,
18752 UsePathList::missing(db).0,
18753 TerminalRBrace::missing(db).0,
18754 ],
18755 width: TextWidth::default(),
18756 },
18757 })
18758 .intern(db),
18759 )
18760 }
18761 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18762 let kind = node.kind(db);
18763 assert_eq!(
18764 kind,
18765 SyntaxKind::UsePathMulti,
18766 "Unexpected SyntaxKind {:?}. Expected {:?}.",
18767 kind,
18768 SyntaxKind::UsePathMulti
18769 );
18770 let children = db.get_children(node.clone());
18771 Self { node, children }
18772 }
18773 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18774 let kind = node.kind(db);
18775 if kind == SyntaxKind::UsePathMulti { Some(Self::from_syntax_node(db, node)) } else { None }
18776 }
18777 fn as_syntax_node(&self) -> SyntaxNode {
18778 self.node.clone()
18779 }
18780 fn stable_ptr(&self) -> Self::StablePtr {
18781 UsePathMultiPtr(self.node.0.stable_ptr)
18782 }
18783}
18784impl From<&UsePathMulti> for SyntaxStablePtrId {
18785 fn from(node: &UsePathMulti) -> Self {
18786 node.stable_ptr().untyped()
18787 }
18788}
18789#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18790pub struct UsePathStar {
18791 node: SyntaxNode,
18792 children: Arc<[SyntaxNode]>,
18793}
18794impl UsePathStar {
18795 pub const INDEX_STAR: usize = 0;
18796 pub fn new_green(db: &dyn SyntaxGroup, star: TerminalMulGreen) -> UsePathStarGreen {
18797 let children: Vec<GreenId> = vec![star.0];
18798 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
18799 UsePathStarGreen(
18800 Arc::new(GreenNode {
18801 kind: SyntaxKind::UsePathStar,
18802 details: GreenNodeDetails::Node { children, width },
18803 })
18804 .intern(db),
18805 )
18806 }
18807}
18808impl UsePathStar {
18809 pub fn star(&self, db: &dyn SyntaxGroup) -> TerminalMul {
18810 TerminalMul::from_syntax_node(db, self.children[0].clone())
18811 }
18812}
18813#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18814pub struct UsePathStarPtr(pub SyntaxStablePtrId);
18815impl UsePathStarPtr {}
18816impl TypedStablePtr for UsePathStarPtr {
18817 type SyntaxNode = UsePathStar;
18818 fn untyped(&self) -> SyntaxStablePtrId {
18819 self.0
18820 }
18821 fn lookup(&self, db: &dyn SyntaxGroup) -> UsePathStar {
18822 UsePathStar::from_syntax_node(db, self.0.lookup(db))
18823 }
18824}
18825impl From<UsePathStarPtr> for SyntaxStablePtrId {
18826 fn from(ptr: UsePathStarPtr) -> Self {
18827 ptr.untyped()
18828 }
18829}
18830#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18831pub struct UsePathStarGreen(pub GreenId);
18832impl TypedSyntaxNode for UsePathStar {
18833 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::UsePathStar);
18834 type StablePtr = UsePathStarPtr;
18835 type Green = UsePathStarGreen;
18836 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18837 UsePathStarGreen(
18838 Arc::new(GreenNode {
18839 kind: SyntaxKind::UsePathStar,
18840 details: GreenNodeDetails::Node {
18841 children: vec![TerminalMul::missing(db).0],
18842 width: TextWidth::default(),
18843 },
18844 })
18845 .intern(db),
18846 )
18847 }
18848 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18849 let kind = node.kind(db);
18850 assert_eq!(
18851 kind,
18852 SyntaxKind::UsePathStar,
18853 "Unexpected SyntaxKind {:?}. Expected {:?}.",
18854 kind,
18855 SyntaxKind::UsePathStar
18856 );
18857 let children = db.get_children(node.clone());
18858 Self { node, children }
18859 }
18860 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18861 let kind = node.kind(db);
18862 if kind == SyntaxKind::UsePathStar { Some(Self::from_syntax_node(db, node)) } else { None }
18863 }
18864 fn as_syntax_node(&self) -> SyntaxNode {
18865 self.node.clone()
18866 }
18867 fn stable_ptr(&self) -> Self::StablePtr {
18868 UsePathStarPtr(self.node.0.stable_ptr)
18869 }
18870}
18871impl From<&UsePathStar> for SyntaxStablePtrId {
18872 fn from(node: &UsePathStar) -> Self {
18873 node.stable_ptr().untyped()
18874 }
18875}
18876#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18877pub struct UsePathList(ElementList<UsePath, 2>);
18878impl Deref for UsePathList {
18879 type Target = ElementList<UsePath, 2>;
18880 fn deref(&self) -> &Self::Target {
18881 &self.0
18882 }
18883}
18884impl UsePathList {
18885 pub fn new_green(
18886 db: &dyn SyntaxGroup,
18887 children: Vec<UsePathListElementOrSeparatorGreen>,
18888 ) -> UsePathListGreen {
18889 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
18890 UsePathListGreen(
18891 Arc::new(GreenNode {
18892 kind: SyntaxKind::UsePathList,
18893 details: GreenNodeDetails::Node {
18894 children: children.iter().map(|x| x.id()).collect(),
18895 width,
18896 },
18897 })
18898 .intern(db),
18899 )
18900 }
18901}
18902#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18903pub struct UsePathListPtr(pub SyntaxStablePtrId);
18904impl TypedStablePtr for UsePathListPtr {
18905 type SyntaxNode = UsePathList;
18906 fn untyped(&self) -> SyntaxStablePtrId {
18907 self.0
18908 }
18909 fn lookup(&self, db: &dyn SyntaxGroup) -> UsePathList {
18910 UsePathList::from_syntax_node(db, self.0.lookup(db))
18911 }
18912}
18913impl From<UsePathListPtr> for SyntaxStablePtrId {
18914 fn from(ptr: UsePathListPtr) -> Self {
18915 ptr.untyped()
18916 }
18917}
18918#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18919pub enum UsePathListElementOrSeparatorGreen {
18920 Separator(TerminalCommaGreen),
18921 Element(UsePathGreen),
18922}
18923impl From<TerminalCommaGreen> for UsePathListElementOrSeparatorGreen {
18924 fn from(value: TerminalCommaGreen) -> Self {
18925 UsePathListElementOrSeparatorGreen::Separator(value)
18926 }
18927}
18928impl From<UsePathGreen> for UsePathListElementOrSeparatorGreen {
18929 fn from(value: UsePathGreen) -> Self {
18930 UsePathListElementOrSeparatorGreen::Element(value)
18931 }
18932}
18933impl UsePathListElementOrSeparatorGreen {
18934 fn id(&self) -> GreenId {
18935 match self {
18936 UsePathListElementOrSeparatorGreen::Separator(green) => green.0,
18937 UsePathListElementOrSeparatorGreen::Element(green) => green.0,
18938 }
18939 }
18940}
18941#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18942pub struct UsePathListGreen(pub GreenId);
18943impl TypedSyntaxNode for UsePathList {
18944 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::UsePathList);
18945 type StablePtr = UsePathListPtr;
18946 type Green = UsePathListGreen;
18947 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18948 UsePathListGreen(
18949 Arc::new(GreenNode {
18950 kind: SyntaxKind::UsePathList,
18951 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
18952 })
18953 .intern(db),
18954 )
18955 }
18956 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18957 Self(ElementList::new(node))
18958 }
18959 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18960 if node.kind(db) == SyntaxKind::UsePathList {
18961 Some(Self(ElementList::new(node)))
18962 } else {
18963 None
18964 }
18965 }
18966 fn as_syntax_node(&self) -> SyntaxNode {
18967 self.node.clone()
18968 }
18969 fn stable_ptr(&self) -> Self::StablePtr {
18970 UsePathListPtr(self.node.0.stable_ptr)
18971 }
18972}
18973impl From<&UsePathList> for SyntaxStablePtrId {
18974 fn from(node: &UsePathList) -> Self {
18975 node.stable_ptr().untyped()
18976 }
18977}
18978#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18979pub struct AliasClause {
18980 node: SyntaxNode,
18981 children: Arc<[SyntaxNode]>,
18982}
18983impl AliasClause {
18984 pub const INDEX_AS_KW: usize = 0;
18985 pub const INDEX_ALIAS: usize = 1;
18986 pub fn new_green(
18987 db: &dyn SyntaxGroup,
18988 as_kw: TerminalAsGreen,
18989 alias: TerminalIdentifierGreen,
18990 ) -> AliasClauseGreen {
18991 let children: Vec<GreenId> = vec![as_kw.0, alias.0];
18992 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
18993 AliasClauseGreen(
18994 Arc::new(GreenNode {
18995 kind: SyntaxKind::AliasClause,
18996 details: GreenNodeDetails::Node { children, width },
18997 })
18998 .intern(db),
18999 )
19000 }
19001}
19002impl AliasClause {
19003 pub fn as_kw(&self, db: &dyn SyntaxGroup) -> TerminalAs {
19004 TerminalAs::from_syntax_node(db, self.children[0].clone())
19005 }
19006 pub fn alias(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
19007 TerminalIdentifier::from_syntax_node(db, self.children[1].clone())
19008 }
19009}
19010#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19011pub struct AliasClausePtr(pub SyntaxStablePtrId);
19012impl AliasClausePtr {
19013 pub fn alias_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
19014 let ptr = self.0.lookup_intern(db);
19015 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
19016 TerminalIdentifierGreen(key_fields[0])
19017 } else {
19018 panic!("Unexpected key field query on root.");
19019 }
19020 }
19021}
19022impl TypedStablePtr for AliasClausePtr {
19023 type SyntaxNode = AliasClause;
19024 fn untyped(&self) -> SyntaxStablePtrId {
19025 self.0
19026 }
19027 fn lookup(&self, db: &dyn SyntaxGroup) -> AliasClause {
19028 AliasClause::from_syntax_node(db, self.0.lookup(db))
19029 }
19030}
19031impl From<AliasClausePtr> for SyntaxStablePtrId {
19032 fn from(ptr: AliasClausePtr) -> Self {
19033 ptr.untyped()
19034 }
19035}
19036#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19037pub struct AliasClauseGreen(pub GreenId);
19038impl TypedSyntaxNode for AliasClause {
19039 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::AliasClause);
19040 type StablePtr = AliasClausePtr;
19041 type Green = AliasClauseGreen;
19042 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19043 AliasClauseGreen(
19044 Arc::new(GreenNode {
19045 kind: SyntaxKind::AliasClause,
19046 details: GreenNodeDetails::Node {
19047 children: vec![TerminalAs::missing(db).0, TerminalIdentifier::missing(db).0],
19048 width: TextWidth::default(),
19049 },
19050 })
19051 .intern(db),
19052 )
19053 }
19054 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19055 let kind = node.kind(db);
19056 assert_eq!(
19057 kind,
19058 SyntaxKind::AliasClause,
19059 "Unexpected SyntaxKind {:?}. Expected {:?}.",
19060 kind,
19061 SyntaxKind::AliasClause
19062 );
19063 let children = db.get_children(node.clone());
19064 Self { node, children }
19065 }
19066 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19067 let kind = node.kind(db);
19068 if kind == SyntaxKind::AliasClause { Some(Self::from_syntax_node(db, node)) } else { None }
19069 }
19070 fn as_syntax_node(&self) -> SyntaxNode {
19071 self.node.clone()
19072 }
19073 fn stable_ptr(&self) -> Self::StablePtr {
19074 AliasClausePtr(self.node.0.stable_ptr)
19075 }
19076}
19077impl From<&AliasClause> for SyntaxStablePtrId {
19078 fn from(node: &AliasClause) -> Self {
19079 node.stable_ptr().untyped()
19080 }
19081}
19082#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19083pub enum OptionAliasClause {
19084 Empty(OptionAliasClauseEmpty),
19085 AliasClause(AliasClause),
19086}
19087#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19088pub struct OptionAliasClausePtr(pub SyntaxStablePtrId);
19089impl TypedStablePtr for OptionAliasClausePtr {
19090 type SyntaxNode = OptionAliasClause;
19091 fn untyped(&self) -> SyntaxStablePtrId {
19092 self.0
19093 }
19094 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionAliasClause {
19095 OptionAliasClause::from_syntax_node(db, self.0.lookup(db))
19096 }
19097}
19098impl From<OptionAliasClausePtr> for SyntaxStablePtrId {
19099 fn from(ptr: OptionAliasClausePtr) -> Self {
19100 ptr.untyped()
19101 }
19102}
19103impl From<OptionAliasClauseEmptyPtr> for OptionAliasClausePtr {
19104 fn from(value: OptionAliasClauseEmptyPtr) -> Self {
19105 Self(value.0)
19106 }
19107}
19108impl From<AliasClausePtr> for OptionAliasClausePtr {
19109 fn from(value: AliasClausePtr) -> Self {
19110 Self(value.0)
19111 }
19112}
19113impl From<OptionAliasClauseEmptyGreen> for OptionAliasClauseGreen {
19114 fn from(value: OptionAliasClauseEmptyGreen) -> Self {
19115 Self(value.0)
19116 }
19117}
19118impl From<AliasClauseGreen> for OptionAliasClauseGreen {
19119 fn from(value: AliasClauseGreen) -> Self {
19120 Self(value.0)
19121 }
19122}
19123#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19124pub struct OptionAliasClauseGreen(pub GreenId);
19125impl TypedSyntaxNode for OptionAliasClause {
19126 const OPTIONAL_KIND: Option<SyntaxKind> = None;
19127 type StablePtr = OptionAliasClausePtr;
19128 type Green = OptionAliasClauseGreen;
19129 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19130 panic!("No missing variant.");
19131 }
19132 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19133 let kind = node.kind(db);
19134 match kind {
19135 SyntaxKind::OptionAliasClauseEmpty => {
19136 OptionAliasClause::Empty(OptionAliasClauseEmpty::from_syntax_node(db, node))
19137 }
19138 SyntaxKind::AliasClause => {
19139 OptionAliasClause::AliasClause(AliasClause::from_syntax_node(db, node))
19140 }
19141 _ => panic!(
19142 "Unexpected syntax kind {:?} when constructing {}.",
19143 kind, "OptionAliasClause"
19144 ),
19145 }
19146 }
19147 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19148 let kind = node.kind(db);
19149 match kind {
19150 SyntaxKind::OptionAliasClauseEmpty => {
19151 Some(OptionAliasClause::Empty(OptionAliasClauseEmpty::from_syntax_node(db, node)))
19152 }
19153 SyntaxKind::AliasClause => {
19154 Some(OptionAliasClause::AliasClause(AliasClause::from_syntax_node(db, node)))
19155 }
19156 _ => None,
19157 }
19158 }
19159 fn as_syntax_node(&self) -> SyntaxNode {
19160 match self {
19161 OptionAliasClause::Empty(x) => x.as_syntax_node(),
19162 OptionAliasClause::AliasClause(x) => x.as_syntax_node(),
19163 }
19164 }
19165 fn stable_ptr(&self) -> Self::StablePtr {
19166 OptionAliasClausePtr(self.as_syntax_node().0.stable_ptr)
19167 }
19168}
19169impl From<&OptionAliasClause> for SyntaxStablePtrId {
19170 fn from(node: &OptionAliasClause) -> Self {
19171 node.stable_ptr().untyped()
19172 }
19173}
19174impl OptionAliasClause {
19175 pub fn is_variant(kind: SyntaxKind) -> bool {
19177 matches!(kind, SyntaxKind::OptionAliasClauseEmpty | SyntaxKind::AliasClause)
19178 }
19179}
19180#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19181pub struct OptionAliasClauseEmpty {
19182 node: SyntaxNode,
19183 children: Arc<[SyntaxNode]>,
19184}
19185impl OptionAliasClauseEmpty {
19186 pub fn new_green(db: &dyn SyntaxGroup) -> OptionAliasClauseEmptyGreen {
19187 let children: Vec<GreenId> = vec![];
19188 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
19189 OptionAliasClauseEmptyGreen(
19190 Arc::new(GreenNode {
19191 kind: SyntaxKind::OptionAliasClauseEmpty,
19192 details: GreenNodeDetails::Node { children, width },
19193 })
19194 .intern(db),
19195 )
19196 }
19197}
19198impl OptionAliasClauseEmpty {}
19199#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19200pub struct OptionAliasClauseEmptyPtr(pub SyntaxStablePtrId);
19201impl OptionAliasClauseEmptyPtr {}
19202impl TypedStablePtr for OptionAliasClauseEmptyPtr {
19203 type SyntaxNode = OptionAliasClauseEmpty;
19204 fn untyped(&self) -> SyntaxStablePtrId {
19205 self.0
19206 }
19207 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionAliasClauseEmpty {
19208 OptionAliasClauseEmpty::from_syntax_node(db, self.0.lookup(db))
19209 }
19210}
19211impl From<OptionAliasClauseEmptyPtr> for SyntaxStablePtrId {
19212 fn from(ptr: OptionAliasClauseEmptyPtr) -> Self {
19213 ptr.untyped()
19214 }
19215}
19216#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19217pub struct OptionAliasClauseEmptyGreen(pub GreenId);
19218impl TypedSyntaxNode for OptionAliasClauseEmpty {
19219 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionAliasClauseEmpty);
19220 type StablePtr = OptionAliasClauseEmptyPtr;
19221 type Green = OptionAliasClauseEmptyGreen;
19222 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19223 OptionAliasClauseEmptyGreen(
19224 Arc::new(GreenNode {
19225 kind: SyntaxKind::OptionAliasClauseEmpty,
19226 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
19227 })
19228 .intern(db),
19229 )
19230 }
19231 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19232 let kind = node.kind(db);
19233 assert_eq!(
19234 kind,
19235 SyntaxKind::OptionAliasClauseEmpty,
19236 "Unexpected SyntaxKind {:?}. Expected {:?}.",
19237 kind,
19238 SyntaxKind::OptionAliasClauseEmpty
19239 );
19240 let children = db.get_children(node.clone());
19241 Self { node, children }
19242 }
19243 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19244 let kind = node.kind(db);
19245 if kind == SyntaxKind::OptionAliasClauseEmpty {
19246 Some(Self::from_syntax_node(db, node))
19247 } else {
19248 None
19249 }
19250 }
19251 fn as_syntax_node(&self) -> SyntaxNode {
19252 self.node.clone()
19253 }
19254 fn stable_ptr(&self) -> Self::StablePtr {
19255 OptionAliasClauseEmptyPtr(self.node.0.stable_ptr)
19256 }
19257}
19258impl From<&OptionAliasClauseEmpty> for SyntaxStablePtrId {
19259 fn from(node: &OptionAliasClauseEmpty) -> Self {
19260 node.stable_ptr().untyped()
19261 }
19262}
19263#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19264pub enum GenericArg {
19265 Unnamed(GenericArgUnnamed),
19266 Named(GenericArgNamed),
19267}
19268#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19269pub struct GenericArgPtr(pub SyntaxStablePtrId);
19270impl TypedStablePtr for GenericArgPtr {
19271 type SyntaxNode = GenericArg;
19272 fn untyped(&self) -> SyntaxStablePtrId {
19273 self.0
19274 }
19275 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericArg {
19276 GenericArg::from_syntax_node(db, self.0.lookup(db))
19277 }
19278}
19279impl From<GenericArgPtr> for SyntaxStablePtrId {
19280 fn from(ptr: GenericArgPtr) -> Self {
19281 ptr.untyped()
19282 }
19283}
19284impl From<GenericArgUnnamedPtr> for GenericArgPtr {
19285 fn from(value: GenericArgUnnamedPtr) -> Self {
19286 Self(value.0)
19287 }
19288}
19289impl From<GenericArgNamedPtr> for GenericArgPtr {
19290 fn from(value: GenericArgNamedPtr) -> Self {
19291 Self(value.0)
19292 }
19293}
19294impl From<GenericArgUnnamedGreen> for GenericArgGreen {
19295 fn from(value: GenericArgUnnamedGreen) -> Self {
19296 Self(value.0)
19297 }
19298}
19299impl From<GenericArgNamedGreen> for GenericArgGreen {
19300 fn from(value: GenericArgNamedGreen) -> Self {
19301 Self(value.0)
19302 }
19303}
19304#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19305pub struct GenericArgGreen(pub GreenId);
19306impl TypedSyntaxNode for GenericArg {
19307 const OPTIONAL_KIND: Option<SyntaxKind> = None;
19308 type StablePtr = GenericArgPtr;
19309 type Green = GenericArgGreen;
19310 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19311 panic!("No missing variant.");
19312 }
19313 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19314 let kind = node.kind(db);
19315 match kind {
19316 SyntaxKind::GenericArgUnnamed => {
19317 GenericArg::Unnamed(GenericArgUnnamed::from_syntax_node(db, node))
19318 }
19319 SyntaxKind::GenericArgNamed => {
19320 GenericArg::Named(GenericArgNamed::from_syntax_node(db, node))
19321 }
19322 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "GenericArg"),
19323 }
19324 }
19325 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19326 let kind = node.kind(db);
19327 match kind {
19328 SyntaxKind::GenericArgUnnamed => {
19329 Some(GenericArg::Unnamed(GenericArgUnnamed::from_syntax_node(db, node)))
19330 }
19331 SyntaxKind::GenericArgNamed => {
19332 Some(GenericArg::Named(GenericArgNamed::from_syntax_node(db, node)))
19333 }
19334 _ => None,
19335 }
19336 }
19337 fn as_syntax_node(&self) -> SyntaxNode {
19338 match self {
19339 GenericArg::Unnamed(x) => x.as_syntax_node(),
19340 GenericArg::Named(x) => x.as_syntax_node(),
19341 }
19342 }
19343 fn stable_ptr(&self) -> Self::StablePtr {
19344 GenericArgPtr(self.as_syntax_node().0.stable_ptr)
19345 }
19346}
19347impl From<&GenericArg> for SyntaxStablePtrId {
19348 fn from(node: &GenericArg) -> Self {
19349 node.stable_ptr().untyped()
19350 }
19351}
19352impl GenericArg {
19353 pub fn is_variant(kind: SyntaxKind) -> bool {
19355 matches!(kind, SyntaxKind::GenericArgUnnamed | SyntaxKind::GenericArgNamed)
19356 }
19357}
19358#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19359pub struct GenericArgNamed {
19360 node: SyntaxNode,
19361 children: Arc<[SyntaxNode]>,
19362}
19363impl GenericArgNamed {
19364 pub const INDEX_NAME: usize = 0;
19365 pub const INDEX_COLON: usize = 1;
19366 pub const INDEX_VALUE: usize = 2;
19367 pub fn new_green(
19368 db: &dyn SyntaxGroup,
19369 name: TerminalIdentifierGreen,
19370 colon: TerminalColonGreen,
19371 value: GenericArgValueGreen,
19372 ) -> GenericArgNamedGreen {
19373 let children: Vec<GreenId> = vec![name.0, colon.0, value.0];
19374 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
19375 GenericArgNamedGreen(
19376 Arc::new(GreenNode {
19377 kind: SyntaxKind::GenericArgNamed,
19378 details: GreenNodeDetails::Node { children, width },
19379 })
19380 .intern(db),
19381 )
19382 }
19383}
19384impl GenericArgNamed {
19385 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
19386 TerminalIdentifier::from_syntax_node(db, self.children[0].clone())
19387 }
19388 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
19389 TerminalColon::from_syntax_node(db, self.children[1].clone())
19390 }
19391 pub fn value(&self, db: &dyn SyntaxGroup) -> GenericArgValue {
19392 GenericArgValue::from_syntax_node(db, self.children[2].clone())
19393 }
19394}
19395#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19396pub struct GenericArgNamedPtr(pub SyntaxStablePtrId);
19397impl GenericArgNamedPtr {}
19398impl TypedStablePtr for GenericArgNamedPtr {
19399 type SyntaxNode = GenericArgNamed;
19400 fn untyped(&self) -> SyntaxStablePtrId {
19401 self.0
19402 }
19403 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericArgNamed {
19404 GenericArgNamed::from_syntax_node(db, self.0.lookup(db))
19405 }
19406}
19407impl From<GenericArgNamedPtr> for SyntaxStablePtrId {
19408 fn from(ptr: GenericArgNamedPtr) -> Self {
19409 ptr.untyped()
19410 }
19411}
19412#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19413pub struct GenericArgNamedGreen(pub GreenId);
19414impl TypedSyntaxNode for GenericArgNamed {
19415 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericArgNamed);
19416 type StablePtr = GenericArgNamedPtr;
19417 type Green = GenericArgNamedGreen;
19418 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19419 GenericArgNamedGreen(
19420 Arc::new(GreenNode {
19421 kind: SyntaxKind::GenericArgNamed,
19422 details: GreenNodeDetails::Node {
19423 children: vec![
19424 TerminalIdentifier::missing(db).0,
19425 TerminalColon::missing(db).0,
19426 GenericArgValue::missing(db).0,
19427 ],
19428 width: TextWidth::default(),
19429 },
19430 })
19431 .intern(db),
19432 )
19433 }
19434 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19435 let kind = node.kind(db);
19436 assert_eq!(
19437 kind,
19438 SyntaxKind::GenericArgNamed,
19439 "Unexpected SyntaxKind {:?}. Expected {:?}.",
19440 kind,
19441 SyntaxKind::GenericArgNamed
19442 );
19443 let children = db.get_children(node.clone());
19444 Self { node, children }
19445 }
19446 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19447 let kind = node.kind(db);
19448 if kind == SyntaxKind::GenericArgNamed {
19449 Some(Self::from_syntax_node(db, node))
19450 } else {
19451 None
19452 }
19453 }
19454 fn as_syntax_node(&self) -> SyntaxNode {
19455 self.node.clone()
19456 }
19457 fn stable_ptr(&self) -> Self::StablePtr {
19458 GenericArgNamedPtr(self.node.0.stable_ptr)
19459 }
19460}
19461impl From<&GenericArgNamed> for SyntaxStablePtrId {
19462 fn from(node: &GenericArgNamed) -> Self {
19463 node.stable_ptr().untyped()
19464 }
19465}
19466#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19467pub struct GenericArgUnnamed {
19468 node: SyntaxNode,
19469 children: Arc<[SyntaxNode]>,
19470}
19471impl GenericArgUnnamed {
19472 pub const INDEX_VALUE: usize = 0;
19473 pub fn new_green(db: &dyn SyntaxGroup, value: GenericArgValueGreen) -> GenericArgUnnamedGreen {
19474 let children: Vec<GreenId> = vec![value.0];
19475 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
19476 GenericArgUnnamedGreen(
19477 Arc::new(GreenNode {
19478 kind: SyntaxKind::GenericArgUnnamed,
19479 details: GreenNodeDetails::Node { children, width },
19480 })
19481 .intern(db),
19482 )
19483 }
19484}
19485impl GenericArgUnnamed {
19486 pub fn value(&self, db: &dyn SyntaxGroup) -> GenericArgValue {
19487 GenericArgValue::from_syntax_node(db, self.children[0].clone())
19488 }
19489}
19490#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19491pub struct GenericArgUnnamedPtr(pub SyntaxStablePtrId);
19492impl GenericArgUnnamedPtr {}
19493impl TypedStablePtr for GenericArgUnnamedPtr {
19494 type SyntaxNode = GenericArgUnnamed;
19495 fn untyped(&self) -> SyntaxStablePtrId {
19496 self.0
19497 }
19498 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericArgUnnamed {
19499 GenericArgUnnamed::from_syntax_node(db, self.0.lookup(db))
19500 }
19501}
19502impl From<GenericArgUnnamedPtr> for SyntaxStablePtrId {
19503 fn from(ptr: GenericArgUnnamedPtr) -> Self {
19504 ptr.untyped()
19505 }
19506}
19507#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19508pub struct GenericArgUnnamedGreen(pub GreenId);
19509impl TypedSyntaxNode for GenericArgUnnamed {
19510 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericArgUnnamed);
19511 type StablePtr = GenericArgUnnamedPtr;
19512 type Green = GenericArgUnnamedGreen;
19513 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19514 GenericArgUnnamedGreen(
19515 Arc::new(GreenNode {
19516 kind: SyntaxKind::GenericArgUnnamed,
19517 details: GreenNodeDetails::Node {
19518 children: vec![GenericArgValue::missing(db).0],
19519 width: TextWidth::default(),
19520 },
19521 })
19522 .intern(db),
19523 )
19524 }
19525 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19526 let kind = node.kind(db);
19527 assert_eq!(
19528 kind,
19529 SyntaxKind::GenericArgUnnamed,
19530 "Unexpected SyntaxKind {:?}. Expected {:?}.",
19531 kind,
19532 SyntaxKind::GenericArgUnnamed
19533 );
19534 let children = db.get_children(node.clone());
19535 Self { node, children }
19536 }
19537 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19538 let kind = node.kind(db);
19539 if kind == SyntaxKind::GenericArgUnnamed {
19540 Some(Self::from_syntax_node(db, node))
19541 } else {
19542 None
19543 }
19544 }
19545 fn as_syntax_node(&self) -> SyntaxNode {
19546 self.node.clone()
19547 }
19548 fn stable_ptr(&self) -> Self::StablePtr {
19549 GenericArgUnnamedPtr(self.node.0.stable_ptr)
19550 }
19551}
19552impl From<&GenericArgUnnamed> for SyntaxStablePtrId {
19553 fn from(node: &GenericArgUnnamed) -> Self {
19554 node.stable_ptr().untyped()
19555 }
19556}
19557#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19558pub enum GenericArgValue {
19559 Expr(GenericArgValueExpr),
19560 Underscore(TerminalUnderscore),
19561}
19562#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19563pub struct GenericArgValuePtr(pub SyntaxStablePtrId);
19564impl TypedStablePtr for GenericArgValuePtr {
19565 type SyntaxNode = GenericArgValue;
19566 fn untyped(&self) -> SyntaxStablePtrId {
19567 self.0
19568 }
19569 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericArgValue {
19570 GenericArgValue::from_syntax_node(db, self.0.lookup(db))
19571 }
19572}
19573impl From<GenericArgValuePtr> for SyntaxStablePtrId {
19574 fn from(ptr: GenericArgValuePtr) -> Self {
19575 ptr.untyped()
19576 }
19577}
19578impl From<GenericArgValueExprPtr> for GenericArgValuePtr {
19579 fn from(value: GenericArgValueExprPtr) -> Self {
19580 Self(value.0)
19581 }
19582}
19583impl From<TerminalUnderscorePtr> for GenericArgValuePtr {
19584 fn from(value: TerminalUnderscorePtr) -> Self {
19585 Self(value.0)
19586 }
19587}
19588impl From<GenericArgValueExprGreen> for GenericArgValueGreen {
19589 fn from(value: GenericArgValueExprGreen) -> Self {
19590 Self(value.0)
19591 }
19592}
19593impl From<TerminalUnderscoreGreen> for GenericArgValueGreen {
19594 fn from(value: TerminalUnderscoreGreen) -> Self {
19595 Self(value.0)
19596 }
19597}
19598#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19599pub struct GenericArgValueGreen(pub GreenId);
19600impl TypedSyntaxNode for GenericArgValue {
19601 const OPTIONAL_KIND: Option<SyntaxKind> = None;
19602 type StablePtr = GenericArgValuePtr;
19603 type Green = GenericArgValueGreen;
19604 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19605 panic!("No missing variant.");
19606 }
19607 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19608 let kind = node.kind(db);
19609 match kind {
19610 SyntaxKind::GenericArgValueExpr => {
19611 GenericArgValue::Expr(GenericArgValueExpr::from_syntax_node(db, node))
19612 }
19613 SyntaxKind::TerminalUnderscore => {
19614 GenericArgValue::Underscore(TerminalUnderscore::from_syntax_node(db, node))
19615 }
19616 _ => {
19617 panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "GenericArgValue")
19618 }
19619 }
19620 }
19621 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19622 let kind = node.kind(db);
19623 match kind {
19624 SyntaxKind::GenericArgValueExpr => {
19625 Some(GenericArgValue::Expr(GenericArgValueExpr::from_syntax_node(db, node)))
19626 }
19627 SyntaxKind::TerminalUnderscore => {
19628 Some(GenericArgValue::Underscore(TerminalUnderscore::from_syntax_node(db, node)))
19629 }
19630 _ => None,
19631 }
19632 }
19633 fn as_syntax_node(&self) -> SyntaxNode {
19634 match self {
19635 GenericArgValue::Expr(x) => x.as_syntax_node(),
19636 GenericArgValue::Underscore(x) => x.as_syntax_node(),
19637 }
19638 }
19639 fn stable_ptr(&self) -> Self::StablePtr {
19640 GenericArgValuePtr(self.as_syntax_node().0.stable_ptr)
19641 }
19642}
19643impl From<&GenericArgValue> for SyntaxStablePtrId {
19644 fn from(node: &GenericArgValue) -> Self {
19645 node.stable_ptr().untyped()
19646 }
19647}
19648impl GenericArgValue {
19649 pub fn is_variant(kind: SyntaxKind) -> bool {
19651 matches!(kind, SyntaxKind::GenericArgValueExpr | SyntaxKind::TerminalUnderscore)
19652 }
19653}
19654#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19655pub struct GenericArgValueExpr {
19656 node: SyntaxNode,
19657 children: Arc<[SyntaxNode]>,
19658}
19659impl GenericArgValueExpr {
19660 pub const INDEX_EXPR: usize = 0;
19661 pub fn new_green(db: &dyn SyntaxGroup, expr: ExprGreen) -> GenericArgValueExprGreen {
19662 let children: Vec<GreenId> = vec![expr.0];
19663 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
19664 GenericArgValueExprGreen(
19665 Arc::new(GreenNode {
19666 kind: SyntaxKind::GenericArgValueExpr,
19667 details: GreenNodeDetails::Node { children, width },
19668 })
19669 .intern(db),
19670 )
19671 }
19672}
19673impl GenericArgValueExpr {
19674 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
19675 Expr::from_syntax_node(db, self.children[0].clone())
19676 }
19677}
19678#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19679pub struct GenericArgValueExprPtr(pub SyntaxStablePtrId);
19680impl GenericArgValueExprPtr {}
19681impl TypedStablePtr for GenericArgValueExprPtr {
19682 type SyntaxNode = GenericArgValueExpr;
19683 fn untyped(&self) -> SyntaxStablePtrId {
19684 self.0
19685 }
19686 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericArgValueExpr {
19687 GenericArgValueExpr::from_syntax_node(db, self.0.lookup(db))
19688 }
19689}
19690impl From<GenericArgValueExprPtr> for SyntaxStablePtrId {
19691 fn from(ptr: GenericArgValueExprPtr) -> Self {
19692 ptr.untyped()
19693 }
19694}
19695#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19696pub struct GenericArgValueExprGreen(pub GreenId);
19697impl TypedSyntaxNode for GenericArgValueExpr {
19698 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericArgValueExpr);
19699 type StablePtr = GenericArgValueExprPtr;
19700 type Green = GenericArgValueExprGreen;
19701 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19702 GenericArgValueExprGreen(
19703 Arc::new(GreenNode {
19704 kind: SyntaxKind::GenericArgValueExpr,
19705 details: GreenNodeDetails::Node {
19706 children: vec![Expr::missing(db).0],
19707 width: TextWidth::default(),
19708 },
19709 })
19710 .intern(db),
19711 )
19712 }
19713 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19714 let kind = node.kind(db);
19715 assert_eq!(
19716 kind,
19717 SyntaxKind::GenericArgValueExpr,
19718 "Unexpected SyntaxKind {:?}. Expected {:?}.",
19719 kind,
19720 SyntaxKind::GenericArgValueExpr
19721 );
19722 let children = db.get_children(node.clone());
19723 Self { node, children }
19724 }
19725 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19726 let kind = node.kind(db);
19727 if kind == SyntaxKind::GenericArgValueExpr {
19728 Some(Self::from_syntax_node(db, node))
19729 } else {
19730 None
19731 }
19732 }
19733 fn as_syntax_node(&self) -> SyntaxNode {
19734 self.node.clone()
19735 }
19736 fn stable_ptr(&self) -> Self::StablePtr {
19737 GenericArgValueExprPtr(self.node.0.stable_ptr)
19738 }
19739}
19740impl From<&GenericArgValueExpr> for SyntaxStablePtrId {
19741 fn from(node: &GenericArgValueExpr) -> Self {
19742 node.stable_ptr().untyped()
19743 }
19744}
19745#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19746pub struct GenericArgs {
19747 node: SyntaxNode,
19748 children: Arc<[SyntaxNode]>,
19749}
19750impl GenericArgs {
19751 pub const INDEX_LANGLE: usize = 0;
19752 pub const INDEX_GENERIC_ARGS: usize = 1;
19753 pub const INDEX_RANGLE: usize = 2;
19754 pub fn new_green(
19755 db: &dyn SyntaxGroup,
19756 langle: TerminalLTGreen,
19757 generic_args: GenericArgListGreen,
19758 rangle: TerminalGTGreen,
19759 ) -> GenericArgsGreen {
19760 let children: Vec<GreenId> = vec![langle.0, generic_args.0, rangle.0];
19761 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
19762 GenericArgsGreen(
19763 Arc::new(GreenNode {
19764 kind: SyntaxKind::GenericArgs,
19765 details: GreenNodeDetails::Node { children, width },
19766 })
19767 .intern(db),
19768 )
19769 }
19770}
19771impl GenericArgs {
19772 pub fn langle(&self, db: &dyn SyntaxGroup) -> TerminalLT {
19773 TerminalLT::from_syntax_node(db, self.children[0].clone())
19774 }
19775 pub fn generic_args(&self, db: &dyn SyntaxGroup) -> GenericArgList {
19776 GenericArgList::from_syntax_node(db, self.children[1].clone())
19777 }
19778 pub fn rangle(&self, db: &dyn SyntaxGroup) -> TerminalGT {
19779 TerminalGT::from_syntax_node(db, self.children[2].clone())
19780 }
19781}
19782#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19783pub struct GenericArgsPtr(pub SyntaxStablePtrId);
19784impl GenericArgsPtr {}
19785impl TypedStablePtr for GenericArgsPtr {
19786 type SyntaxNode = GenericArgs;
19787 fn untyped(&self) -> SyntaxStablePtrId {
19788 self.0
19789 }
19790 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericArgs {
19791 GenericArgs::from_syntax_node(db, self.0.lookup(db))
19792 }
19793}
19794impl From<GenericArgsPtr> for SyntaxStablePtrId {
19795 fn from(ptr: GenericArgsPtr) -> Self {
19796 ptr.untyped()
19797 }
19798}
19799#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19800pub struct GenericArgsGreen(pub GreenId);
19801impl TypedSyntaxNode for GenericArgs {
19802 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericArgs);
19803 type StablePtr = GenericArgsPtr;
19804 type Green = GenericArgsGreen;
19805 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19806 GenericArgsGreen(
19807 Arc::new(GreenNode {
19808 kind: SyntaxKind::GenericArgs,
19809 details: GreenNodeDetails::Node {
19810 children: vec![
19811 TerminalLT::missing(db).0,
19812 GenericArgList::missing(db).0,
19813 TerminalGT::missing(db).0,
19814 ],
19815 width: TextWidth::default(),
19816 },
19817 })
19818 .intern(db),
19819 )
19820 }
19821 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19822 let kind = node.kind(db);
19823 assert_eq!(
19824 kind,
19825 SyntaxKind::GenericArgs,
19826 "Unexpected SyntaxKind {:?}. Expected {:?}.",
19827 kind,
19828 SyntaxKind::GenericArgs
19829 );
19830 let children = db.get_children(node.clone());
19831 Self { node, children }
19832 }
19833 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19834 let kind = node.kind(db);
19835 if kind == SyntaxKind::GenericArgs { Some(Self::from_syntax_node(db, node)) } else { None }
19836 }
19837 fn as_syntax_node(&self) -> SyntaxNode {
19838 self.node.clone()
19839 }
19840 fn stable_ptr(&self) -> Self::StablePtr {
19841 GenericArgsPtr(self.node.0.stable_ptr)
19842 }
19843}
19844impl From<&GenericArgs> for SyntaxStablePtrId {
19845 fn from(node: &GenericArgs) -> Self {
19846 node.stable_ptr().untyped()
19847 }
19848}
19849#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19850pub struct GenericArgList(ElementList<GenericArg, 2>);
19851impl Deref for GenericArgList {
19852 type Target = ElementList<GenericArg, 2>;
19853 fn deref(&self) -> &Self::Target {
19854 &self.0
19855 }
19856}
19857impl GenericArgList {
19858 pub fn new_green(
19859 db: &dyn SyntaxGroup,
19860 children: Vec<GenericArgListElementOrSeparatorGreen>,
19861 ) -> GenericArgListGreen {
19862 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
19863 GenericArgListGreen(
19864 Arc::new(GreenNode {
19865 kind: SyntaxKind::GenericArgList,
19866 details: GreenNodeDetails::Node {
19867 children: children.iter().map(|x| x.id()).collect(),
19868 width,
19869 },
19870 })
19871 .intern(db),
19872 )
19873 }
19874}
19875#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19876pub struct GenericArgListPtr(pub SyntaxStablePtrId);
19877impl TypedStablePtr for GenericArgListPtr {
19878 type SyntaxNode = GenericArgList;
19879 fn untyped(&self) -> SyntaxStablePtrId {
19880 self.0
19881 }
19882 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericArgList {
19883 GenericArgList::from_syntax_node(db, self.0.lookup(db))
19884 }
19885}
19886impl From<GenericArgListPtr> for SyntaxStablePtrId {
19887 fn from(ptr: GenericArgListPtr) -> Self {
19888 ptr.untyped()
19889 }
19890}
19891#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19892pub enum GenericArgListElementOrSeparatorGreen {
19893 Separator(TerminalCommaGreen),
19894 Element(GenericArgGreen),
19895}
19896impl From<TerminalCommaGreen> for GenericArgListElementOrSeparatorGreen {
19897 fn from(value: TerminalCommaGreen) -> Self {
19898 GenericArgListElementOrSeparatorGreen::Separator(value)
19899 }
19900}
19901impl From<GenericArgGreen> for GenericArgListElementOrSeparatorGreen {
19902 fn from(value: GenericArgGreen) -> Self {
19903 GenericArgListElementOrSeparatorGreen::Element(value)
19904 }
19905}
19906impl GenericArgListElementOrSeparatorGreen {
19907 fn id(&self) -> GreenId {
19908 match self {
19909 GenericArgListElementOrSeparatorGreen::Separator(green) => green.0,
19910 GenericArgListElementOrSeparatorGreen::Element(green) => green.0,
19911 }
19912 }
19913}
19914#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19915pub struct GenericArgListGreen(pub GreenId);
19916impl TypedSyntaxNode for GenericArgList {
19917 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericArgList);
19918 type StablePtr = GenericArgListPtr;
19919 type Green = GenericArgListGreen;
19920 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19921 GenericArgListGreen(
19922 Arc::new(GreenNode {
19923 kind: SyntaxKind::GenericArgList,
19924 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
19925 })
19926 .intern(db),
19927 )
19928 }
19929 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19930 Self(ElementList::new(node))
19931 }
19932 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19933 if node.kind(db) == SyntaxKind::GenericArgList {
19934 Some(Self(ElementList::new(node)))
19935 } else {
19936 None
19937 }
19938 }
19939 fn as_syntax_node(&self) -> SyntaxNode {
19940 self.node.clone()
19941 }
19942 fn stable_ptr(&self) -> Self::StablePtr {
19943 GenericArgListPtr(self.node.0.stable_ptr)
19944 }
19945}
19946impl From<&GenericArgList> for SyntaxStablePtrId {
19947 fn from(node: &GenericArgList) -> Self {
19948 node.stable_ptr().untyped()
19949 }
19950}
19951#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19952pub struct AssociatedItemConstraint {
19953 node: SyntaxNode,
19954 children: Arc<[SyntaxNode]>,
19955}
19956impl AssociatedItemConstraint {
19957 pub const INDEX_ITEM: usize = 0;
19958 pub const INDEX_COLON: usize = 1;
19959 pub const INDEX_VALUE: usize = 2;
19960 pub fn new_green(
19961 db: &dyn SyntaxGroup,
19962 item: TerminalIdentifierGreen,
19963 colon: TerminalColonGreen,
19964 value: ExprGreen,
19965 ) -> AssociatedItemConstraintGreen {
19966 let children: Vec<GreenId> = vec![item.0, colon.0, value.0];
19967 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
19968 AssociatedItemConstraintGreen(
19969 Arc::new(GreenNode {
19970 kind: SyntaxKind::AssociatedItemConstraint,
19971 details: GreenNodeDetails::Node { children, width },
19972 })
19973 .intern(db),
19974 )
19975 }
19976}
19977impl AssociatedItemConstraint {
19978 pub fn item(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
19979 TerminalIdentifier::from_syntax_node(db, self.children[0].clone())
19980 }
19981 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
19982 TerminalColon::from_syntax_node(db, self.children[1].clone())
19983 }
19984 pub fn value(&self, db: &dyn SyntaxGroup) -> Expr {
19985 Expr::from_syntax_node(db, self.children[2].clone())
19986 }
19987}
19988#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19989pub struct AssociatedItemConstraintPtr(pub SyntaxStablePtrId);
19990impl AssociatedItemConstraintPtr {}
19991impl TypedStablePtr for AssociatedItemConstraintPtr {
19992 type SyntaxNode = AssociatedItemConstraint;
19993 fn untyped(&self) -> SyntaxStablePtrId {
19994 self.0
19995 }
19996 fn lookup(&self, db: &dyn SyntaxGroup) -> AssociatedItemConstraint {
19997 AssociatedItemConstraint::from_syntax_node(db, self.0.lookup(db))
19998 }
19999}
20000impl From<AssociatedItemConstraintPtr> for SyntaxStablePtrId {
20001 fn from(ptr: AssociatedItemConstraintPtr) -> Self {
20002 ptr.untyped()
20003 }
20004}
20005#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20006pub struct AssociatedItemConstraintGreen(pub GreenId);
20007impl TypedSyntaxNode for AssociatedItemConstraint {
20008 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::AssociatedItemConstraint);
20009 type StablePtr = AssociatedItemConstraintPtr;
20010 type Green = AssociatedItemConstraintGreen;
20011 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20012 AssociatedItemConstraintGreen(
20013 Arc::new(GreenNode {
20014 kind: SyntaxKind::AssociatedItemConstraint,
20015 details: GreenNodeDetails::Node {
20016 children: vec![
20017 TerminalIdentifier::missing(db).0,
20018 TerminalColon::missing(db).0,
20019 Expr::missing(db).0,
20020 ],
20021 width: TextWidth::default(),
20022 },
20023 })
20024 .intern(db),
20025 )
20026 }
20027 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20028 let kind = node.kind(db);
20029 assert_eq!(
20030 kind,
20031 SyntaxKind::AssociatedItemConstraint,
20032 "Unexpected SyntaxKind {:?}. Expected {:?}.",
20033 kind,
20034 SyntaxKind::AssociatedItemConstraint
20035 );
20036 let children = db.get_children(node.clone());
20037 Self { node, children }
20038 }
20039 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20040 let kind = node.kind(db);
20041 if kind == SyntaxKind::AssociatedItemConstraint {
20042 Some(Self::from_syntax_node(db, node))
20043 } else {
20044 None
20045 }
20046 }
20047 fn as_syntax_node(&self) -> SyntaxNode {
20048 self.node.clone()
20049 }
20050 fn stable_ptr(&self) -> Self::StablePtr {
20051 AssociatedItemConstraintPtr(self.node.0.stable_ptr)
20052 }
20053}
20054impl From<&AssociatedItemConstraint> for SyntaxStablePtrId {
20055 fn from(node: &AssociatedItemConstraint) -> Self {
20056 node.stable_ptr().untyped()
20057 }
20058}
20059#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20060pub struct AssociatedItemConstraints {
20061 node: SyntaxNode,
20062 children: Arc<[SyntaxNode]>,
20063}
20064impl AssociatedItemConstraints {
20065 pub const INDEX_LBRACK: usize = 0;
20066 pub const INDEX_ASSOCIATED_ITEM_CONSTRAINTS: usize = 1;
20067 pub const INDEX_RBRACK: usize = 2;
20068 pub fn new_green(
20069 db: &dyn SyntaxGroup,
20070 lbrack: TerminalLBrackGreen,
20071 associated_item_constraints: AssociatedItemConstraintListGreen,
20072 rbrack: TerminalRBrackGreen,
20073 ) -> AssociatedItemConstraintsGreen {
20074 let children: Vec<GreenId> = vec![lbrack.0, associated_item_constraints.0, rbrack.0];
20075 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
20076 AssociatedItemConstraintsGreen(
20077 Arc::new(GreenNode {
20078 kind: SyntaxKind::AssociatedItemConstraints,
20079 details: GreenNodeDetails::Node { children, width },
20080 })
20081 .intern(db),
20082 )
20083 }
20084}
20085impl AssociatedItemConstraints {
20086 pub fn lbrack(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
20087 TerminalLBrack::from_syntax_node(db, self.children[0].clone())
20088 }
20089 pub fn associated_item_constraints(
20090 &self,
20091 db: &dyn SyntaxGroup,
20092 ) -> AssociatedItemConstraintList {
20093 AssociatedItemConstraintList::from_syntax_node(db, self.children[1].clone())
20094 }
20095 pub fn rbrack(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
20096 TerminalRBrack::from_syntax_node(db, self.children[2].clone())
20097 }
20098}
20099#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20100pub struct AssociatedItemConstraintsPtr(pub SyntaxStablePtrId);
20101impl AssociatedItemConstraintsPtr {}
20102impl TypedStablePtr for AssociatedItemConstraintsPtr {
20103 type SyntaxNode = AssociatedItemConstraints;
20104 fn untyped(&self) -> SyntaxStablePtrId {
20105 self.0
20106 }
20107 fn lookup(&self, db: &dyn SyntaxGroup) -> AssociatedItemConstraints {
20108 AssociatedItemConstraints::from_syntax_node(db, self.0.lookup(db))
20109 }
20110}
20111impl From<AssociatedItemConstraintsPtr> for SyntaxStablePtrId {
20112 fn from(ptr: AssociatedItemConstraintsPtr) -> Self {
20113 ptr.untyped()
20114 }
20115}
20116#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20117pub struct AssociatedItemConstraintsGreen(pub GreenId);
20118impl TypedSyntaxNode for AssociatedItemConstraints {
20119 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::AssociatedItemConstraints);
20120 type StablePtr = AssociatedItemConstraintsPtr;
20121 type Green = AssociatedItemConstraintsGreen;
20122 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20123 AssociatedItemConstraintsGreen(
20124 Arc::new(GreenNode {
20125 kind: SyntaxKind::AssociatedItemConstraints,
20126 details: GreenNodeDetails::Node {
20127 children: vec![
20128 TerminalLBrack::missing(db).0,
20129 AssociatedItemConstraintList::missing(db).0,
20130 TerminalRBrack::missing(db).0,
20131 ],
20132 width: TextWidth::default(),
20133 },
20134 })
20135 .intern(db),
20136 )
20137 }
20138 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20139 let kind = node.kind(db);
20140 assert_eq!(
20141 kind,
20142 SyntaxKind::AssociatedItemConstraints,
20143 "Unexpected SyntaxKind {:?}. Expected {:?}.",
20144 kind,
20145 SyntaxKind::AssociatedItemConstraints
20146 );
20147 let children = db.get_children(node.clone());
20148 Self { node, children }
20149 }
20150 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20151 let kind = node.kind(db);
20152 if kind == SyntaxKind::AssociatedItemConstraints {
20153 Some(Self::from_syntax_node(db, node))
20154 } else {
20155 None
20156 }
20157 }
20158 fn as_syntax_node(&self) -> SyntaxNode {
20159 self.node.clone()
20160 }
20161 fn stable_ptr(&self) -> Self::StablePtr {
20162 AssociatedItemConstraintsPtr(self.node.0.stable_ptr)
20163 }
20164}
20165impl From<&AssociatedItemConstraints> for SyntaxStablePtrId {
20166 fn from(node: &AssociatedItemConstraints) -> Self {
20167 node.stable_ptr().untyped()
20168 }
20169}
20170#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20171pub struct AssociatedItemConstraintList(ElementList<AssociatedItemConstraint, 2>);
20172impl Deref for AssociatedItemConstraintList {
20173 type Target = ElementList<AssociatedItemConstraint, 2>;
20174 fn deref(&self) -> &Self::Target {
20175 &self.0
20176 }
20177}
20178impl AssociatedItemConstraintList {
20179 pub fn new_green(
20180 db: &dyn SyntaxGroup,
20181 children: Vec<AssociatedItemConstraintListElementOrSeparatorGreen>,
20182 ) -> AssociatedItemConstraintListGreen {
20183 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
20184 AssociatedItemConstraintListGreen(
20185 Arc::new(GreenNode {
20186 kind: SyntaxKind::AssociatedItemConstraintList,
20187 details: GreenNodeDetails::Node {
20188 children: children.iter().map(|x| x.id()).collect(),
20189 width,
20190 },
20191 })
20192 .intern(db),
20193 )
20194 }
20195}
20196#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20197pub struct AssociatedItemConstraintListPtr(pub SyntaxStablePtrId);
20198impl TypedStablePtr for AssociatedItemConstraintListPtr {
20199 type SyntaxNode = AssociatedItemConstraintList;
20200 fn untyped(&self) -> SyntaxStablePtrId {
20201 self.0
20202 }
20203 fn lookup(&self, db: &dyn SyntaxGroup) -> AssociatedItemConstraintList {
20204 AssociatedItemConstraintList::from_syntax_node(db, self.0.lookup(db))
20205 }
20206}
20207impl From<AssociatedItemConstraintListPtr> for SyntaxStablePtrId {
20208 fn from(ptr: AssociatedItemConstraintListPtr) -> Self {
20209 ptr.untyped()
20210 }
20211}
20212#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20213pub enum AssociatedItemConstraintListElementOrSeparatorGreen {
20214 Separator(TerminalCommaGreen),
20215 Element(AssociatedItemConstraintGreen),
20216}
20217impl From<TerminalCommaGreen> for AssociatedItemConstraintListElementOrSeparatorGreen {
20218 fn from(value: TerminalCommaGreen) -> Self {
20219 AssociatedItemConstraintListElementOrSeparatorGreen::Separator(value)
20220 }
20221}
20222impl From<AssociatedItemConstraintGreen> for AssociatedItemConstraintListElementOrSeparatorGreen {
20223 fn from(value: AssociatedItemConstraintGreen) -> Self {
20224 AssociatedItemConstraintListElementOrSeparatorGreen::Element(value)
20225 }
20226}
20227impl AssociatedItemConstraintListElementOrSeparatorGreen {
20228 fn id(&self) -> GreenId {
20229 match self {
20230 AssociatedItemConstraintListElementOrSeparatorGreen::Separator(green) => green.0,
20231 AssociatedItemConstraintListElementOrSeparatorGreen::Element(green) => green.0,
20232 }
20233 }
20234}
20235#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20236pub struct AssociatedItemConstraintListGreen(pub GreenId);
20237impl TypedSyntaxNode for AssociatedItemConstraintList {
20238 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::AssociatedItemConstraintList);
20239 type StablePtr = AssociatedItemConstraintListPtr;
20240 type Green = AssociatedItemConstraintListGreen;
20241 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20242 AssociatedItemConstraintListGreen(
20243 Arc::new(GreenNode {
20244 kind: SyntaxKind::AssociatedItemConstraintList,
20245 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
20246 })
20247 .intern(db),
20248 )
20249 }
20250 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20251 Self(ElementList::new(node))
20252 }
20253 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20254 if node.kind(db) == SyntaxKind::AssociatedItemConstraintList {
20255 Some(Self(ElementList::new(node)))
20256 } else {
20257 None
20258 }
20259 }
20260 fn as_syntax_node(&self) -> SyntaxNode {
20261 self.node.clone()
20262 }
20263 fn stable_ptr(&self) -> Self::StablePtr {
20264 AssociatedItemConstraintListPtr(self.node.0.stable_ptr)
20265 }
20266}
20267impl From<&AssociatedItemConstraintList> for SyntaxStablePtrId {
20268 fn from(node: &AssociatedItemConstraintList) -> Self {
20269 node.stable_ptr().untyped()
20270 }
20271}
20272#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20273pub enum OptionAssociatedItemConstraints {
20274 Empty(OptionAssociatedItemConstraintsEmpty),
20275 AssociatedItemConstraints(AssociatedItemConstraints),
20276}
20277#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20278pub struct OptionAssociatedItemConstraintsPtr(pub SyntaxStablePtrId);
20279impl TypedStablePtr for OptionAssociatedItemConstraintsPtr {
20280 type SyntaxNode = OptionAssociatedItemConstraints;
20281 fn untyped(&self) -> SyntaxStablePtrId {
20282 self.0
20283 }
20284 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionAssociatedItemConstraints {
20285 OptionAssociatedItemConstraints::from_syntax_node(db, self.0.lookup(db))
20286 }
20287}
20288impl From<OptionAssociatedItemConstraintsPtr> for SyntaxStablePtrId {
20289 fn from(ptr: OptionAssociatedItemConstraintsPtr) -> Self {
20290 ptr.untyped()
20291 }
20292}
20293impl From<OptionAssociatedItemConstraintsEmptyPtr> for OptionAssociatedItemConstraintsPtr {
20294 fn from(value: OptionAssociatedItemConstraintsEmptyPtr) -> Self {
20295 Self(value.0)
20296 }
20297}
20298impl From<AssociatedItemConstraintsPtr> for OptionAssociatedItemConstraintsPtr {
20299 fn from(value: AssociatedItemConstraintsPtr) -> Self {
20300 Self(value.0)
20301 }
20302}
20303impl From<OptionAssociatedItemConstraintsEmptyGreen> for OptionAssociatedItemConstraintsGreen {
20304 fn from(value: OptionAssociatedItemConstraintsEmptyGreen) -> Self {
20305 Self(value.0)
20306 }
20307}
20308impl From<AssociatedItemConstraintsGreen> for OptionAssociatedItemConstraintsGreen {
20309 fn from(value: AssociatedItemConstraintsGreen) -> Self {
20310 Self(value.0)
20311 }
20312}
20313#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20314pub struct OptionAssociatedItemConstraintsGreen(pub GreenId);
20315impl TypedSyntaxNode for OptionAssociatedItemConstraints {
20316 const OPTIONAL_KIND: Option<SyntaxKind> = None;
20317 type StablePtr = OptionAssociatedItemConstraintsPtr;
20318 type Green = OptionAssociatedItemConstraintsGreen;
20319 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20320 panic!("No missing variant.");
20321 }
20322 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20323 let kind = node.kind(db);
20324 match kind {
20325 SyntaxKind::OptionAssociatedItemConstraintsEmpty => {
20326 OptionAssociatedItemConstraints::Empty(
20327 OptionAssociatedItemConstraintsEmpty::from_syntax_node(db, node),
20328 )
20329 }
20330 SyntaxKind::AssociatedItemConstraints => {
20331 OptionAssociatedItemConstraints::AssociatedItemConstraints(
20332 AssociatedItemConstraints::from_syntax_node(db, node),
20333 )
20334 }
20335 _ => panic!(
20336 "Unexpected syntax kind {:?} when constructing {}.",
20337 kind, "OptionAssociatedItemConstraints"
20338 ),
20339 }
20340 }
20341 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20342 let kind = node.kind(db);
20343 match kind {
20344 SyntaxKind::OptionAssociatedItemConstraintsEmpty => {
20345 Some(OptionAssociatedItemConstraints::Empty(
20346 OptionAssociatedItemConstraintsEmpty::from_syntax_node(db, node),
20347 ))
20348 }
20349 SyntaxKind::AssociatedItemConstraints => {
20350 Some(OptionAssociatedItemConstraints::AssociatedItemConstraints(
20351 AssociatedItemConstraints::from_syntax_node(db, node),
20352 ))
20353 }
20354 _ => None,
20355 }
20356 }
20357 fn as_syntax_node(&self) -> SyntaxNode {
20358 match self {
20359 OptionAssociatedItemConstraints::Empty(x) => x.as_syntax_node(),
20360 OptionAssociatedItemConstraints::AssociatedItemConstraints(x) => x.as_syntax_node(),
20361 }
20362 }
20363 fn stable_ptr(&self) -> Self::StablePtr {
20364 OptionAssociatedItemConstraintsPtr(self.as_syntax_node().0.stable_ptr)
20365 }
20366}
20367impl From<&OptionAssociatedItemConstraints> for SyntaxStablePtrId {
20368 fn from(node: &OptionAssociatedItemConstraints) -> Self {
20369 node.stable_ptr().untyped()
20370 }
20371}
20372impl OptionAssociatedItemConstraints {
20373 pub fn is_variant(kind: SyntaxKind) -> bool {
20375 matches!(
20376 kind,
20377 SyntaxKind::OptionAssociatedItemConstraintsEmpty
20378 | SyntaxKind::AssociatedItemConstraints
20379 )
20380 }
20381}
20382#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20383pub struct OptionAssociatedItemConstraintsEmpty {
20384 node: SyntaxNode,
20385 children: Arc<[SyntaxNode]>,
20386}
20387impl OptionAssociatedItemConstraintsEmpty {
20388 pub fn new_green(db: &dyn SyntaxGroup) -> OptionAssociatedItemConstraintsEmptyGreen {
20389 let children: Vec<GreenId> = vec![];
20390 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
20391 OptionAssociatedItemConstraintsEmptyGreen(
20392 Arc::new(GreenNode {
20393 kind: SyntaxKind::OptionAssociatedItemConstraintsEmpty,
20394 details: GreenNodeDetails::Node { children, width },
20395 })
20396 .intern(db),
20397 )
20398 }
20399}
20400impl OptionAssociatedItemConstraintsEmpty {}
20401#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20402pub struct OptionAssociatedItemConstraintsEmptyPtr(pub SyntaxStablePtrId);
20403impl OptionAssociatedItemConstraintsEmptyPtr {}
20404impl TypedStablePtr for OptionAssociatedItemConstraintsEmptyPtr {
20405 type SyntaxNode = OptionAssociatedItemConstraintsEmpty;
20406 fn untyped(&self) -> SyntaxStablePtrId {
20407 self.0
20408 }
20409 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionAssociatedItemConstraintsEmpty {
20410 OptionAssociatedItemConstraintsEmpty::from_syntax_node(db, self.0.lookup(db))
20411 }
20412}
20413impl From<OptionAssociatedItemConstraintsEmptyPtr> for SyntaxStablePtrId {
20414 fn from(ptr: OptionAssociatedItemConstraintsEmptyPtr) -> Self {
20415 ptr.untyped()
20416 }
20417}
20418#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20419pub struct OptionAssociatedItemConstraintsEmptyGreen(pub GreenId);
20420impl TypedSyntaxNode for OptionAssociatedItemConstraintsEmpty {
20421 const OPTIONAL_KIND: Option<SyntaxKind> =
20422 Some(SyntaxKind::OptionAssociatedItemConstraintsEmpty);
20423 type StablePtr = OptionAssociatedItemConstraintsEmptyPtr;
20424 type Green = OptionAssociatedItemConstraintsEmptyGreen;
20425 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20426 OptionAssociatedItemConstraintsEmptyGreen(
20427 Arc::new(GreenNode {
20428 kind: SyntaxKind::OptionAssociatedItemConstraintsEmpty,
20429 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
20430 })
20431 .intern(db),
20432 )
20433 }
20434 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20435 let kind = node.kind(db);
20436 assert_eq!(
20437 kind,
20438 SyntaxKind::OptionAssociatedItemConstraintsEmpty,
20439 "Unexpected SyntaxKind {:?}. Expected {:?}.",
20440 kind,
20441 SyntaxKind::OptionAssociatedItemConstraintsEmpty
20442 );
20443 let children = db.get_children(node.clone());
20444 Self { node, children }
20445 }
20446 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20447 let kind = node.kind(db);
20448 if kind == SyntaxKind::OptionAssociatedItemConstraintsEmpty {
20449 Some(Self::from_syntax_node(db, node))
20450 } else {
20451 None
20452 }
20453 }
20454 fn as_syntax_node(&self) -> SyntaxNode {
20455 self.node.clone()
20456 }
20457 fn stable_ptr(&self) -> Self::StablePtr {
20458 OptionAssociatedItemConstraintsEmptyPtr(self.node.0.stable_ptr)
20459 }
20460}
20461impl From<&OptionAssociatedItemConstraintsEmpty> for SyntaxStablePtrId {
20462 fn from(node: &OptionAssociatedItemConstraintsEmpty) -> Self {
20463 node.stable_ptr().untyped()
20464 }
20465}
20466#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20467pub enum OptionWrappedGenericParamList {
20468 Empty(OptionWrappedGenericParamListEmpty),
20469 WrappedGenericParamList(WrappedGenericParamList),
20470}
20471#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20472pub struct OptionWrappedGenericParamListPtr(pub SyntaxStablePtrId);
20473impl TypedStablePtr for OptionWrappedGenericParamListPtr {
20474 type SyntaxNode = OptionWrappedGenericParamList;
20475 fn untyped(&self) -> SyntaxStablePtrId {
20476 self.0
20477 }
20478 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
20479 OptionWrappedGenericParamList::from_syntax_node(db, self.0.lookup(db))
20480 }
20481}
20482impl From<OptionWrappedGenericParamListPtr> for SyntaxStablePtrId {
20483 fn from(ptr: OptionWrappedGenericParamListPtr) -> Self {
20484 ptr.untyped()
20485 }
20486}
20487impl From<OptionWrappedGenericParamListEmptyPtr> for OptionWrappedGenericParamListPtr {
20488 fn from(value: OptionWrappedGenericParamListEmptyPtr) -> Self {
20489 Self(value.0)
20490 }
20491}
20492impl From<WrappedGenericParamListPtr> for OptionWrappedGenericParamListPtr {
20493 fn from(value: WrappedGenericParamListPtr) -> Self {
20494 Self(value.0)
20495 }
20496}
20497impl From<OptionWrappedGenericParamListEmptyGreen> for OptionWrappedGenericParamListGreen {
20498 fn from(value: OptionWrappedGenericParamListEmptyGreen) -> Self {
20499 Self(value.0)
20500 }
20501}
20502impl From<WrappedGenericParamListGreen> for OptionWrappedGenericParamListGreen {
20503 fn from(value: WrappedGenericParamListGreen) -> Self {
20504 Self(value.0)
20505 }
20506}
20507#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20508pub struct OptionWrappedGenericParamListGreen(pub GreenId);
20509impl TypedSyntaxNode for OptionWrappedGenericParamList {
20510 const OPTIONAL_KIND: Option<SyntaxKind> = None;
20511 type StablePtr = OptionWrappedGenericParamListPtr;
20512 type Green = OptionWrappedGenericParamListGreen;
20513 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20514 panic!("No missing variant.");
20515 }
20516 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20517 let kind = node.kind(db);
20518 match kind {
20519 SyntaxKind::OptionWrappedGenericParamListEmpty => OptionWrappedGenericParamList::Empty(
20520 OptionWrappedGenericParamListEmpty::from_syntax_node(db, node),
20521 ),
20522 SyntaxKind::WrappedGenericParamList => {
20523 OptionWrappedGenericParamList::WrappedGenericParamList(
20524 WrappedGenericParamList::from_syntax_node(db, node),
20525 )
20526 }
20527 _ => panic!(
20528 "Unexpected syntax kind {:?} when constructing {}.",
20529 kind, "OptionWrappedGenericParamList"
20530 ),
20531 }
20532 }
20533 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20534 let kind = node.kind(db);
20535 match kind {
20536 SyntaxKind::OptionWrappedGenericParamListEmpty => {
20537 Some(OptionWrappedGenericParamList::Empty(
20538 OptionWrappedGenericParamListEmpty::from_syntax_node(db, node),
20539 ))
20540 }
20541 SyntaxKind::WrappedGenericParamList => {
20542 Some(OptionWrappedGenericParamList::WrappedGenericParamList(
20543 WrappedGenericParamList::from_syntax_node(db, node),
20544 ))
20545 }
20546 _ => None,
20547 }
20548 }
20549 fn as_syntax_node(&self) -> SyntaxNode {
20550 match self {
20551 OptionWrappedGenericParamList::Empty(x) => x.as_syntax_node(),
20552 OptionWrappedGenericParamList::WrappedGenericParamList(x) => x.as_syntax_node(),
20553 }
20554 }
20555 fn stable_ptr(&self) -> Self::StablePtr {
20556 OptionWrappedGenericParamListPtr(self.as_syntax_node().0.stable_ptr)
20557 }
20558}
20559impl From<&OptionWrappedGenericParamList> for SyntaxStablePtrId {
20560 fn from(node: &OptionWrappedGenericParamList) -> Self {
20561 node.stable_ptr().untyped()
20562 }
20563}
20564impl OptionWrappedGenericParamList {
20565 pub fn is_variant(kind: SyntaxKind) -> bool {
20567 matches!(
20568 kind,
20569 SyntaxKind::OptionWrappedGenericParamListEmpty | SyntaxKind::WrappedGenericParamList
20570 )
20571 }
20572}
20573#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20574pub struct OptionWrappedGenericParamListEmpty {
20575 node: SyntaxNode,
20576 children: Arc<[SyntaxNode]>,
20577}
20578impl OptionWrappedGenericParamListEmpty {
20579 pub fn new_green(db: &dyn SyntaxGroup) -> OptionWrappedGenericParamListEmptyGreen {
20580 let children: Vec<GreenId> = vec![];
20581 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
20582 OptionWrappedGenericParamListEmptyGreen(
20583 Arc::new(GreenNode {
20584 kind: SyntaxKind::OptionWrappedGenericParamListEmpty,
20585 details: GreenNodeDetails::Node { children, width },
20586 })
20587 .intern(db),
20588 )
20589 }
20590}
20591impl OptionWrappedGenericParamListEmpty {}
20592#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20593pub struct OptionWrappedGenericParamListEmptyPtr(pub SyntaxStablePtrId);
20594impl OptionWrappedGenericParamListEmptyPtr {}
20595impl TypedStablePtr for OptionWrappedGenericParamListEmptyPtr {
20596 type SyntaxNode = OptionWrappedGenericParamListEmpty;
20597 fn untyped(&self) -> SyntaxStablePtrId {
20598 self.0
20599 }
20600 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamListEmpty {
20601 OptionWrappedGenericParamListEmpty::from_syntax_node(db, self.0.lookup(db))
20602 }
20603}
20604impl From<OptionWrappedGenericParamListEmptyPtr> for SyntaxStablePtrId {
20605 fn from(ptr: OptionWrappedGenericParamListEmptyPtr) -> Self {
20606 ptr.untyped()
20607 }
20608}
20609#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20610pub struct OptionWrappedGenericParamListEmptyGreen(pub GreenId);
20611impl TypedSyntaxNode for OptionWrappedGenericParamListEmpty {
20612 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionWrappedGenericParamListEmpty);
20613 type StablePtr = OptionWrappedGenericParamListEmptyPtr;
20614 type Green = OptionWrappedGenericParamListEmptyGreen;
20615 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20616 OptionWrappedGenericParamListEmptyGreen(
20617 Arc::new(GreenNode {
20618 kind: SyntaxKind::OptionWrappedGenericParamListEmpty,
20619 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
20620 })
20621 .intern(db),
20622 )
20623 }
20624 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20625 let kind = node.kind(db);
20626 assert_eq!(
20627 kind,
20628 SyntaxKind::OptionWrappedGenericParamListEmpty,
20629 "Unexpected SyntaxKind {:?}. Expected {:?}.",
20630 kind,
20631 SyntaxKind::OptionWrappedGenericParamListEmpty
20632 );
20633 let children = db.get_children(node.clone());
20634 Self { node, children }
20635 }
20636 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20637 let kind = node.kind(db);
20638 if kind == SyntaxKind::OptionWrappedGenericParamListEmpty {
20639 Some(Self::from_syntax_node(db, node))
20640 } else {
20641 None
20642 }
20643 }
20644 fn as_syntax_node(&self) -> SyntaxNode {
20645 self.node.clone()
20646 }
20647 fn stable_ptr(&self) -> Self::StablePtr {
20648 OptionWrappedGenericParamListEmptyPtr(self.node.0.stable_ptr)
20649 }
20650}
20651impl From<&OptionWrappedGenericParamListEmpty> for SyntaxStablePtrId {
20652 fn from(node: &OptionWrappedGenericParamListEmpty) -> Self {
20653 node.stable_ptr().untyped()
20654 }
20655}
20656#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20657pub struct WrappedGenericParamList {
20658 node: SyntaxNode,
20659 children: Arc<[SyntaxNode]>,
20660}
20661impl WrappedGenericParamList {
20662 pub const INDEX_LANGLE: usize = 0;
20663 pub const INDEX_GENERIC_PARAMS: usize = 1;
20664 pub const INDEX_RANGLE: usize = 2;
20665 pub fn new_green(
20666 db: &dyn SyntaxGroup,
20667 langle: TerminalLTGreen,
20668 generic_params: GenericParamListGreen,
20669 rangle: TerminalGTGreen,
20670 ) -> WrappedGenericParamListGreen {
20671 let children: Vec<GreenId> = vec![langle.0, generic_params.0, rangle.0];
20672 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
20673 WrappedGenericParamListGreen(
20674 Arc::new(GreenNode {
20675 kind: SyntaxKind::WrappedGenericParamList,
20676 details: GreenNodeDetails::Node { children, width },
20677 })
20678 .intern(db),
20679 )
20680 }
20681}
20682impl WrappedGenericParamList {
20683 pub fn langle(&self, db: &dyn SyntaxGroup) -> TerminalLT {
20684 TerminalLT::from_syntax_node(db, self.children[0].clone())
20685 }
20686 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> GenericParamList {
20687 GenericParamList::from_syntax_node(db, self.children[1].clone())
20688 }
20689 pub fn rangle(&self, db: &dyn SyntaxGroup) -> TerminalGT {
20690 TerminalGT::from_syntax_node(db, self.children[2].clone())
20691 }
20692}
20693#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20694pub struct WrappedGenericParamListPtr(pub SyntaxStablePtrId);
20695impl WrappedGenericParamListPtr {}
20696impl TypedStablePtr for WrappedGenericParamListPtr {
20697 type SyntaxNode = WrappedGenericParamList;
20698 fn untyped(&self) -> SyntaxStablePtrId {
20699 self.0
20700 }
20701 fn lookup(&self, db: &dyn SyntaxGroup) -> WrappedGenericParamList {
20702 WrappedGenericParamList::from_syntax_node(db, self.0.lookup(db))
20703 }
20704}
20705impl From<WrappedGenericParamListPtr> for SyntaxStablePtrId {
20706 fn from(ptr: WrappedGenericParamListPtr) -> Self {
20707 ptr.untyped()
20708 }
20709}
20710#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20711pub struct WrappedGenericParamListGreen(pub GreenId);
20712impl TypedSyntaxNode for WrappedGenericParamList {
20713 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::WrappedGenericParamList);
20714 type StablePtr = WrappedGenericParamListPtr;
20715 type Green = WrappedGenericParamListGreen;
20716 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20717 WrappedGenericParamListGreen(
20718 Arc::new(GreenNode {
20719 kind: SyntaxKind::WrappedGenericParamList,
20720 details: GreenNodeDetails::Node {
20721 children: vec![
20722 TerminalLT::missing(db).0,
20723 GenericParamList::missing(db).0,
20724 TerminalGT::missing(db).0,
20725 ],
20726 width: TextWidth::default(),
20727 },
20728 })
20729 .intern(db),
20730 )
20731 }
20732 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20733 let kind = node.kind(db);
20734 assert_eq!(
20735 kind,
20736 SyntaxKind::WrappedGenericParamList,
20737 "Unexpected SyntaxKind {:?}. Expected {:?}.",
20738 kind,
20739 SyntaxKind::WrappedGenericParamList
20740 );
20741 let children = db.get_children(node.clone());
20742 Self { node, children }
20743 }
20744 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20745 let kind = node.kind(db);
20746 if kind == SyntaxKind::WrappedGenericParamList {
20747 Some(Self::from_syntax_node(db, node))
20748 } else {
20749 None
20750 }
20751 }
20752 fn as_syntax_node(&self) -> SyntaxNode {
20753 self.node.clone()
20754 }
20755 fn stable_ptr(&self) -> Self::StablePtr {
20756 WrappedGenericParamListPtr(self.node.0.stable_ptr)
20757 }
20758}
20759impl From<&WrappedGenericParamList> for SyntaxStablePtrId {
20760 fn from(node: &WrappedGenericParamList) -> Self {
20761 node.stable_ptr().untyped()
20762 }
20763}
20764#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20765pub struct GenericParamList(ElementList<GenericParam, 2>);
20766impl Deref for GenericParamList {
20767 type Target = ElementList<GenericParam, 2>;
20768 fn deref(&self) -> &Self::Target {
20769 &self.0
20770 }
20771}
20772impl GenericParamList {
20773 pub fn new_green(
20774 db: &dyn SyntaxGroup,
20775 children: Vec<GenericParamListElementOrSeparatorGreen>,
20776 ) -> GenericParamListGreen {
20777 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
20778 GenericParamListGreen(
20779 Arc::new(GreenNode {
20780 kind: SyntaxKind::GenericParamList,
20781 details: GreenNodeDetails::Node {
20782 children: children.iter().map(|x| x.id()).collect(),
20783 width,
20784 },
20785 })
20786 .intern(db),
20787 )
20788 }
20789}
20790#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20791pub struct GenericParamListPtr(pub SyntaxStablePtrId);
20792impl TypedStablePtr for GenericParamListPtr {
20793 type SyntaxNode = GenericParamList;
20794 fn untyped(&self) -> SyntaxStablePtrId {
20795 self.0
20796 }
20797 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericParamList {
20798 GenericParamList::from_syntax_node(db, self.0.lookup(db))
20799 }
20800}
20801impl From<GenericParamListPtr> for SyntaxStablePtrId {
20802 fn from(ptr: GenericParamListPtr) -> Self {
20803 ptr.untyped()
20804 }
20805}
20806#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20807pub enum GenericParamListElementOrSeparatorGreen {
20808 Separator(TerminalCommaGreen),
20809 Element(GenericParamGreen),
20810}
20811impl From<TerminalCommaGreen> for GenericParamListElementOrSeparatorGreen {
20812 fn from(value: TerminalCommaGreen) -> Self {
20813 GenericParamListElementOrSeparatorGreen::Separator(value)
20814 }
20815}
20816impl From<GenericParamGreen> for GenericParamListElementOrSeparatorGreen {
20817 fn from(value: GenericParamGreen) -> Self {
20818 GenericParamListElementOrSeparatorGreen::Element(value)
20819 }
20820}
20821impl GenericParamListElementOrSeparatorGreen {
20822 fn id(&self) -> GreenId {
20823 match self {
20824 GenericParamListElementOrSeparatorGreen::Separator(green) => green.0,
20825 GenericParamListElementOrSeparatorGreen::Element(green) => green.0,
20826 }
20827 }
20828}
20829#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20830pub struct GenericParamListGreen(pub GreenId);
20831impl TypedSyntaxNode for GenericParamList {
20832 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericParamList);
20833 type StablePtr = GenericParamListPtr;
20834 type Green = GenericParamListGreen;
20835 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20836 GenericParamListGreen(
20837 Arc::new(GreenNode {
20838 kind: SyntaxKind::GenericParamList,
20839 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
20840 })
20841 .intern(db),
20842 )
20843 }
20844 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20845 Self(ElementList::new(node))
20846 }
20847 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20848 if node.kind(db) == SyntaxKind::GenericParamList {
20849 Some(Self(ElementList::new(node)))
20850 } else {
20851 None
20852 }
20853 }
20854 fn as_syntax_node(&self) -> SyntaxNode {
20855 self.node.clone()
20856 }
20857 fn stable_ptr(&self) -> Self::StablePtr {
20858 GenericParamListPtr(self.node.0.stable_ptr)
20859 }
20860}
20861impl From<&GenericParamList> for SyntaxStablePtrId {
20862 fn from(node: &GenericParamList) -> Self {
20863 node.stable_ptr().untyped()
20864 }
20865}
20866#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20867pub enum GenericParam {
20868 Type(GenericParamType),
20869 Const(GenericParamConst),
20870 ImplNamed(GenericParamImplNamed),
20871 ImplAnonymous(GenericParamImplAnonymous),
20872 NegativeImpl(GenericParamNegativeImpl),
20873}
20874#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20875pub struct GenericParamPtr(pub SyntaxStablePtrId);
20876impl TypedStablePtr for GenericParamPtr {
20877 type SyntaxNode = GenericParam;
20878 fn untyped(&self) -> SyntaxStablePtrId {
20879 self.0
20880 }
20881 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericParam {
20882 GenericParam::from_syntax_node(db, self.0.lookup(db))
20883 }
20884}
20885impl From<GenericParamPtr> for SyntaxStablePtrId {
20886 fn from(ptr: GenericParamPtr) -> Self {
20887 ptr.untyped()
20888 }
20889}
20890impl From<GenericParamTypePtr> for GenericParamPtr {
20891 fn from(value: GenericParamTypePtr) -> Self {
20892 Self(value.0)
20893 }
20894}
20895impl From<GenericParamConstPtr> for GenericParamPtr {
20896 fn from(value: GenericParamConstPtr) -> Self {
20897 Self(value.0)
20898 }
20899}
20900impl From<GenericParamImplNamedPtr> for GenericParamPtr {
20901 fn from(value: GenericParamImplNamedPtr) -> Self {
20902 Self(value.0)
20903 }
20904}
20905impl From<GenericParamImplAnonymousPtr> for GenericParamPtr {
20906 fn from(value: GenericParamImplAnonymousPtr) -> Self {
20907 Self(value.0)
20908 }
20909}
20910impl From<GenericParamNegativeImplPtr> for GenericParamPtr {
20911 fn from(value: GenericParamNegativeImplPtr) -> Self {
20912 Self(value.0)
20913 }
20914}
20915impl From<GenericParamTypeGreen> for GenericParamGreen {
20916 fn from(value: GenericParamTypeGreen) -> Self {
20917 Self(value.0)
20918 }
20919}
20920impl From<GenericParamConstGreen> for GenericParamGreen {
20921 fn from(value: GenericParamConstGreen) -> Self {
20922 Self(value.0)
20923 }
20924}
20925impl From<GenericParamImplNamedGreen> for GenericParamGreen {
20926 fn from(value: GenericParamImplNamedGreen) -> Self {
20927 Self(value.0)
20928 }
20929}
20930impl From<GenericParamImplAnonymousGreen> for GenericParamGreen {
20931 fn from(value: GenericParamImplAnonymousGreen) -> Self {
20932 Self(value.0)
20933 }
20934}
20935impl From<GenericParamNegativeImplGreen> for GenericParamGreen {
20936 fn from(value: GenericParamNegativeImplGreen) -> Self {
20937 Self(value.0)
20938 }
20939}
20940#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20941pub struct GenericParamGreen(pub GreenId);
20942impl TypedSyntaxNode for GenericParam {
20943 const OPTIONAL_KIND: Option<SyntaxKind> = None;
20944 type StablePtr = GenericParamPtr;
20945 type Green = GenericParamGreen;
20946 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20947 panic!("No missing variant.");
20948 }
20949 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20950 let kind = node.kind(db);
20951 match kind {
20952 SyntaxKind::GenericParamType => {
20953 GenericParam::Type(GenericParamType::from_syntax_node(db, node))
20954 }
20955 SyntaxKind::GenericParamConst => {
20956 GenericParam::Const(GenericParamConst::from_syntax_node(db, node))
20957 }
20958 SyntaxKind::GenericParamImplNamed => {
20959 GenericParam::ImplNamed(GenericParamImplNamed::from_syntax_node(db, node))
20960 }
20961 SyntaxKind::GenericParamImplAnonymous => {
20962 GenericParam::ImplAnonymous(GenericParamImplAnonymous::from_syntax_node(db, node))
20963 }
20964 SyntaxKind::GenericParamNegativeImpl => {
20965 GenericParam::NegativeImpl(GenericParamNegativeImpl::from_syntax_node(db, node))
20966 }
20967 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "GenericParam"),
20968 }
20969 }
20970 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20971 let kind = node.kind(db);
20972 match kind {
20973 SyntaxKind::GenericParamType => {
20974 Some(GenericParam::Type(GenericParamType::from_syntax_node(db, node)))
20975 }
20976 SyntaxKind::GenericParamConst => {
20977 Some(GenericParam::Const(GenericParamConst::from_syntax_node(db, node)))
20978 }
20979 SyntaxKind::GenericParamImplNamed => {
20980 Some(GenericParam::ImplNamed(GenericParamImplNamed::from_syntax_node(db, node)))
20981 }
20982 SyntaxKind::GenericParamImplAnonymous => Some(GenericParam::ImplAnonymous(
20983 GenericParamImplAnonymous::from_syntax_node(db, node),
20984 )),
20985 SyntaxKind::GenericParamNegativeImpl => Some(GenericParam::NegativeImpl(
20986 GenericParamNegativeImpl::from_syntax_node(db, node),
20987 )),
20988 _ => None,
20989 }
20990 }
20991 fn as_syntax_node(&self) -> SyntaxNode {
20992 match self {
20993 GenericParam::Type(x) => x.as_syntax_node(),
20994 GenericParam::Const(x) => x.as_syntax_node(),
20995 GenericParam::ImplNamed(x) => x.as_syntax_node(),
20996 GenericParam::ImplAnonymous(x) => x.as_syntax_node(),
20997 GenericParam::NegativeImpl(x) => x.as_syntax_node(),
20998 }
20999 }
21000 fn stable_ptr(&self) -> Self::StablePtr {
21001 GenericParamPtr(self.as_syntax_node().0.stable_ptr)
21002 }
21003}
21004impl From<&GenericParam> for SyntaxStablePtrId {
21005 fn from(node: &GenericParam) -> Self {
21006 node.stable_ptr().untyped()
21007 }
21008}
21009impl GenericParam {
21010 pub fn is_variant(kind: SyntaxKind) -> bool {
21012 matches!(
21013 kind,
21014 SyntaxKind::GenericParamType
21015 | SyntaxKind::GenericParamConst
21016 | SyntaxKind::GenericParamImplNamed
21017 | SyntaxKind::GenericParamImplAnonymous
21018 | SyntaxKind::GenericParamNegativeImpl
21019 )
21020 }
21021}
21022#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21023pub struct GenericParamType {
21024 node: SyntaxNode,
21025 children: Arc<[SyntaxNode]>,
21026}
21027impl GenericParamType {
21028 pub const INDEX_NAME: usize = 0;
21029 pub fn new_green(db: &dyn SyntaxGroup, name: TerminalIdentifierGreen) -> GenericParamTypeGreen {
21030 let children: Vec<GreenId> = vec![name.0];
21031 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
21032 GenericParamTypeGreen(
21033 Arc::new(GreenNode {
21034 kind: SyntaxKind::GenericParamType,
21035 details: GreenNodeDetails::Node { children, width },
21036 })
21037 .intern(db),
21038 )
21039 }
21040}
21041impl GenericParamType {
21042 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
21043 TerminalIdentifier::from_syntax_node(db, self.children[0].clone())
21044 }
21045}
21046#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21047pub struct GenericParamTypePtr(pub SyntaxStablePtrId);
21048impl GenericParamTypePtr {
21049 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
21050 let ptr = self.0.lookup_intern(db);
21051 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
21052 TerminalIdentifierGreen(key_fields[0])
21053 } else {
21054 panic!("Unexpected key field query on root.");
21055 }
21056 }
21057}
21058impl TypedStablePtr for GenericParamTypePtr {
21059 type SyntaxNode = GenericParamType;
21060 fn untyped(&self) -> SyntaxStablePtrId {
21061 self.0
21062 }
21063 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericParamType {
21064 GenericParamType::from_syntax_node(db, self.0.lookup(db))
21065 }
21066}
21067impl From<GenericParamTypePtr> for SyntaxStablePtrId {
21068 fn from(ptr: GenericParamTypePtr) -> Self {
21069 ptr.untyped()
21070 }
21071}
21072#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21073pub struct GenericParamTypeGreen(pub GreenId);
21074impl TypedSyntaxNode for GenericParamType {
21075 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericParamType);
21076 type StablePtr = GenericParamTypePtr;
21077 type Green = GenericParamTypeGreen;
21078 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21079 GenericParamTypeGreen(
21080 Arc::new(GreenNode {
21081 kind: SyntaxKind::GenericParamType,
21082 details: GreenNodeDetails::Node {
21083 children: vec![TerminalIdentifier::missing(db).0],
21084 width: TextWidth::default(),
21085 },
21086 })
21087 .intern(db),
21088 )
21089 }
21090 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21091 let kind = node.kind(db);
21092 assert_eq!(
21093 kind,
21094 SyntaxKind::GenericParamType,
21095 "Unexpected SyntaxKind {:?}. Expected {:?}.",
21096 kind,
21097 SyntaxKind::GenericParamType
21098 );
21099 let children = db.get_children(node.clone());
21100 Self { node, children }
21101 }
21102 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21103 let kind = node.kind(db);
21104 if kind == SyntaxKind::GenericParamType {
21105 Some(Self::from_syntax_node(db, node))
21106 } else {
21107 None
21108 }
21109 }
21110 fn as_syntax_node(&self) -> SyntaxNode {
21111 self.node.clone()
21112 }
21113 fn stable_ptr(&self) -> Self::StablePtr {
21114 GenericParamTypePtr(self.node.0.stable_ptr)
21115 }
21116}
21117impl From<&GenericParamType> for SyntaxStablePtrId {
21118 fn from(node: &GenericParamType) -> Self {
21119 node.stable_ptr().untyped()
21120 }
21121}
21122#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21123pub struct GenericParamConst {
21124 node: SyntaxNode,
21125 children: Arc<[SyntaxNode]>,
21126}
21127impl GenericParamConst {
21128 pub const INDEX_CONST_KW: usize = 0;
21129 pub const INDEX_NAME: usize = 1;
21130 pub const INDEX_COLON: usize = 2;
21131 pub const INDEX_TY: usize = 3;
21132 pub fn new_green(
21133 db: &dyn SyntaxGroup,
21134 const_kw: TerminalConstGreen,
21135 name: TerminalIdentifierGreen,
21136 colon: TerminalColonGreen,
21137 ty: ExprGreen,
21138 ) -> GenericParamConstGreen {
21139 let children: Vec<GreenId> = vec![const_kw.0, name.0, colon.0, ty.0];
21140 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
21141 GenericParamConstGreen(
21142 Arc::new(GreenNode {
21143 kind: SyntaxKind::GenericParamConst,
21144 details: GreenNodeDetails::Node { children, width },
21145 })
21146 .intern(db),
21147 )
21148 }
21149}
21150impl GenericParamConst {
21151 pub fn const_kw(&self, db: &dyn SyntaxGroup) -> TerminalConst {
21152 TerminalConst::from_syntax_node(db, self.children[0].clone())
21153 }
21154 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
21155 TerminalIdentifier::from_syntax_node(db, self.children[1].clone())
21156 }
21157 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
21158 TerminalColon::from_syntax_node(db, self.children[2].clone())
21159 }
21160 pub fn ty(&self, db: &dyn SyntaxGroup) -> Expr {
21161 Expr::from_syntax_node(db, self.children[3].clone())
21162 }
21163}
21164#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21165pub struct GenericParamConstPtr(pub SyntaxStablePtrId);
21166impl GenericParamConstPtr {
21167 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
21168 let ptr = self.0.lookup_intern(db);
21169 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
21170 TerminalIdentifierGreen(key_fields[0])
21171 } else {
21172 panic!("Unexpected key field query on root.");
21173 }
21174 }
21175}
21176impl TypedStablePtr for GenericParamConstPtr {
21177 type SyntaxNode = GenericParamConst;
21178 fn untyped(&self) -> SyntaxStablePtrId {
21179 self.0
21180 }
21181 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericParamConst {
21182 GenericParamConst::from_syntax_node(db, self.0.lookup(db))
21183 }
21184}
21185impl From<GenericParamConstPtr> for SyntaxStablePtrId {
21186 fn from(ptr: GenericParamConstPtr) -> Self {
21187 ptr.untyped()
21188 }
21189}
21190#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21191pub struct GenericParamConstGreen(pub GreenId);
21192impl TypedSyntaxNode for GenericParamConst {
21193 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericParamConst);
21194 type StablePtr = GenericParamConstPtr;
21195 type Green = GenericParamConstGreen;
21196 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21197 GenericParamConstGreen(
21198 Arc::new(GreenNode {
21199 kind: SyntaxKind::GenericParamConst,
21200 details: GreenNodeDetails::Node {
21201 children: vec![
21202 TerminalConst::missing(db).0,
21203 TerminalIdentifier::missing(db).0,
21204 TerminalColon::missing(db).0,
21205 Expr::missing(db).0,
21206 ],
21207 width: TextWidth::default(),
21208 },
21209 })
21210 .intern(db),
21211 )
21212 }
21213 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21214 let kind = node.kind(db);
21215 assert_eq!(
21216 kind,
21217 SyntaxKind::GenericParamConst,
21218 "Unexpected SyntaxKind {:?}. Expected {:?}.",
21219 kind,
21220 SyntaxKind::GenericParamConst
21221 );
21222 let children = db.get_children(node.clone());
21223 Self { node, children }
21224 }
21225 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21226 let kind = node.kind(db);
21227 if kind == SyntaxKind::GenericParamConst {
21228 Some(Self::from_syntax_node(db, node))
21229 } else {
21230 None
21231 }
21232 }
21233 fn as_syntax_node(&self) -> SyntaxNode {
21234 self.node.clone()
21235 }
21236 fn stable_ptr(&self) -> Self::StablePtr {
21237 GenericParamConstPtr(self.node.0.stable_ptr)
21238 }
21239}
21240impl From<&GenericParamConst> for SyntaxStablePtrId {
21241 fn from(node: &GenericParamConst) -> Self {
21242 node.stable_ptr().untyped()
21243 }
21244}
21245#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21246pub struct GenericParamImplNamed {
21247 node: SyntaxNode,
21248 children: Arc<[SyntaxNode]>,
21249}
21250impl GenericParamImplNamed {
21251 pub const INDEX_IMPL_KW: usize = 0;
21252 pub const INDEX_NAME: usize = 1;
21253 pub const INDEX_COLON: usize = 2;
21254 pub const INDEX_TRAIT_PATH: usize = 3;
21255 pub const INDEX_TYPE_CONSTRAINS: usize = 4;
21256 pub fn new_green(
21257 db: &dyn SyntaxGroup,
21258 impl_kw: TerminalImplGreen,
21259 name: TerminalIdentifierGreen,
21260 colon: TerminalColonGreen,
21261 trait_path: ExprPathGreen,
21262 type_constrains: OptionAssociatedItemConstraintsGreen,
21263 ) -> GenericParamImplNamedGreen {
21264 let children: Vec<GreenId> =
21265 vec![impl_kw.0, name.0, colon.0, trait_path.0, type_constrains.0];
21266 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
21267 GenericParamImplNamedGreen(
21268 Arc::new(GreenNode {
21269 kind: SyntaxKind::GenericParamImplNamed,
21270 details: GreenNodeDetails::Node { children, width },
21271 })
21272 .intern(db),
21273 )
21274 }
21275}
21276impl GenericParamImplNamed {
21277 pub fn impl_kw(&self, db: &dyn SyntaxGroup) -> TerminalImpl {
21278 TerminalImpl::from_syntax_node(db, self.children[0].clone())
21279 }
21280 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
21281 TerminalIdentifier::from_syntax_node(db, self.children[1].clone())
21282 }
21283 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
21284 TerminalColon::from_syntax_node(db, self.children[2].clone())
21285 }
21286 pub fn trait_path(&self, db: &dyn SyntaxGroup) -> ExprPath {
21287 ExprPath::from_syntax_node(db, self.children[3].clone())
21288 }
21289 pub fn type_constrains(&self, db: &dyn SyntaxGroup) -> OptionAssociatedItemConstraints {
21290 OptionAssociatedItemConstraints::from_syntax_node(db, self.children[4].clone())
21291 }
21292}
21293#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21294pub struct GenericParamImplNamedPtr(pub SyntaxStablePtrId);
21295impl GenericParamImplNamedPtr {
21296 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
21297 let ptr = self.0.lookup_intern(db);
21298 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
21299 TerminalIdentifierGreen(key_fields[0])
21300 } else {
21301 panic!("Unexpected key field query on root.");
21302 }
21303 }
21304}
21305impl TypedStablePtr for GenericParamImplNamedPtr {
21306 type SyntaxNode = GenericParamImplNamed;
21307 fn untyped(&self) -> SyntaxStablePtrId {
21308 self.0
21309 }
21310 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericParamImplNamed {
21311 GenericParamImplNamed::from_syntax_node(db, self.0.lookup(db))
21312 }
21313}
21314impl From<GenericParamImplNamedPtr> for SyntaxStablePtrId {
21315 fn from(ptr: GenericParamImplNamedPtr) -> Self {
21316 ptr.untyped()
21317 }
21318}
21319#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21320pub struct GenericParamImplNamedGreen(pub GreenId);
21321impl TypedSyntaxNode for GenericParamImplNamed {
21322 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericParamImplNamed);
21323 type StablePtr = GenericParamImplNamedPtr;
21324 type Green = GenericParamImplNamedGreen;
21325 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21326 GenericParamImplNamedGreen(
21327 Arc::new(GreenNode {
21328 kind: SyntaxKind::GenericParamImplNamed,
21329 details: GreenNodeDetails::Node {
21330 children: vec![
21331 TerminalImpl::missing(db).0,
21332 TerminalIdentifier::missing(db).0,
21333 TerminalColon::missing(db).0,
21334 ExprPath::missing(db).0,
21335 OptionAssociatedItemConstraints::missing(db).0,
21336 ],
21337 width: TextWidth::default(),
21338 },
21339 })
21340 .intern(db),
21341 )
21342 }
21343 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21344 let kind = node.kind(db);
21345 assert_eq!(
21346 kind,
21347 SyntaxKind::GenericParamImplNamed,
21348 "Unexpected SyntaxKind {:?}. Expected {:?}.",
21349 kind,
21350 SyntaxKind::GenericParamImplNamed
21351 );
21352 let children = db.get_children(node.clone());
21353 Self { node, children }
21354 }
21355 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21356 let kind = node.kind(db);
21357 if kind == SyntaxKind::GenericParamImplNamed {
21358 Some(Self::from_syntax_node(db, node))
21359 } else {
21360 None
21361 }
21362 }
21363 fn as_syntax_node(&self) -> SyntaxNode {
21364 self.node.clone()
21365 }
21366 fn stable_ptr(&self) -> Self::StablePtr {
21367 GenericParamImplNamedPtr(self.node.0.stable_ptr)
21368 }
21369}
21370impl From<&GenericParamImplNamed> for SyntaxStablePtrId {
21371 fn from(node: &GenericParamImplNamed) -> Self {
21372 node.stable_ptr().untyped()
21373 }
21374}
21375#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21376pub struct GenericParamImplAnonymous {
21377 node: SyntaxNode,
21378 children: Arc<[SyntaxNode]>,
21379}
21380impl GenericParamImplAnonymous {
21381 pub const INDEX_PLUS: usize = 0;
21382 pub const INDEX_TRAIT_PATH: usize = 1;
21383 pub const INDEX_TYPE_CONSTRAINS: usize = 2;
21384 pub fn new_green(
21385 db: &dyn SyntaxGroup,
21386 plus: TerminalPlusGreen,
21387 trait_path: ExprPathGreen,
21388 type_constrains: OptionAssociatedItemConstraintsGreen,
21389 ) -> GenericParamImplAnonymousGreen {
21390 let children: Vec<GreenId> = vec![plus.0, trait_path.0, type_constrains.0];
21391 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
21392 GenericParamImplAnonymousGreen(
21393 Arc::new(GreenNode {
21394 kind: SyntaxKind::GenericParamImplAnonymous,
21395 details: GreenNodeDetails::Node { children, width },
21396 })
21397 .intern(db),
21398 )
21399 }
21400}
21401impl GenericParamImplAnonymous {
21402 pub fn plus(&self, db: &dyn SyntaxGroup) -> TerminalPlus {
21403 TerminalPlus::from_syntax_node(db, self.children[0].clone())
21404 }
21405 pub fn trait_path(&self, db: &dyn SyntaxGroup) -> ExprPath {
21406 ExprPath::from_syntax_node(db, self.children[1].clone())
21407 }
21408 pub fn type_constrains(&self, db: &dyn SyntaxGroup) -> OptionAssociatedItemConstraints {
21409 OptionAssociatedItemConstraints::from_syntax_node(db, self.children[2].clone())
21410 }
21411}
21412#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21413pub struct GenericParamImplAnonymousPtr(pub SyntaxStablePtrId);
21414impl GenericParamImplAnonymousPtr {}
21415impl TypedStablePtr for GenericParamImplAnonymousPtr {
21416 type SyntaxNode = GenericParamImplAnonymous;
21417 fn untyped(&self) -> SyntaxStablePtrId {
21418 self.0
21419 }
21420 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericParamImplAnonymous {
21421 GenericParamImplAnonymous::from_syntax_node(db, self.0.lookup(db))
21422 }
21423}
21424impl From<GenericParamImplAnonymousPtr> for SyntaxStablePtrId {
21425 fn from(ptr: GenericParamImplAnonymousPtr) -> Self {
21426 ptr.untyped()
21427 }
21428}
21429#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21430pub struct GenericParamImplAnonymousGreen(pub GreenId);
21431impl TypedSyntaxNode for GenericParamImplAnonymous {
21432 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericParamImplAnonymous);
21433 type StablePtr = GenericParamImplAnonymousPtr;
21434 type Green = GenericParamImplAnonymousGreen;
21435 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21436 GenericParamImplAnonymousGreen(
21437 Arc::new(GreenNode {
21438 kind: SyntaxKind::GenericParamImplAnonymous,
21439 details: GreenNodeDetails::Node {
21440 children: vec![
21441 TerminalPlus::missing(db).0,
21442 ExprPath::missing(db).0,
21443 OptionAssociatedItemConstraints::missing(db).0,
21444 ],
21445 width: TextWidth::default(),
21446 },
21447 })
21448 .intern(db),
21449 )
21450 }
21451 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21452 let kind = node.kind(db);
21453 assert_eq!(
21454 kind,
21455 SyntaxKind::GenericParamImplAnonymous,
21456 "Unexpected SyntaxKind {:?}. Expected {:?}.",
21457 kind,
21458 SyntaxKind::GenericParamImplAnonymous
21459 );
21460 let children = db.get_children(node.clone());
21461 Self { node, children }
21462 }
21463 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21464 let kind = node.kind(db);
21465 if kind == SyntaxKind::GenericParamImplAnonymous {
21466 Some(Self::from_syntax_node(db, node))
21467 } else {
21468 None
21469 }
21470 }
21471 fn as_syntax_node(&self) -> SyntaxNode {
21472 self.node.clone()
21473 }
21474 fn stable_ptr(&self) -> Self::StablePtr {
21475 GenericParamImplAnonymousPtr(self.node.0.stable_ptr)
21476 }
21477}
21478impl From<&GenericParamImplAnonymous> for SyntaxStablePtrId {
21479 fn from(node: &GenericParamImplAnonymous) -> Self {
21480 node.stable_ptr().untyped()
21481 }
21482}
21483#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21484pub struct GenericParamNegativeImpl {
21485 node: SyntaxNode,
21486 children: Arc<[SyntaxNode]>,
21487}
21488impl GenericParamNegativeImpl {
21489 pub const INDEX_MINUS: usize = 0;
21490 pub const INDEX_TRAIT_PATH: usize = 1;
21491 pub fn new_green(
21492 db: &dyn SyntaxGroup,
21493 minus: TerminalMinusGreen,
21494 trait_path: ExprPathGreen,
21495 ) -> GenericParamNegativeImplGreen {
21496 let children: Vec<GreenId> = vec![minus.0, trait_path.0];
21497 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
21498 GenericParamNegativeImplGreen(
21499 Arc::new(GreenNode {
21500 kind: SyntaxKind::GenericParamNegativeImpl,
21501 details: GreenNodeDetails::Node { children, width },
21502 })
21503 .intern(db),
21504 )
21505 }
21506}
21507impl GenericParamNegativeImpl {
21508 pub fn minus(&self, db: &dyn SyntaxGroup) -> TerminalMinus {
21509 TerminalMinus::from_syntax_node(db, self.children[0].clone())
21510 }
21511 pub fn trait_path(&self, db: &dyn SyntaxGroup) -> ExprPath {
21512 ExprPath::from_syntax_node(db, self.children[1].clone())
21513 }
21514}
21515#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21516pub struct GenericParamNegativeImplPtr(pub SyntaxStablePtrId);
21517impl GenericParamNegativeImplPtr {}
21518impl TypedStablePtr for GenericParamNegativeImplPtr {
21519 type SyntaxNode = GenericParamNegativeImpl;
21520 fn untyped(&self) -> SyntaxStablePtrId {
21521 self.0
21522 }
21523 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericParamNegativeImpl {
21524 GenericParamNegativeImpl::from_syntax_node(db, self.0.lookup(db))
21525 }
21526}
21527impl From<GenericParamNegativeImplPtr> for SyntaxStablePtrId {
21528 fn from(ptr: GenericParamNegativeImplPtr) -> Self {
21529 ptr.untyped()
21530 }
21531}
21532#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21533pub struct GenericParamNegativeImplGreen(pub GreenId);
21534impl TypedSyntaxNode for GenericParamNegativeImpl {
21535 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericParamNegativeImpl);
21536 type StablePtr = GenericParamNegativeImplPtr;
21537 type Green = GenericParamNegativeImplGreen;
21538 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21539 GenericParamNegativeImplGreen(
21540 Arc::new(GreenNode {
21541 kind: SyntaxKind::GenericParamNegativeImpl,
21542 details: GreenNodeDetails::Node {
21543 children: vec![TerminalMinus::missing(db).0, ExprPath::missing(db).0],
21544 width: TextWidth::default(),
21545 },
21546 })
21547 .intern(db),
21548 )
21549 }
21550 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21551 let kind = node.kind(db);
21552 assert_eq!(
21553 kind,
21554 SyntaxKind::GenericParamNegativeImpl,
21555 "Unexpected SyntaxKind {:?}. Expected {:?}.",
21556 kind,
21557 SyntaxKind::GenericParamNegativeImpl
21558 );
21559 let children = db.get_children(node.clone());
21560 Self { node, children }
21561 }
21562 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21563 let kind = node.kind(db);
21564 if kind == SyntaxKind::GenericParamNegativeImpl {
21565 Some(Self::from_syntax_node(db, node))
21566 } else {
21567 None
21568 }
21569 }
21570 fn as_syntax_node(&self) -> SyntaxNode {
21571 self.node.clone()
21572 }
21573 fn stable_ptr(&self) -> Self::StablePtr {
21574 GenericParamNegativeImplPtr(self.node.0.stable_ptr)
21575 }
21576}
21577impl From<&GenericParamNegativeImpl> for SyntaxStablePtrId {
21578 fn from(node: &GenericParamNegativeImpl) -> Self {
21579 node.stable_ptr().untyped()
21580 }
21581}
21582#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21583pub struct TriviumSkippedNode {
21584 node: SyntaxNode,
21585 children: Arc<[SyntaxNode]>,
21586}
21587impl TriviumSkippedNode {
21588 pub const INDEX_NODE: usize = 0;
21589 pub fn new_green(db: &dyn SyntaxGroup, node: SkippedNodeGreen) -> TriviumSkippedNodeGreen {
21590 let children: Vec<GreenId> = vec![node.0];
21591 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
21592 TriviumSkippedNodeGreen(
21593 Arc::new(GreenNode {
21594 kind: SyntaxKind::TriviumSkippedNode,
21595 details: GreenNodeDetails::Node { children, width },
21596 })
21597 .intern(db),
21598 )
21599 }
21600}
21601impl TriviumSkippedNode {
21602 pub fn node(&self, db: &dyn SyntaxGroup) -> SkippedNode {
21603 SkippedNode::from_syntax_node(db, self.children[0].clone())
21604 }
21605}
21606#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21607pub struct TriviumSkippedNodePtr(pub SyntaxStablePtrId);
21608impl TriviumSkippedNodePtr {}
21609impl TypedStablePtr for TriviumSkippedNodePtr {
21610 type SyntaxNode = TriviumSkippedNode;
21611 fn untyped(&self) -> SyntaxStablePtrId {
21612 self.0
21613 }
21614 fn lookup(&self, db: &dyn SyntaxGroup) -> TriviumSkippedNode {
21615 TriviumSkippedNode::from_syntax_node(db, self.0.lookup(db))
21616 }
21617}
21618impl From<TriviumSkippedNodePtr> for SyntaxStablePtrId {
21619 fn from(ptr: TriviumSkippedNodePtr) -> Self {
21620 ptr.untyped()
21621 }
21622}
21623#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21624pub struct TriviumSkippedNodeGreen(pub GreenId);
21625impl TypedSyntaxNode for TriviumSkippedNode {
21626 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TriviumSkippedNode);
21627 type StablePtr = TriviumSkippedNodePtr;
21628 type Green = TriviumSkippedNodeGreen;
21629 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21630 TriviumSkippedNodeGreen(
21631 Arc::new(GreenNode {
21632 kind: SyntaxKind::TriviumSkippedNode,
21633 details: GreenNodeDetails::Node {
21634 children: vec![SkippedNode::missing(db).0],
21635 width: TextWidth::default(),
21636 },
21637 })
21638 .intern(db),
21639 )
21640 }
21641 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21642 let kind = node.kind(db);
21643 assert_eq!(
21644 kind,
21645 SyntaxKind::TriviumSkippedNode,
21646 "Unexpected SyntaxKind {:?}. Expected {:?}.",
21647 kind,
21648 SyntaxKind::TriviumSkippedNode
21649 );
21650 let children = db.get_children(node.clone());
21651 Self { node, children }
21652 }
21653 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21654 let kind = node.kind(db);
21655 if kind == SyntaxKind::TriviumSkippedNode {
21656 Some(Self::from_syntax_node(db, node))
21657 } else {
21658 None
21659 }
21660 }
21661 fn as_syntax_node(&self) -> SyntaxNode {
21662 self.node.clone()
21663 }
21664 fn stable_ptr(&self) -> Self::StablePtr {
21665 TriviumSkippedNodePtr(self.node.0.stable_ptr)
21666 }
21667}
21668impl From<&TriviumSkippedNode> for SyntaxStablePtrId {
21669 fn from(node: &TriviumSkippedNode) -> Self {
21670 node.stable_ptr().untyped()
21671 }
21672}
21673#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21674pub enum SkippedNode {
21675 AttributeList(AttributeList),
21676 VisibilityPub(VisibilityPub),
21677}
21678#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21679pub struct SkippedNodePtr(pub SyntaxStablePtrId);
21680impl TypedStablePtr for SkippedNodePtr {
21681 type SyntaxNode = SkippedNode;
21682 fn untyped(&self) -> SyntaxStablePtrId {
21683 self.0
21684 }
21685 fn lookup(&self, db: &dyn SyntaxGroup) -> SkippedNode {
21686 SkippedNode::from_syntax_node(db, self.0.lookup(db))
21687 }
21688}
21689impl From<SkippedNodePtr> for SyntaxStablePtrId {
21690 fn from(ptr: SkippedNodePtr) -> Self {
21691 ptr.untyped()
21692 }
21693}
21694impl From<AttributeListPtr> for SkippedNodePtr {
21695 fn from(value: AttributeListPtr) -> Self {
21696 Self(value.0)
21697 }
21698}
21699impl From<VisibilityPubPtr> for SkippedNodePtr {
21700 fn from(value: VisibilityPubPtr) -> Self {
21701 Self(value.0)
21702 }
21703}
21704impl From<AttributeListGreen> for SkippedNodeGreen {
21705 fn from(value: AttributeListGreen) -> Self {
21706 Self(value.0)
21707 }
21708}
21709impl From<VisibilityPubGreen> for SkippedNodeGreen {
21710 fn from(value: VisibilityPubGreen) -> Self {
21711 Self(value.0)
21712 }
21713}
21714#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21715pub struct SkippedNodeGreen(pub GreenId);
21716impl TypedSyntaxNode for SkippedNode {
21717 const OPTIONAL_KIND: Option<SyntaxKind> = None;
21718 type StablePtr = SkippedNodePtr;
21719 type Green = SkippedNodeGreen;
21720 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21721 panic!("No missing variant.");
21722 }
21723 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21724 let kind = node.kind(db);
21725 match kind {
21726 SyntaxKind::AttributeList => {
21727 SkippedNode::AttributeList(AttributeList::from_syntax_node(db, node))
21728 }
21729 SyntaxKind::VisibilityPub => {
21730 SkippedNode::VisibilityPub(VisibilityPub::from_syntax_node(db, node))
21731 }
21732 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "SkippedNode"),
21733 }
21734 }
21735 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21736 let kind = node.kind(db);
21737 match kind {
21738 SyntaxKind::AttributeList => {
21739 Some(SkippedNode::AttributeList(AttributeList::from_syntax_node(db, node)))
21740 }
21741 SyntaxKind::VisibilityPub => {
21742 Some(SkippedNode::VisibilityPub(VisibilityPub::from_syntax_node(db, node)))
21743 }
21744 _ => None,
21745 }
21746 }
21747 fn as_syntax_node(&self) -> SyntaxNode {
21748 match self {
21749 SkippedNode::AttributeList(x) => x.as_syntax_node(),
21750 SkippedNode::VisibilityPub(x) => x.as_syntax_node(),
21751 }
21752 }
21753 fn stable_ptr(&self) -> Self::StablePtr {
21754 SkippedNodePtr(self.as_syntax_node().0.stable_ptr)
21755 }
21756}
21757impl From<&SkippedNode> for SyntaxStablePtrId {
21758 fn from(node: &SkippedNode) -> Self {
21759 node.stable_ptr().untyped()
21760 }
21761}
21762impl SkippedNode {
21763 pub fn is_variant(kind: SyntaxKind) -> bool {
21765 matches!(kind, SyntaxKind::AttributeList | SyntaxKind::VisibilityPub)
21766 }
21767}
21768#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21769pub struct TokenIdentifier {
21770 node: SyntaxNode,
21771}
21772impl Token for TokenIdentifier {
21773 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
21774 TokenIdentifierGreen(
21775 Arc::new(GreenNode {
21776 kind: SyntaxKind::TokenIdentifier,
21777 details: GreenNodeDetails::Token(text),
21778 })
21779 .intern(db),
21780 )
21781 }
21782 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
21783 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
21784 .clone()
21785 }
21786}
21787#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21788pub struct TokenIdentifierPtr(pub SyntaxStablePtrId);
21789impl TypedStablePtr for TokenIdentifierPtr {
21790 type SyntaxNode = TokenIdentifier;
21791 fn untyped(&self) -> SyntaxStablePtrId {
21792 self.0
21793 }
21794 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenIdentifier {
21795 TokenIdentifier::from_syntax_node(db, self.0.lookup(db))
21796 }
21797}
21798impl From<TokenIdentifierPtr> for SyntaxStablePtrId {
21799 fn from(ptr: TokenIdentifierPtr) -> Self {
21800 ptr.untyped()
21801 }
21802}
21803#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21804pub struct TokenIdentifierGreen(pub GreenId);
21805impl TokenIdentifierGreen {
21806 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
21807 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
21808 }
21809}
21810impl TypedSyntaxNode for TokenIdentifier {
21811 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenIdentifier);
21812 type StablePtr = TokenIdentifierPtr;
21813 type Green = TokenIdentifierGreen;
21814 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21815 TokenIdentifierGreen(
21816 Arc::new(GreenNode {
21817 kind: SyntaxKind::TokenMissing,
21818 details: GreenNodeDetails::Token("".into()),
21819 })
21820 .intern(db),
21821 )
21822 }
21823 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21824 match node.0.green.lookup_intern(db).details {
21825 GreenNodeDetails::Token(_) => Self { node },
21826 GreenNodeDetails::Node { .. } => {
21827 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenIdentifier)
21828 }
21829 }
21830 }
21831 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21832 match node.0.green.lookup_intern(db).details {
21833 GreenNodeDetails::Token(_) => Some(Self { node }),
21834 GreenNodeDetails::Node { .. } => None,
21835 }
21836 }
21837 fn as_syntax_node(&self) -> SyntaxNode {
21838 self.node.clone()
21839 }
21840 fn stable_ptr(&self) -> Self::StablePtr {
21841 TokenIdentifierPtr(self.node.0.stable_ptr)
21842 }
21843}
21844impl From<&TokenIdentifier> for SyntaxStablePtrId {
21845 fn from(node: &TokenIdentifier) -> Self {
21846 node.stable_ptr().untyped()
21847 }
21848}
21849#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21850pub struct TerminalIdentifier {
21851 node: SyntaxNode,
21852 children: Arc<[SyntaxNode]>,
21853}
21854impl Terminal for TerminalIdentifier {
21855 const KIND: SyntaxKind = SyntaxKind::TerminalIdentifier;
21856 type TokenType = TokenIdentifier;
21857 fn new_green(
21858 db: &dyn SyntaxGroup,
21859 leading_trivia: TriviaGreen,
21860 token: <<TerminalIdentifier as Terminal>::TokenType as TypedSyntaxNode>::Green,
21861 trailing_trivia: TriviaGreen,
21862 ) -> Self::Green {
21863 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
21864 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
21865 TerminalIdentifierGreen(
21866 Arc::new(GreenNode {
21867 kind: SyntaxKind::TerminalIdentifier,
21868 details: GreenNodeDetails::Node { children, width },
21869 })
21870 .intern(db),
21871 )
21872 }
21873 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
21874 self.token(db).text(db)
21875 }
21876}
21877impl TerminalIdentifier {
21878 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
21879 Trivia::from_syntax_node(db, self.children[0].clone())
21880 }
21881 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenIdentifier {
21882 TokenIdentifier::from_syntax_node(db, self.children[1].clone())
21883 }
21884 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
21885 Trivia::from_syntax_node(db, self.children[2].clone())
21886 }
21887}
21888#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21889pub struct TerminalIdentifierPtr(pub SyntaxStablePtrId);
21890impl TerminalIdentifierPtr {}
21891impl TypedStablePtr for TerminalIdentifierPtr {
21892 type SyntaxNode = TerminalIdentifier;
21893 fn untyped(&self) -> SyntaxStablePtrId {
21894 self.0
21895 }
21896 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
21897 TerminalIdentifier::from_syntax_node(db, self.0.lookup(db))
21898 }
21899}
21900impl From<TerminalIdentifierPtr> for SyntaxStablePtrId {
21901 fn from(ptr: TerminalIdentifierPtr) -> Self {
21902 ptr.untyped()
21903 }
21904}
21905#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21906pub struct TerminalIdentifierGreen(pub GreenId);
21907impl TypedSyntaxNode for TerminalIdentifier {
21908 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalIdentifier);
21909 type StablePtr = TerminalIdentifierPtr;
21910 type Green = TerminalIdentifierGreen;
21911 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21912 TerminalIdentifierGreen(
21913 Arc::new(GreenNode {
21914 kind: SyntaxKind::TerminalIdentifier,
21915 details: GreenNodeDetails::Node {
21916 children: vec![
21917 Trivia::missing(db).0,
21918 TokenIdentifier::missing(db).0,
21919 Trivia::missing(db).0,
21920 ],
21921 width: TextWidth::default(),
21922 },
21923 })
21924 .intern(db),
21925 )
21926 }
21927 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21928 let kind = node.kind(db);
21929 assert_eq!(
21930 kind,
21931 SyntaxKind::TerminalIdentifier,
21932 "Unexpected SyntaxKind {:?}. Expected {:?}.",
21933 kind,
21934 SyntaxKind::TerminalIdentifier
21935 );
21936 let children = db.get_children(node.clone());
21937 Self { node, children }
21938 }
21939 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21940 let kind = node.kind(db);
21941 if kind == SyntaxKind::TerminalIdentifier {
21942 Some(Self::from_syntax_node(db, node))
21943 } else {
21944 None
21945 }
21946 }
21947 fn as_syntax_node(&self) -> SyntaxNode {
21948 self.node.clone()
21949 }
21950 fn stable_ptr(&self) -> Self::StablePtr {
21951 TerminalIdentifierPtr(self.node.0.stable_ptr)
21952 }
21953}
21954impl From<&TerminalIdentifier> for SyntaxStablePtrId {
21955 fn from(node: &TerminalIdentifier) -> Self {
21956 node.stable_ptr().untyped()
21957 }
21958}
21959#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21960pub struct TokenLiteralNumber {
21961 node: SyntaxNode,
21962}
21963impl Token for TokenLiteralNumber {
21964 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
21965 TokenLiteralNumberGreen(
21966 Arc::new(GreenNode {
21967 kind: SyntaxKind::TokenLiteralNumber,
21968 details: GreenNodeDetails::Token(text),
21969 })
21970 .intern(db),
21971 )
21972 }
21973 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
21974 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
21975 .clone()
21976 }
21977}
21978#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21979pub struct TokenLiteralNumberPtr(pub SyntaxStablePtrId);
21980impl TypedStablePtr for TokenLiteralNumberPtr {
21981 type SyntaxNode = TokenLiteralNumber;
21982 fn untyped(&self) -> SyntaxStablePtrId {
21983 self.0
21984 }
21985 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLiteralNumber {
21986 TokenLiteralNumber::from_syntax_node(db, self.0.lookup(db))
21987 }
21988}
21989impl From<TokenLiteralNumberPtr> for SyntaxStablePtrId {
21990 fn from(ptr: TokenLiteralNumberPtr) -> Self {
21991 ptr.untyped()
21992 }
21993}
21994#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21995pub struct TokenLiteralNumberGreen(pub GreenId);
21996impl TokenLiteralNumberGreen {
21997 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
21998 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
21999 }
22000}
22001impl TypedSyntaxNode for TokenLiteralNumber {
22002 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLiteralNumber);
22003 type StablePtr = TokenLiteralNumberPtr;
22004 type Green = TokenLiteralNumberGreen;
22005 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22006 TokenLiteralNumberGreen(
22007 Arc::new(GreenNode {
22008 kind: SyntaxKind::TokenMissing,
22009 details: GreenNodeDetails::Token("".into()),
22010 })
22011 .intern(db),
22012 )
22013 }
22014 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22015 match node.0.green.lookup_intern(db).details {
22016 GreenNodeDetails::Token(_) => Self { node },
22017 GreenNodeDetails::Node { .. } => panic!(
22018 "Expected a token {:?}, not an internal node",
22019 SyntaxKind::TokenLiteralNumber
22020 ),
22021 }
22022 }
22023 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22024 match node.0.green.lookup_intern(db).details {
22025 GreenNodeDetails::Token(_) => Some(Self { node }),
22026 GreenNodeDetails::Node { .. } => None,
22027 }
22028 }
22029 fn as_syntax_node(&self) -> SyntaxNode {
22030 self.node.clone()
22031 }
22032 fn stable_ptr(&self) -> Self::StablePtr {
22033 TokenLiteralNumberPtr(self.node.0.stable_ptr)
22034 }
22035}
22036impl From<&TokenLiteralNumber> for SyntaxStablePtrId {
22037 fn from(node: &TokenLiteralNumber) -> Self {
22038 node.stable_ptr().untyped()
22039 }
22040}
22041#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22042pub struct TerminalLiteralNumber {
22043 node: SyntaxNode,
22044 children: Arc<[SyntaxNode]>,
22045}
22046impl Terminal for TerminalLiteralNumber {
22047 const KIND: SyntaxKind = SyntaxKind::TerminalLiteralNumber;
22048 type TokenType = TokenLiteralNumber;
22049 fn new_green(
22050 db: &dyn SyntaxGroup,
22051 leading_trivia: TriviaGreen,
22052 token: <<TerminalLiteralNumber as Terminal>::TokenType as TypedSyntaxNode>::Green,
22053 trailing_trivia: TriviaGreen,
22054 ) -> Self::Green {
22055 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
22056 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
22057 TerminalLiteralNumberGreen(
22058 Arc::new(GreenNode {
22059 kind: SyntaxKind::TerminalLiteralNumber,
22060 details: GreenNodeDetails::Node { children, width },
22061 })
22062 .intern(db),
22063 )
22064 }
22065 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22066 self.token(db).text(db)
22067 }
22068}
22069impl TerminalLiteralNumber {
22070 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
22071 Trivia::from_syntax_node(db, self.children[0].clone())
22072 }
22073 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLiteralNumber {
22074 TokenLiteralNumber::from_syntax_node(db, self.children[1].clone())
22075 }
22076 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
22077 Trivia::from_syntax_node(db, self.children[2].clone())
22078 }
22079}
22080#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22081pub struct TerminalLiteralNumberPtr(pub SyntaxStablePtrId);
22082impl TerminalLiteralNumberPtr {}
22083impl TypedStablePtr for TerminalLiteralNumberPtr {
22084 type SyntaxNode = TerminalLiteralNumber;
22085 fn untyped(&self) -> SyntaxStablePtrId {
22086 self.0
22087 }
22088 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLiteralNumber {
22089 TerminalLiteralNumber::from_syntax_node(db, self.0.lookup(db))
22090 }
22091}
22092impl From<TerminalLiteralNumberPtr> for SyntaxStablePtrId {
22093 fn from(ptr: TerminalLiteralNumberPtr) -> Self {
22094 ptr.untyped()
22095 }
22096}
22097#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22098pub struct TerminalLiteralNumberGreen(pub GreenId);
22099impl TypedSyntaxNode for TerminalLiteralNumber {
22100 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLiteralNumber);
22101 type StablePtr = TerminalLiteralNumberPtr;
22102 type Green = TerminalLiteralNumberGreen;
22103 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22104 TerminalLiteralNumberGreen(
22105 Arc::new(GreenNode {
22106 kind: SyntaxKind::TerminalLiteralNumber,
22107 details: GreenNodeDetails::Node {
22108 children: vec![
22109 Trivia::missing(db).0,
22110 TokenLiteralNumber::missing(db).0,
22111 Trivia::missing(db).0,
22112 ],
22113 width: TextWidth::default(),
22114 },
22115 })
22116 .intern(db),
22117 )
22118 }
22119 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22120 let kind = node.kind(db);
22121 assert_eq!(
22122 kind,
22123 SyntaxKind::TerminalLiteralNumber,
22124 "Unexpected SyntaxKind {:?}. Expected {:?}.",
22125 kind,
22126 SyntaxKind::TerminalLiteralNumber
22127 );
22128 let children = db.get_children(node.clone());
22129 Self { node, children }
22130 }
22131 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22132 let kind = node.kind(db);
22133 if kind == SyntaxKind::TerminalLiteralNumber {
22134 Some(Self::from_syntax_node(db, node))
22135 } else {
22136 None
22137 }
22138 }
22139 fn as_syntax_node(&self) -> SyntaxNode {
22140 self.node.clone()
22141 }
22142 fn stable_ptr(&self) -> Self::StablePtr {
22143 TerminalLiteralNumberPtr(self.node.0.stable_ptr)
22144 }
22145}
22146impl From<&TerminalLiteralNumber> for SyntaxStablePtrId {
22147 fn from(node: &TerminalLiteralNumber) -> Self {
22148 node.stable_ptr().untyped()
22149 }
22150}
22151#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22152pub struct TokenShortString {
22153 node: SyntaxNode,
22154}
22155impl Token for TokenShortString {
22156 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
22157 TokenShortStringGreen(
22158 Arc::new(GreenNode {
22159 kind: SyntaxKind::TokenShortString,
22160 details: GreenNodeDetails::Token(text),
22161 })
22162 .intern(db),
22163 )
22164 }
22165 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22166 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
22167 .clone()
22168 }
22169}
22170#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22171pub struct TokenShortStringPtr(pub SyntaxStablePtrId);
22172impl TypedStablePtr for TokenShortStringPtr {
22173 type SyntaxNode = TokenShortString;
22174 fn untyped(&self) -> SyntaxStablePtrId {
22175 self.0
22176 }
22177 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenShortString {
22178 TokenShortString::from_syntax_node(db, self.0.lookup(db))
22179 }
22180}
22181impl From<TokenShortStringPtr> for SyntaxStablePtrId {
22182 fn from(ptr: TokenShortStringPtr) -> Self {
22183 ptr.untyped()
22184 }
22185}
22186#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22187pub struct TokenShortStringGreen(pub GreenId);
22188impl TokenShortStringGreen {
22189 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22190 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
22191 }
22192}
22193impl TypedSyntaxNode for TokenShortString {
22194 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenShortString);
22195 type StablePtr = TokenShortStringPtr;
22196 type Green = TokenShortStringGreen;
22197 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22198 TokenShortStringGreen(
22199 Arc::new(GreenNode {
22200 kind: SyntaxKind::TokenMissing,
22201 details: GreenNodeDetails::Token("".into()),
22202 })
22203 .intern(db),
22204 )
22205 }
22206 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22207 match node.0.green.lookup_intern(db).details {
22208 GreenNodeDetails::Token(_) => Self { node },
22209 GreenNodeDetails::Node { .. } => {
22210 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenShortString)
22211 }
22212 }
22213 }
22214 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22215 match node.0.green.lookup_intern(db).details {
22216 GreenNodeDetails::Token(_) => Some(Self { node }),
22217 GreenNodeDetails::Node { .. } => None,
22218 }
22219 }
22220 fn as_syntax_node(&self) -> SyntaxNode {
22221 self.node.clone()
22222 }
22223 fn stable_ptr(&self) -> Self::StablePtr {
22224 TokenShortStringPtr(self.node.0.stable_ptr)
22225 }
22226}
22227impl From<&TokenShortString> for SyntaxStablePtrId {
22228 fn from(node: &TokenShortString) -> Self {
22229 node.stable_ptr().untyped()
22230 }
22231}
22232#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22233pub struct TerminalShortString {
22234 node: SyntaxNode,
22235 children: Arc<[SyntaxNode]>,
22236}
22237impl Terminal for TerminalShortString {
22238 const KIND: SyntaxKind = SyntaxKind::TerminalShortString;
22239 type TokenType = TokenShortString;
22240 fn new_green(
22241 db: &dyn SyntaxGroup,
22242 leading_trivia: TriviaGreen,
22243 token: <<TerminalShortString as Terminal>::TokenType as TypedSyntaxNode>::Green,
22244 trailing_trivia: TriviaGreen,
22245 ) -> Self::Green {
22246 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
22247 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
22248 TerminalShortStringGreen(
22249 Arc::new(GreenNode {
22250 kind: SyntaxKind::TerminalShortString,
22251 details: GreenNodeDetails::Node { children, width },
22252 })
22253 .intern(db),
22254 )
22255 }
22256 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22257 self.token(db).text(db)
22258 }
22259}
22260impl TerminalShortString {
22261 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
22262 Trivia::from_syntax_node(db, self.children[0].clone())
22263 }
22264 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenShortString {
22265 TokenShortString::from_syntax_node(db, self.children[1].clone())
22266 }
22267 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
22268 Trivia::from_syntax_node(db, self.children[2].clone())
22269 }
22270}
22271#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22272pub struct TerminalShortStringPtr(pub SyntaxStablePtrId);
22273impl TerminalShortStringPtr {}
22274impl TypedStablePtr for TerminalShortStringPtr {
22275 type SyntaxNode = TerminalShortString;
22276 fn untyped(&self) -> SyntaxStablePtrId {
22277 self.0
22278 }
22279 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalShortString {
22280 TerminalShortString::from_syntax_node(db, self.0.lookup(db))
22281 }
22282}
22283impl From<TerminalShortStringPtr> for SyntaxStablePtrId {
22284 fn from(ptr: TerminalShortStringPtr) -> Self {
22285 ptr.untyped()
22286 }
22287}
22288#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22289pub struct TerminalShortStringGreen(pub GreenId);
22290impl TypedSyntaxNode for TerminalShortString {
22291 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalShortString);
22292 type StablePtr = TerminalShortStringPtr;
22293 type Green = TerminalShortStringGreen;
22294 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22295 TerminalShortStringGreen(
22296 Arc::new(GreenNode {
22297 kind: SyntaxKind::TerminalShortString,
22298 details: GreenNodeDetails::Node {
22299 children: vec![
22300 Trivia::missing(db).0,
22301 TokenShortString::missing(db).0,
22302 Trivia::missing(db).0,
22303 ],
22304 width: TextWidth::default(),
22305 },
22306 })
22307 .intern(db),
22308 )
22309 }
22310 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22311 let kind = node.kind(db);
22312 assert_eq!(
22313 kind,
22314 SyntaxKind::TerminalShortString,
22315 "Unexpected SyntaxKind {:?}. Expected {:?}.",
22316 kind,
22317 SyntaxKind::TerminalShortString
22318 );
22319 let children = db.get_children(node.clone());
22320 Self { node, children }
22321 }
22322 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22323 let kind = node.kind(db);
22324 if kind == SyntaxKind::TerminalShortString {
22325 Some(Self::from_syntax_node(db, node))
22326 } else {
22327 None
22328 }
22329 }
22330 fn as_syntax_node(&self) -> SyntaxNode {
22331 self.node.clone()
22332 }
22333 fn stable_ptr(&self) -> Self::StablePtr {
22334 TerminalShortStringPtr(self.node.0.stable_ptr)
22335 }
22336}
22337impl From<&TerminalShortString> for SyntaxStablePtrId {
22338 fn from(node: &TerminalShortString) -> Self {
22339 node.stable_ptr().untyped()
22340 }
22341}
22342#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22343pub struct TokenString {
22344 node: SyntaxNode,
22345}
22346impl Token for TokenString {
22347 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
22348 TokenStringGreen(
22349 Arc::new(GreenNode {
22350 kind: SyntaxKind::TokenString,
22351 details: GreenNodeDetails::Token(text),
22352 })
22353 .intern(db),
22354 )
22355 }
22356 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22357 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
22358 .clone()
22359 }
22360}
22361#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22362pub struct TokenStringPtr(pub SyntaxStablePtrId);
22363impl TypedStablePtr for TokenStringPtr {
22364 type SyntaxNode = TokenString;
22365 fn untyped(&self) -> SyntaxStablePtrId {
22366 self.0
22367 }
22368 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenString {
22369 TokenString::from_syntax_node(db, self.0.lookup(db))
22370 }
22371}
22372impl From<TokenStringPtr> for SyntaxStablePtrId {
22373 fn from(ptr: TokenStringPtr) -> Self {
22374 ptr.untyped()
22375 }
22376}
22377#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22378pub struct TokenStringGreen(pub GreenId);
22379impl TokenStringGreen {
22380 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22381 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
22382 }
22383}
22384impl TypedSyntaxNode for TokenString {
22385 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenString);
22386 type StablePtr = TokenStringPtr;
22387 type Green = TokenStringGreen;
22388 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22389 TokenStringGreen(
22390 Arc::new(GreenNode {
22391 kind: SyntaxKind::TokenMissing,
22392 details: GreenNodeDetails::Token("".into()),
22393 })
22394 .intern(db),
22395 )
22396 }
22397 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22398 match node.0.green.lookup_intern(db).details {
22399 GreenNodeDetails::Token(_) => Self { node },
22400 GreenNodeDetails::Node { .. } => {
22401 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenString)
22402 }
22403 }
22404 }
22405 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22406 match node.0.green.lookup_intern(db).details {
22407 GreenNodeDetails::Token(_) => Some(Self { node }),
22408 GreenNodeDetails::Node { .. } => None,
22409 }
22410 }
22411 fn as_syntax_node(&self) -> SyntaxNode {
22412 self.node.clone()
22413 }
22414 fn stable_ptr(&self) -> Self::StablePtr {
22415 TokenStringPtr(self.node.0.stable_ptr)
22416 }
22417}
22418impl From<&TokenString> for SyntaxStablePtrId {
22419 fn from(node: &TokenString) -> Self {
22420 node.stable_ptr().untyped()
22421 }
22422}
22423#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22424pub struct TerminalString {
22425 node: SyntaxNode,
22426 children: Arc<[SyntaxNode]>,
22427}
22428impl Terminal for TerminalString {
22429 const KIND: SyntaxKind = SyntaxKind::TerminalString;
22430 type TokenType = TokenString;
22431 fn new_green(
22432 db: &dyn SyntaxGroup,
22433 leading_trivia: TriviaGreen,
22434 token: <<TerminalString as Terminal>::TokenType as TypedSyntaxNode>::Green,
22435 trailing_trivia: TriviaGreen,
22436 ) -> Self::Green {
22437 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
22438 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
22439 TerminalStringGreen(
22440 Arc::new(GreenNode {
22441 kind: SyntaxKind::TerminalString,
22442 details: GreenNodeDetails::Node { children, width },
22443 })
22444 .intern(db),
22445 )
22446 }
22447 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22448 self.token(db).text(db)
22449 }
22450}
22451impl TerminalString {
22452 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
22453 Trivia::from_syntax_node(db, self.children[0].clone())
22454 }
22455 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenString {
22456 TokenString::from_syntax_node(db, self.children[1].clone())
22457 }
22458 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
22459 Trivia::from_syntax_node(db, self.children[2].clone())
22460 }
22461}
22462#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22463pub struct TerminalStringPtr(pub SyntaxStablePtrId);
22464impl TerminalStringPtr {}
22465impl TypedStablePtr for TerminalStringPtr {
22466 type SyntaxNode = TerminalString;
22467 fn untyped(&self) -> SyntaxStablePtrId {
22468 self.0
22469 }
22470 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalString {
22471 TerminalString::from_syntax_node(db, self.0.lookup(db))
22472 }
22473}
22474impl From<TerminalStringPtr> for SyntaxStablePtrId {
22475 fn from(ptr: TerminalStringPtr) -> Self {
22476 ptr.untyped()
22477 }
22478}
22479#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22480pub struct TerminalStringGreen(pub GreenId);
22481impl TypedSyntaxNode for TerminalString {
22482 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalString);
22483 type StablePtr = TerminalStringPtr;
22484 type Green = TerminalStringGreen;
22485 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22486 TerminalStringGreen(
22487 Arc::new(GreenNode {
22488 kind: SyntaxKind::TerminalString,
22489 details: GreenNodeDetails::Node {
22490 children: vec![
22491 Trivia::missing(db).0,
22492 TokenString::missing(db).0,
22493 Trivia::missing(db).0,
22494 ],
22495 width: TextWidth::default(),
22496 },
22497 })
22498 .intern(db),
22499 )
22500 }
22501 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22502 let kind = node.kind(db);
22503 assert_eq!(
22504 kind,
22505 SyntaxKind::TerminalString,
22506 "Unexpected SyntaxKind {:?}. Expected {:?}.",
22507 kind,
22508 SyntaxKind::TerminalString
22509 );
22510 let children = db.get_children(node.clone());
22511 Self { node, children }
22512 }
22513 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22514 let kind = node.kind(db);
22515 if kind == SyntaxKind::TerminalString {
22516 Some(Self::from_syntax_node(db, node))
22517 } else {
22518 None
22519 }
22520 }
22521 fn as_syntax_node(&self) -> SyntaxNode {
22522 self.node.clone()
22523 }
22524 fn stable_ptr(&self) -> Self::StablePtr {
22525 TerminalStringPtr(self.node.0.stable_ptr)
22526 }
22527}
22528impl From<&TerminalString> for SyntaxStablePtrId {
22529 fn from(node: &TerminalString) -> Self {
22530 node.stable_ptr().untyped()
22531 }
22532}
22533#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22534pub struct TokenAs {
22535 node: SyntaxNode,
22536}
22537impl Token for TokenAs {
22538 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
22539 TokenAsGreen(
22540 Arc::new(GreenNode {
22541 kind: SyntaxKind::TokenAs,
22542 details: GreenNodeDetails::Token(text),
22543 })
22544 .intern(db),
22545 )
22546 }
22547 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22548 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
22549 .clone()
22550 }
22551}
22552#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22553pub struct TokenAsPtr(pub SyntaxStablePtrId);
22554impl TypedStablePtr for TokenAsPtr {
22555 type SyntaxNode = TokenAs;
22556 fn untyped(&self) -> SyntaxStablePtrId {
22557 self.0
22558 }
22559 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenAs {
22560 TokenAs::from_syntax_node(db, self.0.lookup(db))
22561 }
22562}
22563impl From<TokenAsPtr> for SyntaxStablePtrId {
22564 fn from(ptr: TokenAsPtr) -> Self {
22565 ptr.untyped()
22566 }
22567}
22568#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22569pub struct TokenAsGreen(pub GreenId);
22570impl TokenAsGreen {
22571 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22572 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
22573 }
22574}
22575impl TypedSyntaxNode for TokenAs {
22576 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenAs);
22577 type StablePtr = TokenAsPtr;
22578 type Green = TokenAsGreen;
22579 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22580 TokenAsGreen(
22581 Arc::new(GreenNode {
22582 kind: SyntaxKind::TokenMissing,
22583 details: GreenNodeDetails::Token("".into()),
22584 })
22585 .intern(db),
22586 )
22587 }
22588 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22589 match node.0.green.lookup_intern(db).details {
22590 GreenNodeDetails::Token(_) => Self { node },
22591 GreenNodeDetails::Node { .. } => {
22592 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenAs)
22593 }
22594 }
22595 }
22596 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22597 match node.0.green.lookup_intern(db).details {
22598 GreenNodeDetails::Token(_) => Some(Self { node }),
22599 GreenNodeDetails::Node { .. } => None,
22600 }
22601 }
22602 fn as_syntax_node(&self) -> SyntaxNode {
22603 self.node.clone()
22604 }
22605 fn stable_ptr(&self) -> Self::StablePtr {
22606 TokenAsPtr(self.node.0.stable_ptr)
22607 }
22608}
22609impl From<&TokenAs> for SyntaxStablePtrId {
22610 fn from(node: &TokenAs) -> Self {
22611 node.stable_ptr().untyped()
22612 }
22613}
22614#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22615pub struct TerminalAs {
22616 node: SyntaxNode,
22617 children: Arc<[SyntaxNode]>,
22618}
22619impl Terminal for TerminalAs {
22620 const KIND: SyntaxKind = SyntaxKind::TerminalAs;
22621 type TokenType = TokenAs;
22622 fn new_green(
22623 db: &dyn SyntaxGroup,
22624 leading_trivia: TriviaGreen,
22625 token: <<TerminalAs as Terminal>::TokenType as TypedSyntaxNode>::Green,
22626 trailing_trivia: TriviaGreen,
22627 ) -> Self::Green {
22628 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
22629 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
22630 TerminalAsGreen(
22631 Arc::new(GreenNode {
22632 kind: SyntaxKind::TerminalAs,
22633 details: GreenNodeDetails::Node { children, width },
22634 })
22635 .intern(db),
22636 )
22637 }
22638 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22639 self.token(db).text(db)
22640 }
22641}
22642impl TerminalAs {
22643 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
22644 Trivia::from_syntax_node(db, self.children[0].clone())
22645 }
22646 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenAs {
22647 TokenAs::from_syntax_node(db, self.children[1].clone())
22648 }
22649 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
22650 Trivia::from_syntax_node(db, self.children[2].clone())
22651 }
22652}
22653#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22654pub struct TerminalAsPtr(pub SyntaxStablePtrId);
22655impl TerminalAsPtr {}
22656impl TypedStablePtr for TerminalAsPtr {
22657 type SyntaxNode = TerminalAs;
22658 fn untyped(&self) -> SyntaxStablePtrId {
22659 self.0
22660 }
22661 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalAs {
22662 TerminalAs::from_syntax_node(db, self.0.lookup(db))
22663 }
22664}
22665impl From<TerminalAsPtr> for SyntaxStablePtrId {
22666 fn from(ptr: TerminalAsPtr) -> Self {
22667 ptr.untyped()
22668 }
22669}
22670#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22671pub struct TerminalAsGreen(pub GreenId);
22672impl TypedSyntaxNode for TerminalAs {
22673 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalAs);
22674 type StablePtr = TerminalAsPtr;
22675 type Green = TerminalAsGreen;
22676 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22677 TerminalAsGreen(
22678 Arc::new(GreenNode {
22679 kind: SyntaxKind::TerminalAs,
22680 details: GreenNodeDetails::Node {
22681 children: vec![
22682 Trivia::missing(db).0,
22683 TokenAs::missing(db).0,
22684 Trivia::missing(db).0,
22685 ],
22686 width: TextWidth::default(),
22687 },
22688 })
22689 .intern(db),
22690 )
22691 }
22692 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22693 let kind = node.kind(db);
22694 assert_eq!(
22695 kind,
22696 SyntaxKind::TerminalAs,
22697 "Unexpected SyntaxKind {:?}. Expected {:?}.",
22698 kind,
22699 SyntaxKind::TerminalAs
22700 );
22701 let children = db.get_children(node.clone());
22702 Self { node, children }
22703 }
22704 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22705 let kind = node.kind(db);
22706 if kind == SyntaxKind::TerminalAs { Some(Self::from_syntax_node(db, node)) } else { None }
22707 }
22708 fn as_syntax_node(&self) -> SyntaxNode {
22709 self.node.clone()
22710 }
22711 fn stable_ptr(&self) -> Self::StablePtr {
22712 TerminalAsPtr(self.node.0.stable_ptr)
22713 }
22714}
22715impl From<&TerminalAs> for SyntaxStablePtrId {
22716 fn from(node: &TerminalAs) -> Self {
22717 node.stable_ptr().untyped()
22718 }
22719}
22720#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22721pub struct TokenConst {
22722 node: SyntaxNode,
22723}
22724impl Token for TokenConst {
22725 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
22726 TokenConstGreen(
22727 Arc::new(GreenNode {
22728 kind: SyntaxKind::TokenConst,
22729 details: GreenNodeDetails::Token(text),
22730 })
22731 .intern(db),
22732 )
22733 }
22734 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22735 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
22736 .clone()
22737 }
22738}
22739#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22740pub struct TokenConstPtr(pub SyntaxStablePtrId);
22741impl TypedStablePtr for TokenConstPtr {
22742 type SyntaxNode = TokenConst;
22743 fn untyped(&self) -> SyntaxStablePtrId {
22744 self.0
22745 }
22746 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenConst {
22747 TokenConst::from_syntax_node(db, self.0.lookup(db))
22748 }
22749}
22750impl From<TokenConstPtr> for SyntaxStablePtrId {
22751 fn from(ptr: TokenConstPtr) -> Self {
22752 ptr.untyped()
22753 }
22754}
22755#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22756pub struct TokenConstGreen(pub GreenId);
22757impl TokenConstGreen {
22758 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22759 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
22760 }
22761}
22762impl TypedSyntaxNode for TokenConst {
22763 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenConst);
22764 type StablePtr = TokenConstPtr;
22765 type Green = TokenConstGreen;
22766 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22767 TokenConstGreen(
22768 Arc::new(GreenNode {
22769 kind: SyntaxKind::TokenMissing,
22770 details: GreenNodeDetails::Token("".into()),
22771 })
22772 .intern(db),
22773 )
22774 }
22775 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22776 match node.0.green.lookup_intern(db).details {
22777 GreenNodeDetails::Token(_) => Self { node },
22778 GreenNodeDetails::Node { .. } => {
22779 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenConst)
22780 }
22781 }
22782 }
22783 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22784 match node.0.green.lookup_intern(db).details {
22785 GreenNodeDetails::Token(_) => Some(Self { node }),
22786 GreenNodeDetails::Node { .. } => None,
22787 }
22788 }
22789 fn as_syntax_node(&self) -> SyntaxNode {
22790 self.node.clone()
22791 }
22792 fn stable_ptr(&self) -> Self::StablePtr {
22793 TokenConstPtr(self.node.0.stable_ptr)
22794 }
22795}
22796impl From<&TokenConst> for SyntaxStablePtrId {
22797 fn from(node: &TokenConst) -> Self {
22798 node.stable_ptr().untyped()
22799 }
22800}
22801#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22802pub struct TerminalConst {
22803 node: SyntaxNode,
22804 children: Arc<[SyntaxNode]>,
22805}
22806impl Terminal for TerminalConst {
22807 const KIND: SyntaxKind = SyntaxKind::TerminalConst;
22808 type TokenType = TokenConst;
22809 fn new_green(
22810 db: &dyn SyntaxGroup,
22811 leading_trivia: TriviaGreen,
22812 token: <<TerminalConst as Terminal>::TokenType as TypedSyntaxNode>::Green,
22813 trailing_trivia: TriviaGreen,
22814 ) -> Self::Green {
22815 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
22816 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
22817 TerminalConstGreen(
22818 Arc::new(GreenNode {
22819 kind: SyntaxKind::TerminalConst,
22820 details: GreenNodeDetails::Node { children, width },
22821 })
22822 .intern(db),
22823 )
22824 }
22825 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22826 self.token(db).text(db)
22827 }
22828}
22829impl TerminalConst {
22830 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
22831 Trivia::from_syntax_node(db, self.children[0].clone())
22832 }
22833 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenConst {
22834 TokenConst::from_syntax_node(db, self.children[1].clone())
22835 }
22836 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
22837 Trivia::from_syntax_node(db, self.children[2].clone())
22838 }
22839}
22840#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22841pub struct TerminalConstPtr(pub SyntaxStablePtrId);
22842impl TerminalConstPtr {}
22843impl TypedStablePtr for TerminalConstPtr {
22844 type SyntaxNode = TerminalConst;
22845 fn untyped(&self) -> SyntaxStablePtrId {
22846 self.0
22847 }
22848 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalConst {
22849 TerminalConst::from_syntax_node(db, self.0.lookup(db))
22850 }
22851}
22852impl From<TerminalConstPtr> for SyntaxStablePtrId {
22853 fn from(ptr: TerminalConstPtr) -> Self {
22854 ptr.untyped()
22855 }
22856}
22857#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22858pub struct TerminalConstGreen(pub GreenId);
22859impl TypedSyntaxNode for TerminalConst {
22860 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalConst);
22861 type StablePtr = TerminalConstPtr;
22862 type Green = TerminalConstGreen;
22863 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22864 TerminalConstGreen(
22865 Arc::new(GreenNode {
22866 kind: SyntaxKind::TerminalConst,
22867 details: GreenNodeDetails::Node {
22868 children: vec![
22869 Trivia::missing(db).0,
22870 TokenConst::missing(db).0,
22871 Trivia::missing(db).0,
22872 ],
22873 width: TextWidth::default(),
22874 },
22875 })
22876 .intern(db),
22877 )
22878 }
22879 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22880 let kind = node.kind(db);
22881 assert_eq!(
22882 kind,
22883 SyntaxKind::TerminalConst,
22884 "Unexpected SyntaxKind {:?}. Expected {:?}.",
22885 kind,
22886 SyntaxKind::TerminalConst
22887 );
22888 let children = db.get_children(node.clone());
22889 Self { node, children }
22890 }
22891 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22892 let kind = node.kind(db);
22893 if kind == SyntaxKind::TerminalConst {
22894 Some(Self::from_syntax_node(db, node))
22895 } else {
22896 None
22897 }
22898 }
22899 fn as_syntax_node(&self) -> SyntaxNode {
22900 self.node.clone()
22901 }
22902 fn stable_ptr(&self) -> Self::StablePtr {
22903 TerminalConstPtr(self.node.0.stable_ptr)
22904 }
22905}
22906impl From<&TerminalConst> for SyntaxStablePtrId {
22907 fn from(node: &TerminalConst) -> Self {
22908 node.stable_ptr().untyped()
22909 }
22910}
22911#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22912pub struct TokenElse {
22913 node: SyntaxNode,
22914}
22915impl Token for TokenElse {
22916 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
22917 TokenElseGreen(
22918 Arc::new(GreenNode {
22919 kind: SyntaxKind::TokenElse,
22920 details: GreenNodeDetails::Token(text),
22921 })
22922 .intern(db),
22923 )
22924 }
22925 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22926 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
22927 .clone()
22928 }
22929}
22930#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22931pub struct TokenElsePtr(pub SyntaxStablePtrId);
22932impl TypedStablePtr for TokenElsePtr {
22933 type SyntaxNode = TokenElse;
22934 fn untyped(&self) -> SyntaxStablePtrId {
22935 self.0
22936 }
22937 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenElse {
22938 TokenElse::from_syntax_node(db, self.0.lookup(db))
22939 }
22940}
22941impl From<TokenElsePtr> for SyntaxStablePtrId {
22942 fn from(ptr: TokenElsePtr) -> Self {
22943 ptr.untyped()
22944 }
22945}
22946#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22947pub struct TokenElseGreen(pub GreenId);
22948impl TokenElseGreen {
22949 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22950 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
22951 }
22952}
22953impl TypedSyntaxNode for TokenElse {
22954 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenElse);
22955 type StablePtr = TokenElsePtr;
22956 type Green = TokenElseGreen;
22957 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22958 TokenElseGreen(
22959 Arc::new(GreenNode {
22960 kind: SyntaxKind::TokenMissing,
22961 details: GreenNodeDetails::Token("".into()),
22962 })
22963 .intern(db),
22964 )
22965 }
22966 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22967 match node.0.green.lookup_intern(db).details {
22968 GreenNodeDetails::Token(_) => Self { node },
22969 GreenNodeDetails::Node { .. } => {
22970 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenElse)
22971 }
22972 }
22973 }
22974 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22975 match node.0.green.lookup_intern(db).details {
22976 GreenNodeDetails::Token(_) => Some(Self { node }),
22977 GreenNodeDetails::Node { .. } => None,
22978 }
22979 }
22980 fn as_syntax_node(&self) -> SyntaxNode {
22981 self.node.clone()
22982 }
22983 fn stable_ptr(&self) -> Self::StablePtr {
22984 TokenElsePtr(self.node.0.stable_ptr)
22985 }
22986}
22987impl From<&TokenElse> for SyntaxStablePtrId {
22988 fn from(node: &TokenElse) -> Self {
22989 node.stable_ptr().untyped()
22990 }
22991}
22992#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22993pub struct TerminalElse {
22994 node: SyntaxNode,
22995 children: Arc<[SyntaxNode]>,
22996}
22997impl Terminal for TerminalElse {
22998 const KIND: SyntaxKind = SyntaxKind::TerminalElse;
22999 type TokenType = TokenElse;
23000 fn new_green(
23001 db: &dyn SyntaxGroup,
23002 leading_trivia: TriviaGreen,
23003 token: <<TerminalElse as Terminal>::TokenType as TypedSyntaxNode>::Green,
23004 trailing_trivia: TriviaGreen,
23005 ) -> Self::Green {
23006 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
23007 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
23008 TerminalElseGreen(
23009 Arc::new(GreenNode {
23010 kind: SyntaxKind::TerminalElse,
23011 details: GreenNodeDetails::Node { children, width },
23012 })
23013 .intern(db),
23014 )
23015 }
23016 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23017 self.token(db).text(db)
23018 }
23019}
23020impl TerminalElse {
23021 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
23022 Trivia::from_syntax_node(db, self.children[0].clone())
23023 }
23024 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenElse {
23025 TokenElse::from_syntax_node(db, self.children[1].clone())
23026 }
23027 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
23028 Trivia::from_syntax_node(db, self.children[2].clone())
23029 }
23030}
23031#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23032pub struct TerminalElsePtr(pub SyntaxStablePtrId);
23033impl TerminalElsePtr {}
23034impl TypedStablePtr for TerminalElsePtr {
23035 type SyntaxNode = TerminalElse;
23036 fn untyped(&self) -> SyntaxStablePtrId {
23037 self.0
23038 }
23039 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalElse {
23040 TerminalElse::from_syntax_node(db, self.0.lookup(db))
23041 }
23042}
23043impl From<TerminalElsePtr> for SyntaxStablePtrId {
23044 fn from(ptr: TerminalElsePtr) -> Self {
23045 ptr.untyped()
23046 }
23047}
23048#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23049pub struct TerminalElseGreen(pub GreenId);
23050impl TypedSyntaxNode for TerminalElse {
23051 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalElse);
23052 type StablePtr = TerminalElsePtr;
23053 type Green = TerminalElseGreen;
23054 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23055 TerminalElseGreen(
23056 Arc::new(GreenNode {
23057 kind: SyntaxKind::TerminalElse,
23058 details: GreenNodeDetails::Node {
23059 children: vec![
23060 Trivia::missing(db).0,
23061 TokenElse::missing(db).0,
23062 Trivia::missing(db).0,
23063 ],
23064 width: TextWidth::default(),
23065 },
23066 })
23067 .intern(db),
23068 )
23069 }
23070 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23071 let kind = node.kind(db);
23072 assert_eq!(
23073 kind,
23074 SyntaxKind::TerminalElse,
23075 "Unexpected SyntaxKind {:?}. Expected {:?}.",
23076 kind,
23077 SyntaxKind::TerminalElse
23078 );
23079 let children = db.get_children(node.clone());
23080 Self { node, children }
23081 }
23082 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23083 let kind = node.kind(db);
23084 if kind == SyntaxKind::TerminalElse { Some(Self::from_syntax_node(db, node)) } else { None }
23085 }
23086 fn as_syntax_node(&self) -> SyntaxNode {
23087 self.node.clone()
23088 }
23089 fn stable_ptr(&self) -> Self::StablePtr {
23090 TerminalElsePtr(self.node.0.stable_ptr)
23091 }
23092}
23093impl From<&TerminalElse> for SyntaxStablePtrId {
23094 fn from(node: &TerminalElse) -> Self {
23095 node.stable_ptr().untyped()
23096 }
23097}
23098#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23099pub struct TokenEnum {
23100 node: SyntaxNode,
23101}
23102impl Token for TokenEnum {
23103 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
23104 TokenEnumGreen(
23105 Arc::new(GreenNode {
23106 kind: SyntaxKind::TokenEnum,
23107 details: GreenNodeDetails::Token(text),
23108 })
23109 .intern(db),
23110 )
23111 }
23112 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23113 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
23114 .clone()
23115 }
23116}
23117#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23118pub struct TokenEnumPtr(pub SyntaxStablePtrId);
23119impl TypedStablePtr for TokenEnumPtr {
23120 type SyntaxNode = TokenEnum;
23121 fn untyped(&self) -> SyntaxStablePtrId {
23122 self.0
23123 }
23124 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenEnum {
23125 TokenEnum::from_syntax_node(db, self.0.lookup(db))
23126 }
23127}
23128impl From<TokenEnumPtr> for SyntaxStablePtrId {
23129 fn from(ptr: TokenEnumPtr) -> Self {
23130 ptr.untyped()
23131 }
23132}
23133#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23134pub struct TokenEnumGreen(pub GreenId);
23135impl TokenEnumGreen {
23136 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23137 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
23138 }
23139}
23140impl TypedSyntaxNode for TokenEnum {
23141 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenEnum);
23142 type StablePtr = TokenEnumPtr;
23143 type Green = TokenEnumGreen;
23144 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23145 TokenEnumGreen(
23146 Arc::new(GreenNode {
23147 kind: SyntaxKind::TokenMissing,
23148 details: GreenNodeDetails::Token("".into()),
23149 })
23150 .intern(db),
23151 )
23152 }
23153 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23154 match node.0.green.lookup_intern(db).details {
23155 GreenNodeDetails::Token(_) => Self { node },
23156 GreenNodeDetails::Node { .. } => {
23157 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenEnum)
23158 }
23159 }
23160 }
23161 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23162 match node.0.green.lookup_intern(db).details {
23163 GreenNodeDetails::Token(_) => Some(Self { node }),
23164 GreenNodeDetails::Node { .. } => None,
23165 }
23166 }
23167 fn as_syntax_node(&self) -> SyntaxNode {
23168 self.node.clone()
23169 }
23170 fn stable_ptr(&self) -> Self::StablePtr {
23171 TokenEnumPtr(self.node.0.stable_ptr)
23172 }
23173}
23174impl From<&TokenEnum> for SyntaxStablePtrId {
23175 fn from(node: &TokenEnum) -> Self {
23176 node.stable_ptr().untyped()
23177 }
23178}
23179#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23180pub struct TerminalEnum {
23181 node: SyntaxNode,
23182 children: Arc<[SyntaxNode]>,
23183}
23184impl Terminal for TerminalEnum {
23185 const KIND: SyntaxKind = SyntaxKind::TerminalEnum;
23186 type TokenType = TokenEnum;
23187 fn new_green(
23188 db: &dyn SyntaxGroup,
23189 leading_trivia: TriviaGreen,
23190 token: <<TerminalEnum as Terminal>::TokenType as TypedSyntaxNode>::Green,
23191 trailing_trivia: TriviaGreen,
23192 ) -> Self::Green {
23193 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
23194 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
23195 TerminalEnumGreen(
23196 Arc::new(GreenNode {
23197 kind: SyntaxKind::TerminalEnum,
23198 details: GreenNodeDetails::Node { children, width },
23199 })
23200 .intern(db),
23201 )
23202 }
23203 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23204 self.token(db).text(db)
23205 }
23206}
23207impl TerminalEnum {
23208 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
23209 Trivia::from_syntax_node(db, self.children[0].clone())
23210 }
23211 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenEnum {
23212 TokenEnum::from_syntax_node(db, self.children[1].clone())
23213 }
23214 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
23215 Trivia::from_syntax_node(db, self.children[2].clone())
23216 }
23217}
23218#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23219pub struct TerminalEnumPtr(pub SyntaxStablePtrId);
23220impl TerminalEnumPtr {}
23221impl TypedStablePtr for TerminalEnumPtr {
23222 type SyntaxNode = TerminalEnum;
23223 fn untyped(&self) -> SyntaxStablePtrId {
23224 self.0
23225 }
23226 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalEnum {
23227 TerminalEnum::from_syntax_node(db, self.0.lookup(db))
23228 }
23229}
23230impl From<TerminalEnumPtr> for SyntaxStablePtrId {
23231 fn from(ptr: TerminalEnumPtr) -> Self {
23232 ptr.untyped()
23233 }
23234}
23235#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23236pub struct TerminalEnumGreen(pub GreenId);
23237impl TypedSyntaxNode for TerminalEnum {
23238 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalEnum);
23239 type StablePtr = TerminalEnumPtr;
23240 type Green = TerminalEnumGreen;
23241 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23242 TerminalEnumGreen(
23243 Arc::new(GreenNode {
23244 kind: SyntaxKind::TerminalEnum,
23245 details: GreenNodeDetails::Node {
23246 children: vec![
23247 Trivia::missing(db).0,
23248 TokenEnum::missing(db).0,
23249 Trivia::missing(db).0,
23250 ],
23251 width: TextWidth::default(),
23252 },
23253 })
23254 .intern(db),
23255 )
23256 }
23257 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23258 let kind = node.kind(db);
23259 assert_eq!(
23260 kind,
23261 SyntaxKind::TerminalEnum,
23262 "Unexpected SyntaxKind {:?}. Expected {:?}.",
23263 kind,
23264 SyntaxKind::TerminalEnum
23265 );
23266 let children = db.get_children(node.clone());
23267 Self { node, children }
23268 }
23269 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23270 let kind = node.kind(db);
23271 if kind == SyntaxKind::TerminalEnum { Some(Self::from_syntax_node(db, node)) } else { None }
23272 }
23273 fn as_syntax_node(&self) -> SyntaxNode {
23274 self.node.clone()
23275 }
23276 fn stable_ptr(&self) -> Self::StablePtr {
23277 TerminalEnumPtr(self.node.0.stable_ptr)
23278 }
23279}
23280impl From<&TerminalEnum> for SyntaxStablePtrId {
23281 fn from(node: &TerminalEnum) -> Self {
23282 node.stable_ptr().untyped()
23283 }
23284}
23285#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23286pub struct TokenExtern {
23287 node: SyntaxNode,
23288}
23289impl Token for TokenExtern {
23290 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
23291 TokenExternGreen(
23292 Arc::new(GreenNode {
23293 kind: SyntaxKind::TokenExtern,
23294 details: GreenNodeDetails::Token(text),
23295 })
23296 .intern(db),
23297 )
23298 }
23299 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23300 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
23301 .clone()
23302 }
23303}
23304#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23305pub struct TokenExternPtr(pub SyntaxStablePtrId);
23306impl TypedStablePtr for TokenExternPtr {
23307 type SyntaxNode = TokenExtern;
23308 fn untyped(&self) -> SyntaxStablePtrId {
23309 self.0
23310 }
23311 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenExtern {
23312 TokenExtern::from_syntax_node(db, self.0.lookup(db))
23313 }
23314}
23315impl From<TokenExternPtr> for SyntaxStablePtrId {
23316 fn from(ptr: TokenExternPtr) -> Self {
23317 ptr.untyped()
23318 }
23319}
23320#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23321pub struct TokenExternGreen(pub GreenId);
23322impl TokenExternGreen {
23323 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23324 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
23325 }
23326}
23327impl TypedSyntaxNode for TokenExtern {
23328 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenExtern);
23329 type StablePtr = TokenExternPtr;
23330 type Green = TokenExternGreen;
23331 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23332 TokenExternGreen(
23333 Arc::new(GreenNode {
23334 kind: SyntaxKind::TokenMissing,
23335 details: GreenNodeDetails::Token("".into()),
23336 })
23337 .intern(db),
23338 )
23339 }
23340 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23341 match node.0.green.lookup_intern(db).details {
23342 GreenNodeDetails::Token(_) => Self { node },
23343 GreenNodeDetails::Node { .. } => {
23344 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenExtern)
23345 }
23346 }
23347 }
23348 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23349 match node.0.green.lookup_intern(db).details {
23350 GreenNodeDetails::Token(_) => Some(Self { node }),
23351 GreenNodeDetails::Node { .. } => None,
23352 }
23353 }
23354 fn as_syntax_node(&self) -> SyntaxNode {
23355 self.node.clone()
23356 }
23357 fn stable_ptr(&self) -> Self::StablePtr {
23358 TokenExternPtr(self.node.0.stable_ptr)
23359 }
23360}
23361impl From<&TokenExtern> for SyntaxStablePtrId {
23362 fn from(node: &TokenExtern) -> Self {
23363 node.stable_ptr().untyped()
23364 }
23365}
23366#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23367pub struct TerminalExtern {
23368 node: SyntaxNode,
23369 children: Arc<[SyntaxNode]>,
23370}
23371impl Terminal for TerminalExtern {
23372 const KIND: SyntaxKind = SyntaxKind::TerminalExtern;
23373 type TokenType = TokenExtern;
23374 fn new_green(
23375 db: &dyn SyntaxGroup,
23376 leading_trivia: TriviaGreen,
23377 token: <<TerminalExtern as Terminal>::TokenType as TypedSyntaxNode>::Green,
23378 trailing_trivia: TriviaGreen,
23379 ) -> Self::Green {
23380 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
23381 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
23382 TerminalExternGreen(
23383 Arc::new(GreenNode {
23384 kind: SyntaxKind::TerminalExtern,
23385 details: GreenNodeDetails::Node { children, width },
23386 })
23387 .intern(db),
23388 )
23389 }
23390 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23391 self.token(db).text(db)
23392 }
23393}
23394impl TerminalExtern {
23395 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
23396 Trivia::from_syntax_node(db, self.children[0].clone())
23397 }
23398 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenExtern {
23399 TokenExtern::from_syntax_node(db, self.children[1].clone())
23400 }
23401 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
23402 Trivia::from_syntax_node(db, self.children[2].clone())
23403 }
23404}
23405#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23406pub struct TerminalExternPtr(pub SyntaxStablePtrId);
23407impl TerminalExternPtr {}
23408impl TypedStablePtr for TerminalExternPtr {
23409 type SyntaxNode = TerminalExtern;
23410 fn untyped(&self) -> SyntaxStablePtrId {
23411 self.0
23412 }
23413 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalExtern {
23414 TerminalExtern::from_syntax_node(db, self.0.lookup(db))
23415 }
23416}
23417impl From<TerminalExternPtr> for SyntaxStablePtrId {
23418 fn from(ptr: TerminalExternPtr) -> Self {
23419 ptr.untyped()
23420 }
23421}
23422#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23423pub struct TerminalExternGreen(pub GreenId);
23424impl TypedSyntaxNode for TerminalExtern {
23425 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalExtern);
23426 type StablePtr = TerminalExternPtr;
23427 type Green = TerminalExternGreen;
23428 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23429 TerminalExternGreen(
23430 Arc::new(GreenNode {
23431 kind: SyntaxKind::TerminalExtern,
23432 details: GreenNodeDetails::Node {
23433 children: vec![
23434 Trivia::missing(db).0,
23435 TokenExtern::missing(db).0,
23436 Trivia::missing(db).0,
23437 ],
23438 width: TextWidth::default(),
23439 },
23440 })
23441 .intern(db),
23442 )
23443 }
23444 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23445 let kind = node.kind(db);
23446 assert_eq!(
23447 kind,
23448 SyntaxKind::TerminalExtern,
23449 "Unexpected SyntaxKind {:?}. Expected {:?}.",
23450 kind,
23451 SyntaxKind::TerminalExtern
23452 );
23453 let children = db.get_children(node.clone());
23454 Self { node, children }
23455 }
23456 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23457 let kind = node.kind(db);
23458 if kind == SyntaxKind::TerminalExtern {
23459 Some(Self::from_syntax_node(db, node))
23460 } else {
23461 None
23462 }
23463 }
23464 fn as_syntax_node(&self) -> SyntaxNode {
23465 self.node.clone()
23466 }
23467 fn stable_ptr(&self) -> Self::StablePtr {
23468 TerminalExternPtr(self.node.0.stable_ptr)
23469 }
23470}
23471impl From<&TerminalExtern> for SyntaxStablePtrId {
23472 fn from(node: &TerminalExtern) -> Self {
23473 node.stable_ptr().untyped()
23474 }
23475}
23476#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23477pub struct TokenFalse {
23478 node: SyntaxNode,
23479}
23480impl Token for TokenFalse {
23481 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
23482 TokenFalseGreen(
23483 Arc::new(GreenNode {
23484 kind: SyntaxKind::TokenFalse,
23485 details: GreenNodeDetails::Token(text),
23486 })
23487 .intern(db),
23488 )
23489 }
23490 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23491 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
23492 .clone()
23493 }
23494}
23495#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23496pub struct TokenFalsePtr(pub SyntaxStablePtrId);
23497impl TypedStablePtr for TokenFalsePtr {
23498 type SyntaxNode = TokenFalse;
23499 fn untyped(&self) -> SyntaxStablePtrId {
23500 self.0
23501 }
23502 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenFalse {
23503 TokenFalse::from_syntax_node(db, self.0.lookup(db))
23504 }
23505}
23506impl From<TokenFalsePtr> for SyntaxStablePtrId {
23507 fn from(ptr: TokenFalsePtr) -> Self {
23508 ptr.untyped()
23509 }
23510}
23511#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23512pub struct TokenFalseGreen(pub GreenId);
23513impl TokenFalseGreen {
23514 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23515 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
23516 }
23517}
23518impl TypedSyntaxNode for TokenFalse {
23519 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenFalse);
23520 type StablePtr = TokenFalsePtr;
23521 type Green = TokenFalseGreen;
23522 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23523 TokenFalseGreen(
23524 Arc::new(GreenNode {
23525 kind: SyntaxKind::TokenMissing,
23526 details: GreenNodeDetails::Token("".into()),
23527 })
23528 .intern(db),
23529 )
23530 }
23531 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23532 match node.0.green.lookup_intern(db).details {
23533 GreenNodeDetails::Token(_) => Self { node },
23534 GreenNodeDetails::Node { .. } => {
23535 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenFalse)
23536 }
23537 }
23538 }
23539 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23540 match node.0.green.lookup_intern(db).details {
23541 GreenNodeDetails::Token(_) => Some(Self { node }),
23542 GreenNodeDetails::Node { .. } => None,
23543 }
23544 }
23545 fn as_syntax_node(&self) -> SyntaxNode {
23546 self.node.clone()
23547 }
23548 fn stable_ptr(&self) -> Self::StablePtr {
23549 TokenFalsePtr(self.node.0.stable_ptr)
23550 }
23551}
23552impl From<&TokenFalse> for SyntaxStablePtrId {
23553 fn from(node: &TokenFalse) -> Self {
23554 node.stable_ptr().untyped()
23555 }
23556}
23557#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23558pub struct TerminalFalse {
23559 node: SyntaxNode,
23560 children: Arc<[SyntaxNode]>,
23561}
23562impl Terminal for TerminalFalse {
23563 const KIND: SyntaxKind = SyntaxKind::TerminalFalse;
23564 type TokenType = TokenFalse;
23565 fn new_green(
23566 db: &dyn SyntaxGroup,
23567 leading_trivia: TriviaGreen,
23568 token: <<TerminalFalse as Terminal>::TokenType as TypedSyntaxNode>::Green,
23569 trailing_trivia: TriviaGreen,
23570 ) -> Self::Green {
23571 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
23572 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
23573 TerminalFalseGreen(
23574 Arc::new(GreenNode {
23575 kind: SyntaxKind::TerminalFalse,
23576 details: GreenNodeDetails::Node { children, width },
23577 })
23578 .intern(db),
23579 )
23580 }
23581 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23582 self.token(db).text(db)
23583 }
23584}
23585impl TerminalFalse {
23586 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
23587 Trivia::from_syntax_node(db, self.children[0].clone())
23588 }
23589 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenFalse {
23590 TokenFalse::from_syntax_node(db, self.children[1].clone())
23591 }
23592 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
23593 Trivia::from_syntax_node(db, self.children[2].clone())
23594 }
23595}
23596#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23597pub struct TerminalFalsePtr(pub SyntaxStablePtrId);
23598impl TerminalFalsePtr {}
23599impl TypedStablePtr for TerminalFalsePtr {
23600 type SyntaxNode = TerminalFalse;
23601 fn untyped(&self) -> SyntaxStablePtrId {
23602 self.0
23603 }
23604 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalFalse {
23605 TerminalFalse::from_syntax_node(db, self.0.lookup(db))
23606 }
23607}
23608impl From<TerminalFalsePtr> for SyntaxStablePtrId {
23609 fn from(ptr: TerminalFalsePtr) -> Self {
23610 ptr.untyped()
23611 }
23612}
23613#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23614pub struct TerminalFalseGreen(pub GreenId);
23615impl TypedSyntaxNode for TerminalFalse {
23616 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalFalse);
23617 type StablePtr = TerminalFalsePtr;
23618 type Green = TerminalFalseGreen;
23619 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23620 TerminalFalseGreen(
23621 Arc::new(GreenNode {
23622 kind: SyntaxKind::TerminalFalse,
23623 details: GreenNodeDetails::Node {
23624 children: vec![
23625 Trivia::missing(db).0,
23626 TokenFalse::missing(db).0,
23627 Trivia::missing(db).0,
23628 ],
23629 width: TextWidth::default(),
23630 },
23631 })
23632 .intern(db),
23633 )
23634 }
23635 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23636 let kind = node.kind(db);
23637 assert_eq!(
23638 kind,
23639 SyntaxKind::TerminalFalse,
23640 "Unexpected SyntaxKind {:?}. Expected {:?}.",
23641 kind,
23642 SyntaxKind::TerminalFalse
23643 );
23644 let children = db.get_children(node.clone());
23645 Self { node, children }
23646 }
23647 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23648 let kind = node.kind(db);
23649 if kind == SyntaxKind::TerminalFalse {
23650 Some(Self::from_syntax_node(db, node))
23651 } else {
23652 None
23653 }
23654 }
23655 fn as_syntax_node(&self) -> SyntaxNode {
23656 self.node.clone()
23657 }
23658 fn stable_ptr(&self) -> Self::StablePtr {
23659 TerminalFalsePtr(self.node.0.stable_ptr)
23660 }
23661}
23662impl From<&TerminalFalse> for SyntaxStablePtrId {
23663 fn from(node: &TerminalFalse) -> Self {
23664 node.stable_ptr().untyped()
23665 }
23666}
23667#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23668pub struct TokenFunction {
23669 node: SyntaxNode,
23670}
23671impl Token for TokenFunction {
23672 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
23673 TokenFunctionGreen(
23674 Arc::new(GreenNode {
23675 kind: SyntaxKind::TokenFunction,
23676 details: GreenNodeDetails::Token(text),
23677 })
23678 .intern(db),
23679 )
23680 }
23681 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23682 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
23683 .clone()
23684 }
23685}
23686#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23687pub struct TokenFunctionPtr(pub SyntaxStablePtrId);
23688impl TypedStablePtr for TokenFunctionPtr {
23689 type SyntaxNode = TokenFunction;
23690 fn untyped(&self) -> SyntaxStablePtrId {
23691 self.0
23692 }
23693 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenFunction {
23694 TokenFunction::from_syntax_node(db, self.0.lookup(db))
23695 }
23696}
23697impl From<TokenFunctionPtr> for SyntaxStablePtrId {
23698 fn from(ptr: TokenFunctionPtr) -> Self {
23699 ptr.untyped()
23700 }
23701}
23702#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23703pub struct TokenFunctionGreen(pub GreenId);
23704impl TokenFunctionGreen {
23705 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23706 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
23707 }
23708}
23709impl TypedSyntaxNode for TokenFunction {
23710 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenFunction);
23711 type StablePtr = TokenFunctionPtr;
23712 type Green = TokenFunctionGreen;
23713 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23714 TokenFunctionGreen(
23715 Arc::new(GreenNode {
23716 kind: SyntaxKind::TokenMissing,
23717 details: GreenNodeDetails::Token("".into()),
23718 })
23719 .intern(db),
23720 )
23721 }
23722 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23723 match node.0.green.lookup_intern(db).details {
23724 GreenNodeDetails::Token(_) => Self { node },
23725 GreenNodeDetails::Node { .. } => {
23726 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenFunction)
23727 }
23728 }
23729 }
23730 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23731 match node.0.green.lookup_intern(db).details {
23732 GreenNodeDetails::Token(_) => Some(Self { node }),
23733 GreenNodeDetails::Node { .. } => None,
23734 }
23735 }
23736 fn as_syntax_node(&self) -> SyntaxNode {
23737 self.node.clone()
23738 }
23739 fn stable_ptr(&self) -> Self::StablePtr {
23740 TokenFunctionPtr(self.node.0.stable_ptr)
23741 }
23742}
23743impl From<&TokenFunction> for SyntaxStablePtrId {
23744 fn from(node: &TokenFunction) -> Self {
23745 node.stable_ptr().untyped()
23746 }
23747}
23748#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23749pub struct TerminalFunction {
23750 node: SyntaxNode,
23751 children: Arc<[SyntaxNode]>,
23752}
23753impl Terminal for TerminalFunction {
23754 const KIND: SyntaxKind = SyntaxKind::TerminalFunction;
23755 type TokenType = TokenFunction;
23756 fn new_green(
23757 db: &dyn SyntaxGroup,
23758 leading_trivia: TriviaGreen,
23759 token: <<TerminalFunction as Terminal>::TokenType as TypedSyntaxNode>::Green,
23760 trailing_trivia: TriviaGreen,
23761 ) -> Self::Green {
23762 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
23763 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
23764 TerminalFunctionGreen(
23765 Arc::new(GreenNode {
23766 kind: SyntaxKind::TerminalFunction,
23767 details: GreenNodeDetails::Node { children, width },
23768 })
23769 .intern(db),
23770 )
23771 }
23772 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23773 self.token(db).text(db)
23774 }
23775}
23776impl TerminalFunction {
23777 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
23778 Trivia::from_syntax_node(db, self.children[0].clone())
23779 }
23780 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenFunction {
23781 TokenFunction::from_syntax_node(db, self.children[1].clone())
23782 }
23783 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
23784 Trivia::from_syntax_node(db, self.children[2].clone())
23785 }
23786}
23787#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23788pub struct TerminalFunctionPtr(pub SyntaxStablePtrId);
23789impl TerminalFunctionPtr {}
23790impl TypedStablePtr for TerminalFunctionPtr {
23791 type SyntaxNode = TerminalFunction;
23792 fn untyped(&self) -> SyntaxStablePtrId {
23793 self.0
23794 }
23795 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalFunction {
23796 TerminalFunction::from_syntax_node(db, self.0.lookup(db))
23797 }
23798}
23799impl From<TerminalFunctionPtr> for SyntaxStablePtrId {
23800 fn from(ptr: TerminalFunctionPtr) -> Self {
23801 ptr.untyped()
23802 }
23803}
23804#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23805pub struct TerminalFunctionGreen(pub GreenId);
23806impl TypedSyntaxNode for TerminalFunction {
23807 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalFunction);
23808 type StablePtr = TerminalFunctionPtr;
23809 type Green = TerminalFunctionGreen;
23810 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23811 TerminalFunctionGreen(
23812 Arc::new(GreenNode {
23813 kind: SyntaxKind::TerminalFunction,
23814 details: GreenNodeDetails::Node {
23815 children: vec![
23816 Trivia::missing(db).0,
23817 TokenFunction::missing(db).0,
23818 Trivia::missing(db).0,
23819 ],
23820 width: TextWidth::default(),
23821 },
23822 })
23823 .intern(db),
23824 )
23825 }
23826 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23827 let kind = node.kind(db);
23828 assert_eq!(
23829 kind,
23830 SyntaxKind::TerminalFunction,
23831 "Unexpected SyntaxKind {:?}. Expected {:?}.",
23832 kind,
23833 SyntaxKind::TerminalFunction
23834 );
23835 let children = db.get_children(node.clone());
23836 Self { node, children }
23837 }
23838 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23839 let kind = node.kind(db);
23840 if kind == SyntaxKind::TerminalFunction {
23841 Some(Self::from_syntax_node(db, node))
23842 } else {
23843 None
23844 }
23845 }
23846 fn as_syntax_node(&self) -> SyntaxNode {
23847 self.node.clone()
23848 }
23849 fn stable_ptr(&self) -> Self::StablePtr {
23850 TerminalFunctionPtr(self.node.0.stable_ptr)
23851 }
23852}
23853impl From<&TerminalFunction> for SyntaxStablePtrId {
23854 fn from(node: &TerminalFunction) -> Self {
23855 node.stable_ptr().untyped()
23856 }
23857}
23858#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23859pub struct TokenIf {
23860 node: SyntaxNode,
23861}
23862impl Token for TokenIf {
23863 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
23864 TokenIfGreen(
23865 Arc::new(GreenNode {
23866 kind: SyntaxKind::TokenIf,
23867 details: GreenNodeDetails::Token(text),
23868 })
23869 .intern(db),
23870 )
23871 }
23872 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23873 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
23874 .clone()
23875 }
23876}
23877#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23878pub struct TokenIfPtr(pub SyntaxStablePtrId);
23879impl TypedStablePtr for TokenIfPtr {
23880 type SyntaxNode = TokenIf;
23881 fn untyped(&self) -> SyntaxStablePtrId {
23882 self.0
23883 }
23884 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenIf {
23885 TokenIf::from_syntax_node(db, self.0.lookup(db))
23886 }
23887}
23888impl From<TokenIfPtr> for SyntaxStablePtrId {
23889 fn from(ptr: TokenIfPtr) -> Self {
23890 ptr.untyped()
23891 }
23892}
23893#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23894pub struct TokenIfGreen(pub GreenId);
23895impl TokenIfGreen {
23896 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23897 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
23898 }
23899}
23900impl TypedSyntaxNode for TokenIf {
23901 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenIf);
23902 type StablePtr = TokenIfPtr;
23903 type Green = TokenIfGreen;
23904 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23905 TokenIfGreen(
23906 Arc::new(GreenNode {
23907 kind: SyntaxKind::TokenMissing,
23908 details: GreenNodeDetails::Token("".into()),
23909 })
23910 .intern(db),
23911 )
23912 }
23913 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23914 match node.0.green.lookup_intern(db).details {
23915 GreenNodeDetails::Token(_) => Self { node },
23916 GreenNodeDetails::Node { .. } => {
23917 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenIf)
23918 }
23919 }
23920 }
23921 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23922 match node.0.green.lookup_intern(db).details {
23923 GreenNodeDetails::Token(_) => Some(Self { node }),
23924 GreenNodeDetails::Node { .. } => None,
23925 }
23926 }
23927 fn as_syntax_node(&self) -> SyntaxNode {
23928 self.node.clone()
23929 }
23930 fn stable_ptr(&self) -> Self::StablePtr {
23931 TokenIfPtr(self.node.0.stable_ptr)
23932 }
23933}
23934impl From<&TokenIf> for SyntaxStablePtrId {
23935 fn from(node: &TokenIf) -> Self {
23936 node.stable_ptr().untyped()
23937 }
23938}
23939#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23940pub struct TerminalIf {
23941 node: SyntaxNode,
23942 children: Arc<[SyntaxNode]>,
23943}
23944impl Terminal for TerminalIf {
23945 const KIND: SyntaxKind = SyntaxKind::TerminalIf;
23946 type TokenType = TokenIf;
23947 fn new_green(
23948 db: &dyn SyntaxGroup,
23949 leading_trivia: TriviaGreen,
23950 token: <<TerminalIf as Terminal>::TokenType as TypedSyntaxNode>::Green,
23951 trailing_trivia: TriviaGreen,
23952 ) -> Self::Green {
23953 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
23954 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
23955 TerminalIfGreen(
23956 Arc::new(GreenNode {
23957 kind: SyntaxKind::TerminalIf,
23958 details: GreenNodeDetails::Node { children, width },
23959 })
23960 .intern(db),
23961 )
23962 }
23963 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23964 self.token(db).text(db)
23965 }
23966}
23967impl TerminalIf {
23968 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
23969 Trivia::from_syntax_node(db, self.children[0].clone())
23970 }
23971 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenIf {
23972 TokenIf::from_syntax_node(db, self.children[1].clone())
23973 }
23974 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
23975 Trivia::from_syntax_node(db, self.children[2].clone())
23976 }
23977}
23978#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23979pub struct TerminalIfPtr(pub SyntaxStablePtrId);
23980impl TerminalIfPtr {}
23981impl TypedStablePtr for TerminalIfPtr {
23982 type SyntaxNode = TerminalIf;
23983 fn untyped(&self) -> SyntaxStablePtrId {
23984 self.0
23985 }
23986 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalIf {
23987 TerminalIf::from_syntax_node(db, self.0.lookup(db))
23988 }
23989}
23990impl From<TerminalIfPtr> for SyntaxStablePtrId {
23991 fn from(ptr: TerminalIfPtr) -> Self {
23992 ptr.untyped()
23993 }
23994}
23995#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23996pub struct TerminalIfGreen(pub GreenId);
23997impl TypedSyntaxNode for TerminalIf {
23998 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalIf);
23999 type StablePtr = TerminalIfPtr;
24000 type Green = TerminalIfGreen;
24001 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24002 TerminalIfGreen(
24003 Arc::new(GreenNode {
24004 kind: SyntaxKind::TerminalIf,
24005 details: GreenNodeDetails::Node {
24006 children: vec![
24007 Trivia::missing(db).0,
24008 TokenIf::missing(db).0,
24009 Trivia::missing(db).0,
24010 ],
24011 width: TextWidth::default(),
24012 },
24013 })
24014 .intern(db),
24015 )
24016 }
24017 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24018 let kind = node.kind(db);
24019 assert_eq!(
24020 kind,
24021 SyntaxKind::TerminalIf,
24022 "Unexpected SyntaxKind {:?}. Expected {:?}.",
24023 kind,
24024 SyntaxKind::TerminalIf
24025 );
24026 let children = db.get_children(node.clone());
24027 Self { node, children }
24028 }
24029 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24030 let kind = node.kind(db);
24031 if kind == SyntaxKind::TerminalIf { Some(Self::from_syntax_node(db, node)) } else { None }
24032 }
24033 fn as_syntax_node(&self) -> SyntaxNode {
24034 self.node.clone()
24035 }
24036 fn stable_ptr(&self) -> Self::StablePtr {
24037 TerminalIfPtr(self.node.0.stable_ptr)
24038 }
24039}
24040impl From<&TerminalIf> for SyntaxStablePtrId {
24041 fn from(node: &TerminalIf) -> Self {
24042 node.stable_ptr().untyped()
24043 }
24044}
24045#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24046pub struct TokenWhile {
24047 node: SyntaxNode,
24048}
24049impl Token for TokenWhile {
24050 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
24051 TokenWhileGreen(
24052 Arc::new(GreenNode {
24053 kind: SyntaxKind::TokenWhile,
24054 details: GreenNodeDetails::Token(text),
24055 })
24056 .intern(db),
24057 )
24058 }
24059 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24060 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
24061 .clone()
24062 }
24063}
24064#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24065pub struct TokenWhilePtr(pub SyntaxStablePtrId);
24066impl TypedStablePtr for TokenWhilePtr {
24067 type SyntaxNode = TokenWhile;
24068 fn untyped(&self) -> SyntaxStablePtrId {
24069 self.0
24070 }
24071 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenWhile {
24072 TokenWhile::from_syntax_node(db, self.0.lookup(db))
24073 }
24074}
24075impl From<TokenWhilePtr> for SyntaxStablePtrId {
24076 fn from(ptr: TokenWhilePtr) -> Self {
24077 ptr.untyped()
24078 }
24079}
24080#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24081pub struct TokenWhileGreen(pub GreenId);
24082impl TokenWhileGreen {
24083 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24084 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
24085 }
24086}
24087impl TypedSyntaxNode for TokenWhile {
24088 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenWhile);
24089 type StablePtr = TokenWhilePtr;
24090 type Green = TokenWhileGreen;
24091 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24092 TokenWhileGreen(
24093 Arc::new(GreenNode {
24094 kind: SyntaxKind::TokenMissing,
24095 details: GreenNodeDetails::Token("".into()),
24096 })
24097 .intern(db),
24098 )
24099 }
24100 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24101 match node.0.green.lookup_intern(db).details {
24102 GreenNodeDetails::Token(_) => Self { node },
24103 GreenNodeDetails::Node { .. } => {
24104 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenWhile)
24105 }
24106 }
24107 }
24108 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24109 match node.0.green.lookup_intern(db).details {
24110 GreenNodeDetails::Token(_) => Some(Self { node }),
24111 GreenNodeDetails::Node { .. } => None,
24112 }
24113 }
24114 fn as_syntax_node(&self) -> SyntaxNode {
24115 self.node.clone()
24116 }
24117 fn stable_ptr(&self) -> Self::StablePtr {
24118 TokenWhilePtr(self.node.0.stable_ptr)
24119 }
24120}
24121impl From<&TokenWhile> for SyntaxStablePtrId {
24122 fn from(node: &TokenWhile) -> Self {
24123 node.stable_ptr().untyped()
24124 }
24125}
24126#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24127pub struct TerminalWhile {
24128 node: SyntaxNode,
24129 children: Arc<[SyntaxNode]>,
24130}
24131impl Terminal for TerminalWhile {
24132 const KIND: SyntaxKind = SyntaxKind::TerminalWhile;
24133 type TokenType = TokenWhile;
24134 fn new_green(
24135 db: &dyn SyntaxGroup,
24136 leading_trivia: TriviaGreen,
24137 token: <<TerminalWhile as Terminal>::TokenType as TypedSyntaxNode>::Green,
24138 trailing_trivia: TriviaGreen,
24139 ) -> Self::Green {
24140 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
24141 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
24142 TerminalWhileGreen(
24143 Arc::new(GreenNode {
24144 kind: SyntaxKind::TerminalWhile,
24145 details: GreenNodeDetails::Node { children, width },
24146 })
24147 .intern(db),
24148 )
24149 }
24150 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24151 self.token(db).text(db)
24152 }
24153}
24154impl TerminalWhile {
24155 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
24156 Trivia::from_syntax_node(db, self.children[0].clone())
24157 }
24158 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenWhile {
24159 TokenWhile::from_syntax_node(db, self.children[1].clone())
24160 }
24161 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
24162 Trivia::from_syntax_node(db, self.children[2].clone())
24163 }
24164}
24165#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24166pub struct TerminalWhilePtr(pub SyntaxStablePtrId);
24167impl TerminalWhilePtr {}
24168impl TypedStablePtr for TerminalWhilePtr {
24169 type SyntaxNode = TerminalWhile;
24170 fn untyped(&self) -> SyntaxStablePtrId {
24171 self.0
24172 }
24173 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalWhile {
24174 TerminalWhile::from_syntax_node(db, self.0.lookup(db))
24175 }
24176}
24177impl From<TerminalWhilePtr> for SyntaxStablePtrId {
24178 fn from(ptr: TerminalWhilePtr) -> Self {
24179 ptr.untyped()
24180 }
24181}
24182#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24183pub struct TerminalWhileGreen(pub GreenId);
24184impl TypedSyntaxNode for TerminalWhile {
24185 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalWhile);
24186 type StablePtr = TerminalWhilePtr;
24187 type Green = TerminalWhileGreen;
24188 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24189 TerminalWhileGreen(
24190 Arc::new(GreenNode {
24191 kind: SyntaxKind::TerminalWhile,
24192 details: GreenNodeDetails::Node {
24193 children: vec![
24194 Trivia::missing(db).0,
24195 TokenWhile::missing(db).0,
24196 Trivia::missing(db).0,
24197 ],
24198 width: TextWidth::default(),
24199 },
24200 })
24201 .intern(db),
24202 )
24203 }
24204 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24205 let kind = node.kind(db);
24206 assert_eq!(
24207 kind,
24208 SyntaxKind::TerminalWhile,
24209 "Unexpected SyntaxKind {:?}. Expected {:?}.",
24210 kind,
24211 SyntaxKind::TerminalWhile
24212 );
24213 let children = db.get_children(node.clone());
24214 Self { node, children }
24215 }
24216 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24217 let kind = node.kind(db);
24218 if kind == SyntaxKind::TerminalWhile {
24219 Some(Self::from_syntax_node(db, node))
24220 } else {
24221 None
24222 }
24223 }
24224 fn as_syntax_node(&self) -> SyntaxNode {
24225 self.node.clone()
24226 }
24227 fn stable_ptr(&self) -> Self::StablePtr {
24228 TerminalWhilePtr(self.node.0.stable_ptr)
24229 }
24230}
24231impl From<&TerminalWhile> for SyntaxStablePtrId {
24232 fn from(node: &TerminalWhile) -> Self {
24233 node.stable_ptr().untyped()
24234 }
24235}
24236#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24237pub struct TokenFor {
24238 node: SyntaxNode,
24239}
24240impl Token for TokenFor {
24241 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
24242 TokenForGreen(
24243 Arc::new(GreenNode {
24244 kind: SyntaxKind::TokenFor,
24245 details: GreenNodeDetails::Token(text),
24246 })
24247 .intern(db),
24248 )
24249 }
24250 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24251 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
24252 .clone()
24253 }
24254}
24255#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24256pub struct TokenForPtr(pub SyntaxStablePtrId);
24257impl TypedStablePtr for TokenForPtr {
24258 type SyntaxNode = TokenFor;
24259 fn untyped(&self) -> SyntaxStablePtrId {
24260 self.0
24261 }
24262 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenFor {
24263 TokenFor::from_syntax_node(db, self.0.lookup(db))
24264 }
24265}
24266impl From<TokenForPtr> for SyntaxStablePtrId {
24267 fn from(ptr: TokenForPtr) -> Self {
24268 ptr.untyped()
24269 }
24270}
24271#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24272pub struct TokenForGreen(pub GreenId);
24273impl TokenForGreen {
24274 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24275 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
24276 }
24277}
24278impl TypedSyntaxNode for TokenFor {
24279 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenFor);
24280 type StablePtr = TokenForPtr;
24281 type Green = TokenForGreen;
24282 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24283 TokenForGreen(
24284 Arc::new(GreenNode {
24285 kind: SyntaxKind::TokenMissing,
24286 details: GreenNodeDetails::Token("".into()),
24287 })
24288 .intern(db),
24289 )
24290 }
24291 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24292 match node.0.green.lookup_intern(db).details {
24293 GreenNodeDetails::Token(_) => Self { node },
24294 GreenNodeDetails::Node { .. } => {
24295 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenFor)
24296 }
24297 }
24298 }
24299 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24300 match node.0.green.lookup_intern(db).details {
24301 GreenNodeDetails::Token(_) => Some(Self { node }),
24302 GreenNodeDetails::Node { .. } => None,
24303 }
24304 }
24305 fn as_syntax_node(&self) -> SyntaxNode {
24306 self.node.clone()
24307 }
24308 fn stable_ptr(&self) -> Self::StablePtr {
24309 TokenForPtr(self.node.0.stable_ptr)
24310 }
24311}
24312impl From<&TokenFor> for SyntaxStablePtrId {
24313 fn from(node: &TokenFor) -> Self {
24314 node.stable_ptr().untyped()
24315 }
24316}
24317#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24318pub struct TerminalFor {
24319 node: SyntaxNode,
24320 children: Arc<[SyntaxNode]>,
24321}
24322impl Terminal for TerminalFor {
24323 const KIND: SyntaxKind = SyntaxKind::TerminalFor;
24324 type TokenType = TokenFor;
24325 fn new_green(
24326 db: &dyn SyntaxGroup,
24327 leading_trivia: TriviaGreen,
24328 token: <<TerminalFor as Terminal>::TokenType as TypedSyntaxNode>::Green,
24329 trailing_trivia: TriviaGreen,
24330 ) -> Self::Green {
24331 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
24332 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
24333 TerminalForGreen(
24334 Arc::new(GreenNode {
24335 kind: SyntaxKind::TerminalFor,
24336 details: GreenNodeDetails::Node { children, width },
24337 })
24338 .intern(db),
24339 )
24340 }
24341 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24342 self.token(db).text(db)
24343 }
24344}
24345impl TerminalFor {
24346 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
24347 Trivia::from_syntax_node(db, self.children[0].clone())
24348 }
24349 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenFor {
24350 TokenFor::from_syntax_node(db, self.children[1].clone())
24351 }
24352 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
24353 Trivia::from_syntax_node(db, self.children[2].clone())
24354 }
24355}
24356#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24357pub struct TerminalForPtr(pub SyntaxStablePtrId);
24358impl TerminalForPtr {}
24359impl TypedStablePtr for TerminalForPtr {
24360 type SyntaxNode = TerminalFor;
24361 fn untyped(&self) -> SyntaxStablePtrId {
24362 self.0
24363 }
24364 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalFor {
24365 TerminalFor::from_syntax_node(db, self.0.lookup(db))
24366 }
24367}
24368impl From<TerminalForPtr> for SyntaxStablePtrId {
24369 fn from(ptr: TerminalForPtr) -> Self {
24370 ptr.untyped()
24371 }
24372}
24373#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24374pub struct TerminalForGreen(pub GreenId);
24375impl TypedSyntaxNode for TerminalFor {
24376 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalFor);
24377 type StablePtr = TerminalForPtr;
24378 type Green = TerminalForGreen;
24379 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24380 TerminalForGreen(
24381 Arc::new(GreenNode {
24382 kind: SyntaxKind::TerminalFor,
24383 details: GreenNodeDetails::Node {
24384 children: vec![
24385 Trivia::missing(db).0,
24386 TokenFor::missing(db).0,
24387 Trivia::missing(db).0,
24388 ],
24389 width: TextWidth::default(),
24390 },
24391 })
24392 .intern(db),
24393 )
24394 }
24395 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24396 let kind = node.kind(db);
24397 assert_eq!(
24398 kind,
24399 SyntaxKind::TerminalFor,
24400 "Unexpected SyntaxKind {:?}. Expected {:?}.",
24401 kind,
24402 SyntaxKind::TerminalFor
24403 );
24404 let children = db.get_children(node.clone());
24405 Self { node, children }
24406 }
24407 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24408 let kind = node.kind(db);
24409 if kind == SyntaxKind::TerminalFor { Some(Self::from_syntax_node(db, node)) } else { None }
24410 }
24411 fn as_syntax_node(&self) -> SyntaxNode {
24412 self.node.clone()
24413 }
24414 fn stable_ptr(&self) -> Self::StablePtr {
24415 TerminalForPtr(self.node.0.stable_ptr)
24416 }
24417}
24418impl From<&TerminalFor> for SyntaxStablePtrId {
24419 fn from(node: &TerminalFor) -> Self {
24420 node.stable_ptr().untyped()
24421 }
24422}
24423#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24424pub struct TokenLoop {
24425 node: SyntaxNode,
24426}
24427impl Token for TokenLoop {
24428 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
24429 TokenLoopGreen(
24430 Arc::new(GreenNode {
24431 kind: SyntaxKind::TokenLoop,
24432 details: GreenNodeDetails::Token(text),
24433 })
24434 .intern(db),
24435 )
24436 }
24437 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24438 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
24439 .clone()
24440 }
24441}
24442#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24443pub struct TokenLoopPtr(pub SyntaxStablePtrId);
24444impl TypedStablePtr for TokenLoopPtr {
24445 type SyntaxNode = TokenLoop;
24446 fn untyped(&self) -> SyntaxStablePtrId {
24447 self.0
24448 }
24449 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLoop {
24450 TokenLoop::from_syntax_node(db, self.0.lookup(db))
24451 }
24452}
24453impl From<TokenLoopPtr> for SyntaxStablePtrId {
24454 fn from(ptr: TokenLoopPtr) -> Self {
24455 ptr.untyped()
24456 }
24457}
24458#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24459pub struct TokenLoopGreen(pub GreenId);
24460impl TokenLoopGreen {
24461 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24462 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
24463 }
24464}
24465impl TypedSyntaxNode for TokenLoop {
24466 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLoop);
24467 type StablePtr = TokenLoopPtr;
24468 type Green = TokenLoopGreen;
24469 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24470 TokenLoopGreen(
24471 Arc::new(GreenNode {
24472 kind: SyntaxKind::TokenMissing,
24473 details: GreenNodeDetails::Token("".into()),
24474 })
24475 .intern(db),
24476 )
24477 }
24478 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24479 match node.0.green.lookup_intern(db).details {
24480 GreenNodeDetails::Token(_) => Self { node },
24481 GreenNodeDetails::Node { .. } => {
24482 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenLoop)
24483 }
24484 }
24485 }
24486 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24487 match node.0.green.lookup_intern(db).details {
24488 GreenNodeDetails::Token(_) => Some(Self { node }),
24489 GreenNodeDetails::Node { .. } => None,
24490 }
24491 }
24492 fn as_syntax_node(&self) -> SyntaxNode {
24493 self.node.clone()
24494 }
24495 fn stable_ptr(&self) -> Self::StablePtr {
24496 TokenLoopPtr(self.node.0.stable_ptr)
24497 }
24498}
24499impl From<&TokenLoop> for SyntaxStablePtrId {
24500 fn from(node: &TokenLoop) -> Self {
24501 node.stable_ptr().untyped()
24502 }
24503}
24504#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24505pub struct TerminalLoop {
24506 node: SyntaxNode,
24507 children: Arc<[SyntaxNode]>,
24508}
24509impl Terminal for TerminalLoop {
24510 const KIND: SyntaxKind = SyntaxKind::TerminalLoop;
24511 type TokenType = TokenLoop;
24512 fn new_green(
24513 db: &dyn SyntaxGroup,
24514 leading_trivia: TriviaGreen,
24515 token: <<TerminalLoop as Terminal>::TokenType as TypedSyntaxNode>::Green,
24516 trailing_trivia: TriviaGreen,
24517 ) -> Self::Green {
24518 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
24519 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
24520 TerminalLoopGreen(
24521 Arc::new(GreenNode {
24522 kind: SyntaxKind::TerminalLoop,
24523 details: GreenNodeDetails::Node { children, width },
24524 })
24525 .intern(db),
24526 )
24527 }
24528 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24529 self.token(db).text(db)
24530 }
24531}
24532impl TerminalLoop {
24533 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
24534 Trivia::from_syntax_node(db, self.children[0].clone())
24535 }
24536 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLoop {
24537 TokenLoop::from_syntax_node(db, self.children[1].clone())
24538 }
24539 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
24540 Trivia::from_syntax_node(db, self.children[2].clone())
24541 }
24542}
24543#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24544pub struct TerminalLoopPtr(pub SyntaxStablePtrId);
24545impl TerminalLoopPtr {}
24546impl TypedStablePtr for TerminalLoopPtr {
24547 type SyntaxNode = TerminalLoop;
24548 fn untyped(&self) -> SyntaxStablePtrId {
24549 self.0
24550 }
24551 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLoop {
24552 TerminalLoop::from_syntax_node(db, self.0.lookup(db))
24553 }
24554}
24555impl From<TerminalLoopPtr> for SyntaxStablePtrId {
24556 fn from(ptr: TerminalLoopPtr) -> Self {
24557 ptr.untyped()
24558 }
24559}
24560#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24561pub struct TerminalLoopGreen(pub GreenId);
24562impl TypedSyntaxNode for TerminalLoop {
24563 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLoop);
24564 type StablePtr = TerminalLoopPtr;
24565 type Green = TerminalLoopGreen;
24566 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24567 TerminalLoopGreen(
24568 Arc::new(GreenNode {
24569 kind: SyntaxKind::TerminalLoop,
24570 details: GreenNodeDetails::Node {
24571 children: vec![
24572 Trivia::missing(db).0,
24573 TokenLoop::missing(db).0,
24574 Trivia::missing(db).0,
24575 ],
24576 width: TextWidth::default(),
24577 },
24578 })
24579 .intern(db),
24580 )
24581 }
24582 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24583 let kind = node.kind(db);
24584 assert_eq!(
24585 kind,
24586 SyntaxKind::TerminalLoop,
24587 "Unexpected SyntaxKind {:?}. Expected {:?}.",
24588 kind,
24589 SyntaxKind::TerminalLoop
24590 );
24591 let children = db.get_children(node.clone());
24592 Self { node, children }
24593 }
24594 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24595 let kind = node.kind(db);
24596 if kind == SyntaxKind::TerminalLoop { Some(Self::from_syntax_node(db, node)) } else { None }
24597 }
24598 fn as_syntax_node(&self) -> SyntaxNode {
24599 self.node.clone()
24600 }
24601 fn stable_ptr(&self) -> Self::StablePtr {
24602 TerminalLoopPtr(self.node.0.stable_ptr)
24603 }
24604}
24605impl From<&TerminalLoop> for SyntaxStablePtrId {
24606 fn from(node: &TerminalLoop) -> Self {
24607 node.stable_ptr().untyped()
24608 }
24609}
24610#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24611pub struct TokenImpl {
24612 node: SyntaxNode,
24613}
24614impl Token for TokenImpl {
24615 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
24616 TokenImplGreen(
24617 Arc::new(GreenNode {
24618 kind: SyntaxKind::TokenImpl,
24619 details: GreenNodeDetails::Token(text),
24620 })
24621 .intern(db),
24622 )
24623 }
24624 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24625 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
24626 .clone()
24627 }
24628}
24629#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24630pub struct TokenImplPtr(pub SyntaxStablePtrId);
24631impl TypedStablePtr for TokenImplPtr {
24632 type SyntaxNode = TokenImpl;
24633 fn untyped(&self) -> SyntaxStablePtrId {
24634 self.0
24635 }
24636 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenImpl {
24637 TokenImpl::from_syntax_node(db, self.0.lookup(db))
24638 }
24639}
24640impl From<TokenImplPtr> for SyntaxStablePtrId {
24641 fn from(ptr: TokenImplPtr) -> Self {
24642 ptr.untyped()
24643 }
24644}
24645#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24646pub struct TokenImplGreen(pub GreenId);
24647impl TokenImplGreen {
24648 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24649 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
24650 }
24651}
24652impl TypedSyntaxNode for TokenImpl {
24653 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenImpl);
24654 type StablePtr = TokenImplPtr;
24655 type Green = TokenImplGreen;
24656 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24657 TokenImplGreen(
24658 Arc::new(GreenNode {
24659 kind: SyntaxKind::TokenMissing,
24660 details: GreenNodeDetails::Token("".into()),
24661 })
24662 .intern(db),
24663 )
24664 }
24665 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24666 match node.0.green.lookup_intern(db).details {
24667 GreenNodeDetails::Token(_) => Self { node },
24668 GreenNodeDetails::Node { .. } => {
24669 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenImpl)
24670 }
24671 }
24672 }
24673 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24674 match node.0.green.lookup_intern(db).details {
24675 GreenNodeDetails::Token(_) => Some(Self { node }),
24676 GreenNodeDetails::Node { .. } => None,
24677 }
24678 }
24679 fn as_syntax_node(&self) -> SyntaxNode {
24680 self.node.clone()
24681 }
24682 fn stable_ptr(&self) -> Self::StablePtr {
24683 TokenImplPtr(self.node.0.stable_ptr)
24684 }
24685}
24686impl From<&TokenImpl> for SyntaxStablePtrId {
24687 fn from(node: &TokenImpl) -> Self {
24688 node.stable_ptr().untyped()
24689 }
24690}
24691#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24692pub struct TerminalImpl {
24693 node: SyntaxNode,
24694 children: Arc<[SyntaxNode]>,
24695}
24696impl Terminal for TerminalImpl {
24697 const KIND: SyntaxKind = SyntaxKind::TerminalImpl;
24698 type TokenType = TokenImpl;
24699 fn new_green(
24700 db: &dyn SyntaxGroup,
24701 leading_trivia: TriviaGreen,
24702 token: <<TerminalImpl as Terminal>::TokenType as TypedSyntaxNode>::Green,
24703 trailing_trivia: TriviaGreen,
24704 ) -> Self::Green {
24705 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
24706 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
24707 TerminalImplGreen(
24708 Arc::new(GreenNode {
24709 kind: SyntaxKind::TerminalImpl,
24710 details: GreenNodeDetails::Node { children, width },
24711 })
24712 .intern(db),
24713 )
24714 }
24715 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24716 self.token(db).text(db)
24717 }
24718}
24719impl TerminalImpl {
24720 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
24721 Trivia::from_syntax_node(db, self.children[0].clone())
24722 }
24723 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenImpl {
24724 TokenImpl::from_syntax_node(db, self.children[1].clone())
24725 }
24726 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
24727 Trivia::from_syntax_node(db, self.children[2].clone())
24728 }
24729}
24730#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24731pub struct TerminalImplPtr(pub SyntaxStablePtrId);
24732impl TerminalImplPtr {}
24733impl TypedStablePtr for TerminalImplPtr {
24734 type SyntaxNode = TerminalImpl;
24735 fn untyped(&self) -> SyntaxStablePtrId {
24736 self.0
24737 }
24738 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalImpl {
24739 TerminalImpl::from_syntax_node(db, self.0.lookup(db))
24740 }
24741}
24742impl From<TerminalImplPtr> for SyntaxStablePtrId {
24743 fn from(ptr: TerminalImplPtr) -> Self {
24744 ptr.untyped()
24745 }
24746}
24747#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24748pub struct TerminalImplGreen(pub GreenId);
24749impl TypedSyntaxNode for TerminalImpl {
24750 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalImpl);
24751 type StablePtr = TerminalImplPtr;
24752 type Green = TerminalImplGreen;
24753 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24754 TerminalImplGreen(
24755 Arc::new(GreenNode {
24756 kind: SyntaxKind::TerminalImpl,
24757 details: GreenNodeDetails::Node {
24758 children: vec![
24759 Trivia::missing(db).0,
24760 TokenImpl::missing(db).0,
24761 Trivia::missing(db).0,
24762 ],
24763 width: TextWidth::default(),
24764 },
24765 })
24766 .intern(db),
24767 )
24768 }
24769 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24770 let kind = node.kind(db);
24771 assert_eq!(
24772 kind,
24773 SyntaxKind::TerminalImpl,
24774 "Unexpected SyntaxKind {:?}. Expected {:?}.",
24775 kind,
24776 SyntaxKind::TerminalImpl
24777 );
24778 let children = db.get_children(node.clone());
24779 Self { node, children }
24780 }
24781 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24782 let kind = node.kind(db);
24783 if kind == SyntaxKind::TerminalImpl { Some(Self::from_syntax_node(db, node)) } else { None }
24784 }
24785 fn as_syntax_node(&self) -> SyntaxNode {
24786 self.node.clone()
24787 }
24788 fn stable_ptr(&self) -> Self::StablePtr {
24789 TerminalImplPtr(self.node.0.stable_ptr)
24790 }
24791}
24792impl From<&TerminalImpl> for SyntaxStablePtrId {
24793 fn from(node: &TerminalImpl) -> Self {
24794 node.stable_ptr().untyped()
24795 }
24796}
24797#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24798pub struct TokenImplicits {
24799 node: SyntaxNode,
24800}
24801impl Token for TokenImplicits {
24802 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
24803 TokenImplicitsGreen(
24804 Arc::new(GreenNode {
24805 kind: SyntaxKind::TokenImplicits,
24806 details: GreenNodeDetails::Token(text),
24807 })
24808 .intern(db),
24809 )
24810 }
24811 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24812 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
24813 .clone()
24814 }
24815}
24816#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24817pub struct TokenImplicitsPtr(pub SyntaxStablePtrId);
24818impl TypedStablePtr for TokenImplicitsPtr {
24819 type SyntaxNode = TokenImplicits;
24820 fn untyped(&self) -> SyntaxStablePtrId {
24821 self.0
24822 }
24823 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenImplicits {
24824 TokenImplicits::from_syntax_node(db, self.0.lookup(db))
24825 }
24826}
24827impl From<TokenImplicitsPtr> for SyntaxStablePtrId {
24828 fn from(ptr: TokenImplicitsPtr) -> Self {
24829 ptr.untyped()
24830 }
24831}
24832#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24833pub struct TokenImplicitsGreen(pub GreenId);
24834impl TokenImplicitsGreen {
24835 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24836 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
24837 }
24838}
24839impl TypedSyntaxNode for TokenImplicits {
24840 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenImplicits);
24841 type StablePtr = TokenImplicitsPtr;
24842 type Green = TokenImplicitsGreen;
24843 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24844 TokenImplicitsGreen(
24845 Arc::new(GreenNode {
24846 kind: SyntaxKind::TokenMissing,
24847 details: GreenNodeDetails::Token("".into()),
24848 })
24849 .intern(db),
24850 )
24851 }
24852 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24853 match node.0.green.lookup_intern(db).details {
24854 GreenNodeDetails::Token(_) => Self { node },
24855 GreenNodeDetails::Node { .. } => {
24856 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenImplicits)
24857 }
24858 }
24859 }
24860 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24861 match node.0.green.lookup_intern(db).details {
24862 GreenNodeDetails::Token(_) => Some(Self { node }),
24863 GreenNodeDetails::Node { .. } => None,
24864 }
24865 }
24866 fn as_syntax_node(&self) -> SyntaxNode {
24867 self.node.clone()
24868 }
24869 fn stable_ptr(&self) -> Self::StablePtr {
24870 TokenImplicitsPtr(self.node.0.stable_ptr)
24871 }
24872}
24873impl From<&TokenImplicits> for SyntaxStablePtrId {
24874 fn from(node: &TokenImplicits) -> Self {
24875 node.stable_ptr().untyped()
24876 }
24877}
24878#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24879pub struct TerminalImplicits {
24880 node: SyntaxNode,
24881 children: Arc<[SyntaxNode]>,
24882}
24883impl Terminal for TerminalImplicits {
24884 const KIND: SyntaxKind = SyntaxKind::TerminalImplicits;
24885 type TokenType = TokenImplicits;
24886 fn new_green(
24887 db: &dyn SyntaxGroup,
24888 leading_trivia: TriviaGreen,
24889 token: <<TerminalImplicits as Terminal>::TokenType as TypedSyntaxNode>::Green,
24890 trailing_trivia: TriviaGreen,
24891 ) -> Self::Green {
24892 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
24893 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
24894 TerminalImplicitsGreen(
24895 Arc::new(GreenNode {
24896 kind: SyntaxKind::TerminalImplicits,
24897 details: GreenNodeDetails::Node { children, width },
24898 })
24899 .intern(db),
24900 )
24901 }
24902 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24903 self.token(db).text(db)
24904 }
24905}
24906impl TerminalImplicits {
24907 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
24908 Trivia::from_syntax_node(db, self.children[0].clone())
24909 }
24910 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenImplicits {
24911 TokenImplicits::from_syntax_node(db, self.children[1].clone())
24912 }
24913 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
24914 Trivia::from_syntax_node(db, self.children[2].clone())
24915 }
24916}
24917#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24918pub struct TerminalImplicitsPtr(pub SyntaxStablePtrId);
24919impl TerminalImplicitsPtr {}
24920impl TypedStablePtr for TerminalImplicitsPtr {
24921 type SyntaxNode = TerminalImplicits;
24922 fn untyped(&self) -> SyntaxStablePtrId {
24923 self.0
24924 }
24925 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalImplicits {
24926 TerminalImplicits::from_syntax_node(db, self.0.lookup(db))
24927 }
24928}
24929impl From<TerminalImplicitsPtr> for SyntaxStablePtrId {
24930 fn from(ptr: TerminalImplicitsPtr) -> Self {
24931 ptr.untyped()
24932 }
24933}
24934#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24935pub struct TerminalImplicitsGreen(pub GreenId);
24936impl TypedSyntaxNode for TerminalImplicits {
24937 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalImplicits);
24938 type StablePtr = TerminalImplicitsPtr;
24939 type Green = TerminalImplicitsGreen;
24940 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24941 TerminalImplicitsGreen(
24942 Arc::new(GreenNode {
24943 kind: SyntaxKind::TerminalImplicits,
24944 details: GreenNodeDetails::Node {
24945 children: vec![
24946 Trivia::missing(db).0,
24947 TokenImplicits::missing(db).0,
24948 Trivia::missing(db).0,
24949 ],
24950 width: TextWidth::default(),
24951 },
24952 })
24953 .intern(db),
24954 )
24955 }
24956 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24957 let kind = node.kind(db);
24958 assert_eq!(
24959 kind,
24960 SyntaxKind::TerminalImplicits,
24961 "Unexpected SyntaxKind {:?}. Expected {:?}.",
24962 kind,
24963 SyntaxKind::TerminalImplicits
24964 );
24965 let children = db.get_children(node.clone());
24966 Self { node, children }
24967 }
24968 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24969 let kind = node.kind(db);
24970 if kind == SyntaxKind::TerminalImplicits {
24971 Some(Self::from_syntax_node(db, node))
24972 } else {
24973 None
24974 }
24975 }
24976 fn as_syntax_node(&self) -> SyntaxNode {
24977 self.node.clone()
24978 }
24979 fn stable_ptr(&self) -> Self::StablePtr {
24980 TerminalImplicitsPtr(self.node.0.stable_ptr)
24981 }
24982}
24983impl From<&TerminalImplicits> for SyntaxStablePtrId {
24984 fn from(node: &TerminalImplicits) -> Self {
24985 node.stable_ptr().untyped()
24986 }
24987}
24988#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24989pub struct TokenLet {
24990 node: SyntaxNode,
24991}
24992impl Token for TokenLet {
24993 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
24994 TokenLetGreen(
24995 Arc::new(GreenNode {
24996 kind: SyntaxKind::TokenLet,
24997 details: GreenNodeDetails::Token(text),
24998 })
24999 .intern(db),
25000 )
25001 }
25002 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25003 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
25004 .clone()
25005 }
25006}
25007#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25008pub struct TokenLetPtr(pub SyntaxStablePtrId);
25009impl TypedStablePtr for TokenLetPtr {
25010 type SyntaxNode = TokenLet;
25011 fn untyped(&self) -> SyntaxStablePtrId {
25012 self.0
25013 }
25014 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLet {
25015 TokenLet::from_syntax_node(db, self.0.lookup(db))
25016 }
25017}
25018impl From<TokenLetPtr> for SyntaxStablePtrId {
25019 fn from(ptr: TokenLetPtr) -> Self {
25020 ptr.untyped()
25021 }
25022}
25023#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25024pub struct TokenLetGreen(pub GreenId);
25025impl TokenLetGreen {
25026 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25027 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
25028 }
25029}
25030impl TypedSyntaxNode for TokenLet {
25031 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLet);
25032 type StablePtr = TokenLetPtr;
25033 type Green = TokenLetGreen;
25034 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25035 TokenLetGreen(
25036 Arc::new(GreenNode {
25037 kind: SyntaxKind::TokenMissing,
25038 details: GreenNodeDetails::Token("".into()),
25039 })
25040 .intern(db),
25041 )
25042 }
25043 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25044 match node.0.green.lookup_intern(db).details {
25045 GreenNodeDetails::Token(_) => Self { node },
25046 GreenNodeDetails::Node { .. } => {
25047 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenLet)
25048 }
25049 }
25050 }
25051 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25052 match node.0.green.lookup_intern(db).details {
25053 GreenNodeDetails::Token(_) => Some(Self { node }),
25054 GreenNodeDetails::Node { .. } => None,
25055 }
25056 }
25057 fn as_syntax_node(&self) -> SyntaxNode {
25058 self.node.clone()
25059 }
25060 fn stable_ptr(&self) -> Self::StablePtr {
25061 TokenLetPtr(self.node.0.stable_ptr)
25062 }
25063}
25064impl From<&TokenLet> for SyntaxStablePtrId {
25065 fn from(node: &TokenLet) -> Self {
25066 node.stable_ptr().untyped()
25067 }
25068}
25069#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25070pub struct TerminalLet {
25071 node: SyntaxNode,
25072 children: Arc<[SyntaxNode]>,
25073}
25074impl Terminal for TerminalLet {
25075 const KIND: SyntaxKind = SyntaxKind::TerminalLet;
25076 type TokenType = TokenLet;
25077 fn new_green(
25078 db: &dyn SyntaxGroup,
25079 leading_trivia: TriviaGreen,
25080 token: <<TerminalLet as Terminal>::TokenType as TypedSyntaxNode>::Green,
25081 trailing_trivia: TriviaGreen,
25082 ) -> Self::Green {
25083 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
25084 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
25085 TerminalLetGreen(
25086 Arc::new(GreenNode {
25087 kind: SyntaxKind::TerminalLet,
25088 details: GreenNodeDetails::Node { children, width },
25089 })
25090 .intern(db),
25091 )
25092 }
25093 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25094 self.token(db).text(db)
25095 }
25096}
25097impl TerminalLet {
25098 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25099 Trivia::from_syntax_node(db, self.children[0].clone())
25100 }
25101 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLet {
25102 TokenLet::from_syntax_node(db, self.children[1].clone())
25103 }
25104 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25105 Trivia::from_syntax_node(db, self.children[2].clone())
25106 }
25107}
25108#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25109pub struct TerminalLetPtr(pub SyntaxStablePtrId);
25110impl TerminalLetPtr {}
25111impl TypedStablePtr for TerminalLetPtr {
25112 type SyntaxNode = TerminalLet;
25113 fn untyped(&self) -> SyntaxStablePtrId {
25114 self.0
25115 }
25116 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLet {
25117 TerminalLet::from_syntax_node(db, self.0.lookup(db))
25118 }
25119}
25120impl From<TerminalLetPtr> for SyntaxStablePtrId {
25121 fn from(ptr: TerminalLetPtr) -> Self {
25122 ptr.untyped()
25123 }
25124}
25125#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25126pub struct TerminalLetGreen(pub GreenId);
25127impl TypedSyntaxNode for TerminalLet {
25128 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLet);
25129 type StablePtr = TerminalLetPtr;
25130 type Green = TerminalLetGreen;
25131 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25132 TerminalLetGreen(
25133 Arc::new(GreenNode {
25134 kind: SyntaxKind::TerminalLet,
25135 details: GreenNodeDetails::Node {
25136 children: vec![
25137 Trivia::missing(db).0,
25138 TokenLet::missing(db).0,
25139 Trivia::missing(db).0,
25140 ],
25141 width: TextWidth::default(),
25142 },
25143 })
25144 .intern(db),
25145 )
25146 }
25147 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25148 let kind = node.kind(db);
25149 assert_eq!(
25150 kind,
25151 SyntaxKind::TerminalLet,
25152 "Unexpected SyntaxKind {:?}. Expected {:?}.",
25153 kind,
25154 SyntaxKind::TerminalLet
25155 );
25156 let children = db.get_children(node.clone());
25157 Self { node, children }
25158 }
25159 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25160 let kind = node.kind(db);
25161 if kind == SyntaxKind::TerminalLet { Some(Self::from_syntax_node(db, node)) } else { None }
25162 }
25163 fn as_syntax_node(&self) -> SyntaxNode {
25164 self.node.clone()
25165 }
25166 fn stable_ptr(&self) -> Self::StablePtr {
25167 TerminalLetPtr(self.node.0.stable_ptr)
25168 }
25169}
25170impl From<&TerminalLet> for SyntaxStablePtrId {
25171 fn from(node: &TerminalLet) -> Self {
25172 node.stable_ptr().untyped()
25173 }
25174}
25175#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25176pub struct TokenMatch {
25177 node: SyntaxNode,
25178}
25179impl Token for TokenMatch {
25180 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
25181 TokenMatchGreen(
25182 Arc::new(GreenNode {
25183 kind: SyntaxKind::TokenMatch,
25184 details: GreenNodeDetails::Token(text),
25185 })
25186 .intern(db),
25187 )
25188 }
25189 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25190 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
25191 .clone()
25192 }
25193}
25194#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25195pub struct TokenMatchPtr(pub SyntaxStablePtrId);
25196impl TypedStablePtr for TokenMatchPtr {
25197 type SyntaxNode = TokenMatch;
25198 fn untyped(&self) -> SyntaxStablePtrId {
25199 self.0
25200 }
25201 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMatch {
25202 TokenMatch::from_syntax_node(db, self.0.lookup(db))
25203 }
25204}
25205impl From<TokenMatchPtr> for SyntaxStablePtrId {
25206 fn from(ptr: TokenMatchPtr) -> Self {
25207 ptr.untyped()
25208 }
25209}
25210#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25211pub struct TokenMatchGreen(pub GreenId);
25212impl TokenMatchGreen {
25213 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25214 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
25215 }
25216}
25217impl TypedSyntaxNode for TokenMatch {
25218 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMatch);
25219 type StablePtr = TokenMatchPtr;
25220 type Green = TokenMatchGreen;
25221 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25222 TokenMatchGreen(
25223 Arc::new(GreenNode {
25224 kind: SyntaxKind::TokenMissing,
25225 details: GreenNodeDetails::Token("".into()),
25226 })
25227 .intern(db),
25228 )
25229 }
25230 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25231 match node.0.green.lookup_intern(db).details {
25232 GreenNodeDetails::Token(_) => Self { node },
25233 GreenNodeDetails::Node { .. } => {
25234 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMatch)
25235 }
25236 }
25237 }
25238 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25239 match node.0.green.lookup_intern(db).details {
25240 GreenNodeDetails::Token(_) => Some(Self { node }),
25241 GreenNodeDetails::Node { .. } => None,
25242 }
25243 }
25244 fn as_syntax_node(&self) -> SyntaxNode {
25245 self.node.clone()
25246 }
25247 fn stable_ptr(&self) -> Self::StablePtr {
25248 TokenMatchPtr(self.node.0.stable_ptr)
25249 }
25250}
25251impl From<&TokenMatch> for SyntaxStablePtrId {
25252 fn from(node: &TokenMatch) -> Self {
25253 node.stable_ptr().untyped()
25254 }
25255}
25256#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25257pub struct TerminalMatch {
25258 node: SyntaxNode,
25259 children: Arc<[SyntaxNode]>,
25260}
25261impl Terminal for TerminalMatch {
25262 const KIND: SyntaxKind = SyntaxKind::TerminalMatch;
25263 type TokenType = TokenMatch;
25264 fn new_green(
25265 db: &dyn SyntaxGroup,
25266 leading_trivia: TriviaGreen,
25267 token: <<TerminalMatch as Terminal>::TokenType as TypedSyntaxNode>::Green,
25268 trailing_trivia: TriviaGreen,
25269 ) -> Self::Green {
25270 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
25271 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
25272 TerminalMatchGreen(
25273 Arc::new(GreenNode {
25274 kind: SyntaxKind::TerminalMatch,
25275 details: GreenNodeDetails::Node { children, width },
25276 })
25277 .intern(db),
25278 )
25279 }
25280 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25281 self.token(db).text(db)
25282 }
25283}
25284impl TerminalMatch {
25285 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25286 Trivia::from_syntax_node(db, self.children[0].clone())
25287 }
25288 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMatch {
25289 TokenMatch::from_syntax_node(db, self.children[1].clone())
25290 }
25291 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25292 Trivia::from_syntax_node(db, self.children[2].clone())
25293 }
25294}
25295#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25296pub struct TerminalMatchPtr(pub SyntaxStablePtrId);
25297impl TerminalMatchPtr {}
25298impl TypedStablePtr for TerminalMatchPtr {
25299 type SyntaxNode = TerminalMatch;
25300 fn untyped(&self) -> SyntaxStablePtrId {
25301 self.0
25302 }
25303 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMatch {
25304 TerminalMatch::from_syntax_node(db, self.0.lookup(db))
25305 }
25306}
25307impl From<TerminalMatchPtr> for SyntaxStablePtrId {
25308 fn from(ptr: TerminalMatchPtr) -> Self {
25309 ptr.untyped()
25310 }
25311}
25312#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25313pub struct TerminalMatchGreen(pub GreenId);
25314impl TypedSyntaxNode for TerminalMatch {
25315 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMatch);
25316 type StablePtr = TerminalMatchPtr;
25317 type Green = TerminalMatchGreen;
25318 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25319 TerminalMatchGreen(
25320 Arc::new(GreenNode {
25321 kind: SyntaxKind::TerminalMatch,
25322 details: GreenNodeDetails::Node {
25323 children: vec![
25324 Trivia::missing(db).0,
25325 TokenMatch::missing(db).0,
25326 Trivia::missing(db).0,
25327 ],
25328 width: TextWidth::default(),
25329 },
25330 })
25331 .intern(db),
25332 )
25333 }
25334 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25335 let kind = node.kind(db);
25336 assert_eq!(
25337 kind,
25338 SyntaxKind::TerminalMatch,
25339 "Unexpected SyntaxKind {:?}. Expected {:?}.",
25340 kind,
25341 SyntaxKind::TerminalMatch
25342 );
25343 let children = db.get_children(node.clone());
25344 Self { node, children }
25345 }
25346 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25347 let kind = node.kind(db);
25348 if kind == SyntaxKind::TerminalMatch {
25349 Some(Self::from_syntax_node(db, node))
25350 } else {
25351 None
25352 }
25353 }
25354 fn as_syntax_node(&self) -> SyntaxNode {
25355 self.node.clone()
25356 }
25357 fn stable_ptr(&self) -> Self::StablePtr {
25358 TerminalMatchPtr(self.node.0.stable_ptr)
25359 }
25360}
25361impl From<&TerminalMatch> for SyntaxStablePtrId {
25362 fn from(node: &TerminalMatch) -> Self {
25363 node.stable_ptr().untyped()
25364 }
25365}
25366#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25367pub struct TokenModule {
25368 node: SyntaxNode,
25369}
25370impl Token for TokenModule {
25371 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
25372 TokenModuleGreen(
25373 Arc::new(GreenNode {
25374 kind: SyntaxKind::TokenModule,
25375 details: GreenNodeDetails::Token(text),
25376 })
25377 .intern(db),
25378 )
25379 }
25380 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25381 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
25382 .clone()
25383 }
25384}
25385#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25386pub struct TokenModulePtr(pub SyntaxStablePtrId);
25387impl TypedStablePtr for TokenModulePtr {
25388 type SyntaxNode = TokenModule;
25389 fn untyped(&self) -> SyntaxStablePtrId {
25390 self.0
25391 }
25392 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenModule {
25393 TokenModule::from_syntax_node(db, self.0.lookup(db))
25394 }
25395}
25396impl From<TokenModulePtr> for SyntaxStablePtrId {
25397 fn from(ptr: TokenModulePtr) -> Self {
25398 ptr.untyped()
25399 }
25400}
25401#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25402pub struct TokenModuleGreen(pub GreenId);
25403impl TokenModuleGreen {
25404 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25405 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
25406 }
25407}
25408impl TypedSyntaxNode for TokenModule {
25409 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenModule);
25410 type StablePtr = TokenModulePtr;
25411 type Green = TokenModuleGreen;
25412 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25413 TokenModuleGreen(
25414 Arc::new(GreenNode {
25415 kind: SyntaxKind::TokenMissing,
25416 details: GreenNodeDetails::Token("".into()),
25417 })
25418 .intern(db),
25419 )
25420 }
25421 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25422 match node.0.green.lookup_intern(db).details {
25423 GreenNodeDetails::Token(_) => Self { node },
25424 GreenNodeDetails::Node { .. } => {
25425 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenModule)
25426 }
25427 }
25428 }
25429 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25430 match node.0.green.lookup_intern(db).details {
25431 GreenNodeDetails::Token(_) => Some(Self { node }),
25432 GreenNodeDetails::Node { .. } => None,
25433 }
25434 }
25435 fn as_syntax_node(&self) -> SyntaxNode {
25436 self.node.clone()
25437 }
25438 fn stable_ptr(&self) -> Self::StablePtr {
25439 TokenModulePtr(self.node.0.stable_ptr)
25440 }
25441}
25442impl From<&TokenModule> for SyntaxStablePtrId {
25443 fn from(node: &TokenModule) -> Self {
25444 node.stable_ptr().untyped()
25445 }
25446}
25447#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25448pub struct TerminalModule {
25449 node: SyntaxNode,
25450 children: Arc<[SyntaxNode]>,
25451}
25452impl Terminal for TerminalModule {
25453 const KIND: SyntaxKind = SyntaxKind::TerminalModule;
25454 type TokenType = TokenModule;
25455 fn new_green(
25456 db: &dyn SyntaxGroup,
25457 leading_trivia: TriviaGreen,
25458 token: <<TerminalModule as Terminal>::TokenType as TypedSyntaxNode>::Green,
25459 trailing_trivia: TriviaGreen,
25460 ) -> Self::Green {
25461 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
25462 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
25463 TerminalModuleGreen(
25464 Arc::new(GreenNode {
25465 kind: SyntaxKind::TerminalModule,
25466 details: GreenNodeDetails::Node { children, width },
25467 })
25468 .intern(db),
25469 )
25470 }
25471 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25472 self.token(db).text(db)
25473 }
25474}
25475impl TerminalModule {
25476 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25477 Trivia::from_syntax_node(db, self.children[0].clone())
25478 }
25479 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenModule {
25480 TokenModule::from_syntax_node(db, self.children[1].clone())
25481 }
25482 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25483 Trivia::from_syntax_node(db, self.children[2].clone())
25484 }
25485}
25486#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25487pub struct TerminalModulePtr(pub SyntaxStablePtrId);
25488impl TerminalModulePtr {}
25489impl TypedStablePtr for TerminalModulePtr {
25490 type SyntaxNode = TerminalModule;
25491 fn untyped(&self) -> SyntaxStablePtrId {
25492 self.0
25493 }
25494 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalModule {
25495 TerminalModule::from_syntax_node(db, self.0.lookup(db))
25496 }
25497}
25498impl From<TerminalModulePtr> for SyntaxStablePtrId {
25499 fn from(ptr: TerminalModulePtr) -> Self {
25500 ptr.untyped()
25501 }
25502}
25503#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25504pub struct TerminalModuleGreen(pub GreenId);
25505impl TypedSyntaxNode for TerminalModule {
25506 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalModule);
25507 type StablePtr = TerminalModulePtr;
25508 type Green = TerminalModuleGreen;
25509 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25510 TerminalModuleGreen(
25511 Arc::new(GreenNode {
25512 kind: SyntaxKind::TerminalModule,
25513 details: GreenNodeDetails::Node {
25514 children: vec![
25515 Trivia::missing(db).0,
25516 TokenModule::missing(db).0,
25517 Trivia::missing(db).0,
25518 ],
25519 width: TextWidth::default(),
25520 },
25521 })
25522 .intern(db),
25523 )
25524 }
25525 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25526 let kind = node.kind(db);
25527 assert_eq!(
25528 kind,
25529 SyntaxKind::TerminalModule,
25530 "Unexpected SyntaxKind {:?}. Expected {:?}.",
25531 kind,
25532 SyntaxKind::TerminalModule
25533 );
25534 let children = db.get_children(node.clone());
25535 Self { node, children }
25536 }
25537 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25538 let kind = node.kind(db);
25539 if kind == SyntaxKind::TerminalModule {
25540 Some(Self::from_syntax_node(db, node))
25541 } else {
25542 None
25543 }
25544 }
25545 fn as_syntax_node(&self) -> SyntaxNode {
25546 self.node.clone()
25547 }
25548 fn stable_ptr(&self) -> Self::StablePtr {
25549 TerminalModulePtr(self.node.0.stable_ptr)
25550 }
25551}
25552impl From<&TerminalModule> for SyntaxStablePtrId {
25553 fn from(node: &TerminalModule) -> Self {
25554 node.stable_ptr().untyped()
25555 }
25556}
25557#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25558pub struct TokenMut {
25559 node: SyntaxNode,
25560}
25561impl Token for TokenMut {
25562 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
25563 TokenMutGreen(
25564 Arc::new(GreenNode {
25565 kind: SyntaxKind::TokenMut,
25566 details: GreenNodeDetails::Token(text),
25567 })
25568 .intern(db),
25569 )
25570 }
25571 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25572 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
25573 .clone()
25574 }
25575}
25576#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25577pub struct TokenMutPtr(pub SyntaxStablePtrId);
25578impl TypedStablePtr for TokenMutPtr {
25579 type SyntaxNode = TokenMut;
25580 fn untyped(&self) -> SyntaxStablePtrId {
25581 self.0
25582 }
25583 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMut {
25584 TokenMut::from_syntax_node(db, self.0.lookup(db))
25585 }
25586}
25587impl From<TokenMutPtr> for SyntaxStablePtrId {
25588 fn from(ptr: TokenMutPtr) -> Self {
25589 ptr.untyped()
25590 }
25591}
25592#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25593pub struct TokenMutGreen(pub GreenId);
25594impl TokenMutGreen {
25595 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25596 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
25597 }
25598}
25599impl TypedSyntaxNode for TokenMut {
25600 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMut);
25601 type StablePtr = TokenMutPtr;
25602 type Green = TokenMutGreen;
25603 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25604 TokenMutGreen(
25605 Arc::new(GreenNode {
25606 kind: SyntaxKind::TokenMissing,
25607 details: GreenNodeDetails::Token("".into()),
25608 })
25609 .intern(db),
25610 )
25611 }
25612 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25613 match node.0.green.lookup_intern(db).details {
25614 GreenNodeDetails::Token(_) => Self { node },
25615 GreenNodeDetails::Node { .. } => {
25616 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMut)
25617 }
25618 }
25619 }
25620 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25621 match node.0.green.lookup_intern(db).details {
25622 GreenNodeDetails::Token(_) => Some(Self { node }),
25623 GreenNodeDetails::Node { .. } => None,
25624 }
25625 }
25626 fn as_syntax_node(&self) -> SyntaxNode {
25627 self.node.clone()
25628 }
25629 fn stable_ptr(&self) -> Self::StablePtr {
25630 TokenMutPtr(self.node.0.stable_ptr)
25631 }
25632}
25633impl From<&TokenMut> for SyntaxStablePtrId {
25634 fn from(node: &TokenMut) -> Self {
25635 node.stable_ptr().untyped()
25636 }
25637}
25638#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25639pub struct TerminalMut {
25640 node: SyntaxNode,
25641 children: Arc<[SyntaxNode]>,
25642}
25643impl Terminal for TerminalMut {
25644 const KIND: SyntaxKind = SyntaxKind::TerminalMut;
25645 type TokenType = TokenMut;
25646 fn new_green(
25647 db: &dyn SyntaxGroup,
25648 leading_trivia: TriviaGreen,
25649 token: <<TerminalMut as Terminal>::TokenType as TypedSyntaxNode>::Green,
25650 trailing_trivia: TriviaGreen,
25651 ) -> Self::Green {
25652 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
25653 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
25654 TerminalMutGreen(
25655 Arc::new(GreenNode {
25656 kind: SyntaxKind::TerminalMut,
25657 details: GreenNodeDetails::Node { children, width },
25658 })
25659 .intern(db),
25660 )
25661 }
25662 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25663 self.token(db).text(db)
25664 }
25665}
25666impl TerminalMut {
25667 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25668 Trivia::from_syntax_node(db, self.children[0].clone())
25669 }
25670 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMut {
25671 TokenMut::from_syntax_node(db, self.children[1].clone())
25672 }
25673 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25674 Trivia::from_syntax_node(db, self.children[2].clone())
25675 }
25676}
25677#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25678pub struct TerminalMutPtr(pub SyntaxStablePtrId);
25679impl TerminalMutPtr {}
25680impl TypedStablePtr for TerminalMutPtr {
25681 type SyntaxNode = TerminalMut;
25682 fn untyped(&self) -> SyntaxStablePtrId {
25683 self.0
25684 }
25685 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMut {
25686 TerminalMut::from_syntax_node(db, self.0.lookup(db))
25687 }
25688}
25689impl From<TerminalMutPtr> for SyntaxStablePtrId {
25690 fn from(ptr: TerminalMutPtr) -> Self {
25691 ptr.untyped()
25692 }
25693}
25694#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25695pub struct TerminalMutGreen(pub GreenId);
25696impl TypedSyntaxNode for TerminalMut {
25697 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMut);
25698 type StablePtr = TerminalMutPtr;
25699 type Green = TerminalMutGreen;
25700 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25701 TerminalMutGreen(
25702 Arc::new(GreenNode {
25703 kind: SyntaxKind::TerminalMut,
25704 details: GreenNodeDetails::Node {
25705 children: vec![
25706 Trivia::missing(db).0,
25707 TokenMut::missing(db).0,
25708 Trivia::missing(db).0,
25709 ],
25710 width: TextWidth::default(),
25711 },
25712 })
25713 .intern(db),
25714 )
25715 }
25716 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25717 let kind = node.kind(db);
25718 assert_eq!(
25719 kind,
25720 SyntaxKind::TerminalMut,
25721 "Unexpected SyntaxKind {:?}. Expected {:?}.",
25722 kind,
25723 SyntaxKind::TerminalMut
25724 );
25725 let children = db.get_children(node.clone());
25726 Self { node, children }
25727 }
25728 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25729 let kind = node.kind(db);
25730 if kind == SyntaxKind::TerminalMut { Some(Self::from_syntax_node(db, node)) } else { None }
25731 }
25732 fn as_syntax_node(&self) -> SyntaxNode {
25733 self.node.clone()
25734 }
25735 fn stable_ptr(&self) -> Self::StablePtr {
25736 TerminalMutPtr(self.node.0.stable_ptr)
25737 }
25738}
25739impl From<&TerminalMut> for SyntaxStablePtrId {
25740 fn from(node: &TerminalMut) -> Self {
25741 node.stable_ptr().untyped()
25742 }
25743}
25744#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25745pub struct TokenNoPanic {
25746 node: SyntaxNode,
25747}
25748impl Token for TokenNoPanic {
25749 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
25750 TokenNoPanicGreen(
25751 Arc::new(GreenNode {
25752 kind: SyntaxKind::TokenNoPanic,
25753 details: GreenNodeDetails::Token(text),
25754 })
25755 .intern(db),
25756 )
25757 }
25758 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25759 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
25760 .clone()
25761 }
25762}
25763#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25764pub struct TokenNoPanicPtr(pub SyntaxStablePtrId);
25765impl TypedStablePtr for TokenNoPanicPtr {
25766 type SyntaxNode = TokenNoPanic;
25767 fn untyped(&self) -> SyntaxStablePtrId {
25768 self.0
25769 }
25770 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenNoPanic {
25771 TokenNoPanic::from_syntax_node(db, self.0.lookup(db))
25772 }
25773}
25774impl From<TokenNoPanicPtr> for SyntaxStablePtrId {
25775 fn from(ptr: TokenNoPanicPtr) -> Self {
25776 ptr.untyped()
25777 }
25778}
25779#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25780pub struct TokenNoPanicGreen(pub GreenId);
25781impl TokenNoPanicGreen {
25782 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25783 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
25784 }
25785}
25786impl TypedSyntaxNode for TokenNoPanic {
25787 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenNoPanic);
25788 type StablePtr = TokenNoPanicPtr;
25789 type Green = TokenNoPanicGreen;
25790 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25791 TokenNoPanicGreen(
25792 Arc::new(GreenNode {
25793 kind: SyntaxKind::TokenMissing,
25794 details: GreenNodeDetails::Token("".into()),
25795 })
25796 .intern(db),
25797 )
25798 }
25799 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25800 match node.0.green.lookup_intern(db).details {
25801 GreenNodeDetails::Token(_) => Self { node },
25802 GreenNodeDetails::Node { .. } => {
25803 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenNoPanic)
25804 }
25805 }
25806 }
25807 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25808 match node.0.green.lookup_intern(db).details {
25809 GreenNodeDetails::Token(_) => Some(Self { node }),
25810 GreenNodeDetails::Node { .. } => None,
25811 }
25812 }
25813 fn as_syntax_node(&self) -> SyntaxNode {
25814 self.node.clone()
25815 }
25816 fn stable_ptr(&self) -> Self::StablePtr {
25817 TokenNoPanicPtr(self.node.0.stable_ptr)
25818 }
25819}
25820impl From<&TokenNoPanic> for SyntaxStablePtrId {
25821 fn from(node: &TokenNoPanic) -> Self {
25822 node.stable_ptr().untyped()
25823 }
25824}
25825#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25826pub struct TerminalNoPanic {
25827 node: SyntaxNode,
25828 children: Arc<[SyntaxNode]>,
25829}
25830impl Terminal for TerminalNoPanic {
25831 const KIND: SyntaxKind = SyntaxKind::TerminalNoPanic;
25832 type TokenType = TokenNoPanic;
25833 fn new_green(
25834 db: &dyn SyntaxGroup,
25835 leading_trivia: TriviaGreen,
25836 token: <<TerminalNoPanic as Terminal>::TokenType as TypedSyntaxNode>::Green,
25837 trailing_trivia: TriviaGreen,
25838 ) -> Self::Green {
25839 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
25840 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
25841 TerminalNoPanicGreen(
25842 Arc::new(GreenNode {
25843 kind: SyntaxKind::TerminalNoPanic,
25844 details: GreenNodeDetails::Node { children, width },
25845 })
25846 .intern(db),
25847 )
25848 }
25849 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25850 self.token(db).text(db)
25851 }
25852}
25853impl TerminalNoPanic {
25854 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25855 Trivia::from_syntax_node(db, self.children[0].clone())
25856 }
25857 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenNoPanic {
25858 TokenNoPanic::from_syntax_node(db, self.children[1].clone())
25859 }
25860 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25861 Trivia::from_syntax_node(db, self.children[2].clone())
25862 }
25863}
25864#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25865pub struct TerminalNoPanicPtr(pub SyntaxStablePtrId);
25866impl TerminalNoPanicPtr {}
25867impl TypedStablePtr for TerminalNoPanicPtr {
25868 type SyntaxNode = TerminalNoPanic;
25869 fn untyped(&self) -> SyntaxStablePtrId {
25870 self.0
25871 }
25872 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalNoPanic {
25873 TerminalNoPanic::from_syntax_node(db, self.0.lookup(db))
25874 }
25875}
25876impl From<TerminalNoPanicPtr> for SyntaxStablePtrId {
25877 fn from(ptr: TerminalNoPanicPtr) -> Self {
25878 ptr.untyped()
25879 }
25880}
25881#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25882pub struct TerminalNoPanicGreen(pub GreenId);
25883impl TypedSyntaxNode for TerminalNoPanic {
25884 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalNoPanic);
25885 type StablePtr = TerminalNoPanicPtr;
25886 type Green = TerminalNoPanicGreen;
25887 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25888 TerminalNoPanicGreen(
25889 Arc::new(GreenNode {
25890 kind: SyntaxKind::TerminalNoPanic,
25891 details: GreenNodeDetails::Node {
25892 children: vec![
25893 Trivia::missing(db).0,
25894 TokenNoPanic::missing(db).0,
25895 Trivia::missing(db).0,
25896 ],
25897 width: TextWidth::default(),
25898 },
25899 })
25900 .intern(db),
25901 )
25902 }
25903 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25904 let kind = node.kind(db);
25905 assert_eq!(
25906 kind,
25907 SyntaxKind::TerminalNoPanic,
25908 "Unexpected SyntaxKind {:?}. Expected {:?}.",
25909 kind,
25910 SyntaxKind::TerminalNoPanic
25911 );
25912 let children = db.get_children(node.clone());
25913 Self { node, children }
25914 }
25915 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25916 let kind = node.kind(db);
25917 if kind == SyntaxKind::TerminalNoPanic {
25918 Some(Self::from_syntax_node(db, node))
25919 } else {
25920 None
25921 }
25922 }
25923 fn as_syntax_node(&self) -> SyntaxNode {
25924 self.node.clone()
25925 }
25926 fn stable_ptr(&self) -> Self::StablePtr {
25927 TerminalNoPanicPtr(self.node.0.stable_ptr)
25928 }
25929}
25930impl From<&TerminalNoPanic> for SyntaxStablePtrId {
25931 fn from(node: &TerminalNoPanic) -> Self {
25932 node.stable_ptr().untyped()
25933 }
25934}
25935#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25936pub struct TokenOf {
25937 node: SyntaxNode,
25938}
25939impl Token for TokenOf {
25940 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
25941 TokenOfGreen(
25942 Arc::new(GreenNode {
25943 kind: SyntaxKind::TokenOf,
25944 details: GreenNodeDetails::Token(text),
25945 })
25946 .intern(db),
25947 )
25948 }
25949 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25950 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
25951 .clone()
25952 }
25953}
25954#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25955pub struct TokenOfPtr(pub SyntaxStablePtrId);
25956impl TypedStablePtr for TokenOfPtr {
25957 type SyntaxNode = TokenOf;
25958 fn untyped(&self) -> SyntaxStablePtrId {
25959 self.0
25960 }
25961 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenOf {
25962 TokenOf::from_syntax_node(db, self.0.lookup(db))
25963 }
25964}
25965impl From<TokenOfPtr> for SyntaxStablePtrId {
25966 fn from(ptr: TokenOfPtr) -> Self {
25967 ptr.untyped()
25968 }
25969}
25970#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25971pub struct TokenOfGreen(pub GreenId);
25972impl TokenOfGreen {
25973 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25974 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
25975 }
25976}
25977impl TypedSyntaxNode for TokenOf {
25978 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenOf);
25979 type StablePtr = TokenOfPtr;
25980 type Green = TokenOfGreen;
25981 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25982 TokenOfGreen(
25983 Arc::new(GreenNode {
25984 kind: SyntaxKind::TokenMissing,
25985 details: GreenNodeDetails::Token("".into()),
25986 })
25987 .intern(db),
25988 )
25989 }
25990 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25991 match node.0.green.lookup_intern(db).details {
25992 GreenNodeDetails::Token(_) => Self { node },
25993 GreenNodeDetails::Node { .. } => {
25994 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenOf)
25995 }
25996 }
25997 }
25998 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25999 match node.0.green.lookup_intern(db).details {
26000 GreenNodeDetails::Token(_) => Some(Self { node }),
26001 GreenNodeDetails::Node { .. } => None,
26002 }
26003 }
26004 fn as_syntax_node(&self) -> SyntaxNode {
26005 self.node.clone()
26006 }
26007 fn stable_ptr(&self) -> Self::StablePtr {
26008 TokenOfPtr(self.node.0.stable_ptr)
26009 }
26010}
26011impl From<&TokenOf> for SyntaxStablePtrId {
26012 fn from(node: &TokenOf) -> Self {
26013 node.stable_ptr().untyped()
26014 }
26015}
26016#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26017pub struct TerminalOf {
26018 node: SyntaxNode,
26019 children: Arc<[SyntaxNode]>,
26020}
26021impl Terminal for TerminalOf {
26022 const KIND: SyntaxKind = SyntaxKind::TerminalOf;
26023 type TokenType = TokenOf;
26024 fn new_green(
26025 db: &dyn SyntaxGroup,
26026 leading_trivia: TriviaGreen,
26027 token: <<TerminalOf as Terminal>::TokenType as TypedSyntaxNode>::Green,
26028 trailing_trivia: TriviaGreen,
26029 ) -> Self::Green {
26030 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
26031 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
26032 TerminalOfGreen(
26033 Arc::new(GreenNode {
26034 kind: SyntaxKind::TerminalOf,
26035 details: GreenNodeDetails::Node { children, width },
26036 })
26037 .intern(db),
26038 )
26039 }
26040 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26041 self.token(db).text(db)
26042 }
26043}
26044impl TerminalOf {
26045 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26046 Trivia::from_syntax_node(db, self.children[0].clone())
26047 }
26048 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenOf {
26049 TokenOf::from_syntax_node(db, self.children[1].clone())
26050 }
26051 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26052 Trivia::from_syntax_node(db, self.children[2].clone())
26053 }
26054}
26055#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26056pub struct TerminalOfPtr(pub SyntaxStablePtrId);
26057impl TerminalOfPtr {}
26058impl TypedStablePtr for TerminalOfPtr {
26059 type SyntaxNode = TerminalOf;
26060 fn untyped(&self) -> SyntaxStablePtrId {
26061 self.0
26062 }
26063 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalOf {
26064 TerminalOf::from_syntax_node(db, self.0.lookup(db))
26065 }
26066}
26067impl From<TerminalOfPtr> for SyntaxStablePtrId {
26068 fn from(ptr: TerminalOfPtr) -> Self {
26069 ptr.untyped()
26070 }
26071}
26072#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26073pub struct TerminalOfGreen(pub GreenId);
26074impl TypedSyntaxNode for TerminalOf {
26075 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalOf);
26076 type StablePtr = TerminalOfPtr;
26077 type Green = TerminalOfGreen;
26078 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26079 TerminalOfGreen(
26080 Arc::new(GreenNode {
26081 kind: SyntaxKind::TerminalOf,
26082 details: GreenNodeDetails::Node {
26083 children: vec![
26084 Trivia::missing(db).0,
26085 TokenOf::missing(db).0,
26086 Trivia::missing(db).0,
26087 ],
26088 width: TextWidth::default(),
26089 },
26090 })
26091 .intern(db),
26092 )
26093 }
26094 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26095 let kind = node.kind(db);
26096 assert_eq!(
26097 kind,
26098 SyntaxKind::TerminalOf,
26099 "Unexpected SyntaxKind {:?}. Expected {:?}.",
26100 kind,
26101 SyntaxKind::TerminalOf
26102 );
26103 let children = db.get_children(node.clone());
26104 Self { node, children }
26105 }
26106 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26107 let kind = node.kind(db);
26108 if kind == SyntaxKind::TerminalOf { Some(Self::from_syntax_node(db, node)) } else { None }
26109 }
26110 fn as_syntax_node(&self) -> SyntaxNode {
26111 self.node.clone()
26112 }
26113 fn stable_ptr(&self) -> Self::StablePtr {
26114 TerminalOfPtr(self.node.0.stable_ptr)
26115 }
26116}
26117impl From<&TerminalOf> for SyntaxStablePtrId {
26118 fn from(node: &TerminalOf) -> Self {
26119 node.stable_ptr().untyped()
26120 }
26121}
26122#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26123pub struct TokenRef {
26124 node: SyntaxNode,
26125}
26126impl Token for TokenRef {
26127 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
26128 TokenRefGreen(
26129 Arc::new(GreenNode {
26130 kind: SyntaxKind::TokenRef,
26131 details: GreenNodeDetails::Token(text),
26132 })
26133 .intern(db),
26134 )
26135 }
26136 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26137 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
26138 .clone()
26139 }
26140}
26141#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26142pub struct TokenRefPtr(pub SyntaxStablePtrId);
26143impl TypedStablePtr for TokenRefPtr {
26144 type SyntaxNode = TokenRef;
26145 fn untyped(&self) -> SyntaxStablePtrId {
26146 self.0
26147 }
26148 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenRef {
26149 TokenRef::from_syntax_node(db, self.0.lookup(db))
26150 }
26151}
26152impl From<TokenRefPtr> for SyntaxStablePtrId {
26153 fn from(ptr: TokenRefPtr) -> Self {
26154 ptr.untyped()
26155 }
26156}
26157#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26158pub struct TokenRefGreen(pub GreenId);
26159impl TokenRefGreen {
26160 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26161 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
26162 }
26163}
26164impl TypedSyntaxNode for TokenRef {
26165 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenRef);
26166 type StablePtr = TokenRefPtr;
26167 type Green = TokenRefGreen;
26168 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26169 TokenRefGreen(
26170 Arc::new(GreenNode {
26171 kind: SyntaxKind::TokenMissing,
26172 details: GreenNodeDetails::Token("".into()),
26173 })
26174 .intern(db),
26175 )
26176 }
26177 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26178 match node.0.green.lookup_intern(db).details {
26179 GreenNodeDetails::Token(_) => Self { node },
26180 GreenNodeDetails::Node { .. } => {
26181 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenRef)
26182 }
26183 }
26184 }
26185 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26186 match node.0.green.lookup_intern(db).details {
26187 GreenNodeDetails::Token(_) => Some(Self { node }),
26188 GreenNodeDetails::Node { .. } => None,
26189 }
26190 }
26191 fn as_syntax_node(&self) -> SyntaxNode {
26192 self.node.clone()
26193 }
26194 fn stable_ptr(&self) -> Self::StablePtr {
26195 TokenRefPtr(self.node.0.stable_ptr)
26196 }
26197}
26198impl From<&TokenRef> for SyntaxStablePtrId {
26199 fn from(node: &TokenRef) -> Self {
26200 node.stable_ptr().untyped()
26201 }
26202}
26203#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26204pub struct TerminalRef {
26205 node: SyntaxNode,
26206 children: Arc<[SyntaxNode]>,
26207}
26208impl Terminal for TerminalRef {
26209 const KIND: SyntaxKind = SyntaxKind::TerminalRef;
26210 type TokenType = TokenRef;
26211 fn new_green(
26212 db: &dyn SyntaxGroup,
26213 leading_trivia: TriviaGreen,
26214 token: <<TerminalRef as Terminal>::TokenType as TypedSyntaxNode>::Green,
26215 trailing_trivia: TriviaGreen,
26216 ) -> Self::Green {
26217 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
26218 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
26219 TerminalRefGreen(
26220 Arc::new(GreenNode {
26221 kind: SyntaxKind::TerminalRef,
26222 details: GreenNodeDetails::Node { children, width },
26223 })
26224 .intern(db),
26225 )
26226 }
26227 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26228 self.token(db).text(db)
26229 }
26230}
26231impl TerminalRef {
26232 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26233 Trivia::from_syntax_node(db, self.children[0].clone())
26234 }
26235 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenRef {
26236 TokenRef::from_syntax_node(db, self.children[1].clone())
26237 }
26238 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26239 Trivia::from_syntax_node(db, self.children[2].clone())
26240 }
26241}
26242#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26243pub struct TerminalRefPtr(pub SyntaxStablePtrId);
26244impl TerminalRefPtr {}
26245impl TypedStablePtr for TerminalRefPtr {
26246 type SyntaxNode = TerminalRef;
26247 fn untyped(&self) -> SyntaxStablePtrId {
26248 self.0
26249 }
26250 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalRef {
26251 TerminalRef::from_syntax_node(db, self.0.lookup(db))
26252 }
26253}
26254impl From<TerminalRefPtr> for SyntaxStablePtrId {
26255 fn from(ptr: TerminalRefPtr) -> Self {
26256 ptr.untyped()
26257 }
26258}
26259#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26260pub struct TerminalRefGreen(pub GreenId);
26261impl TypedSyntaxNode for TerminalRef {
26262 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalRef);
26263 type StablePtr = TerminalRefPtr;
26264 type Green = TerminalRefGreen;
26265 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26266 TerminalRefGreen(
26267 Arc::new(GreenNode {
26268 kind: SyntaxKind::TerminalRef,
26269 details: GreenNodeDetails::Node {
26270 children: vec![
26271 Trivia::missing(db).0,
26272 TokenRef::missing(db).0,
26273 Trivia::missing(db).0,
26274 ],
26275 width: TextWidth::default(),
26276 },
26277 })
26278 .intern(db),
26279 )
26280 }
26281 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26282 let kind = node.kind(db);
26283 assert_eq!(
26284 kind,
26285 SyntaxKind::TerminalRef,
26286 "Unexpected SyntaxKind {:?}. Expected {:?}.",
26287 kind,
26288 SyntaxKind::TerminalRef
26289 );
26290 let children = db.get_children(node.clone());
26291 Self { node, children }
26292 }
26293 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26294 let kind = node.kind(db);
26295 if kind == SyntaxKind::TerminalRef { Some(Self::from_syntax_node(db, node)) } else { None }
26296 }
26297 fn as_syntax_node(&self) -> SyntaxNode {
26298 self.node.clone()
26299 }
26300 fn stable_ptr(&self) -> Self::StablePtr {
26301 TerminalRefPtr(self.node.0.stable_ptr)
26302 }
26303}
26304impl From<&TerminalRef> for SyntaxStablePtrId {
26305 fn from(node: &TerminalRef) -> Self {
26306 node.stable_ptr().untyped()
26307 }
26308}
26309#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26310pub struct TokenContinue {
26311 node: SyntaxNode,
26312}
26313impl Token for TokenContinue {
26314 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
26315 TokenContinueGreen(
26316 Arc::new(GreenNode {
26317 kind: SyntaxKind::TokenContinue,
26318 details: GreenNodeDetails::Token(text),
26319 })
26320 .intern(db),
26321 )
26322 }
26323 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26324 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
26325 .clone()
26326 }
26327}
26328#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26329pub struct TokenContinuePtr(pub SyntaxStablePtrId);
26330impl TypedStablePtr for TokenContinuePtr {
26331 type SyntaxNode = TokenContinue;
26332 fn untyped(&self) -> SyntaxStablePtrId {
26333 self.0
26334 }
26335 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenContinue {
26336 TokenContinue::from_syntax_node(db, self.0.lookup(db))
26337 }
26338}
26339impl From<TokenContinuePtr> for SyntaxStablePtrId {
26340 fn from(ptr: TokenContinuePtr) -> Self {
26341 ptr.untyped()
26342 }
26343}
26344#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26345pub struct TokenContinueGreen(pub GreenId);
26346impl TokenContinueGreen {
26347 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26348 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
26349 }
26350}
26351impl TypedSyntaxNode for TokenContinue {
26352 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenContinue);
26353 type StablePtr = TokenContinuePtr;
26354 type Green = TokenContinueGreen;
26355 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26356 TokenContinueGreen(
26357 Arc::new(GreenNode {
26358 kind: SyntaxKind::TokenMissing,
26359 details: GreenNodeDetails::Token("".into()),
26360 })
26361 .intern(db),
26362 )
26363 }
26364 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26365 match node.0.green.lookup_intern(db).details {
26366 GreenNodeDetails::Token(_) => Self { node },
26367 GreenNodeDetails::Node { .. } => {
26368 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenContinue)
26369 }
26370 }
26371 }
26372 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26373 match node.0.green.lookup_intern(db).details {
26374 GreenNodeDetails::Token(_) => Some(Self { node }),
26375 GreenNodeDetails::Node { .. } => None,
26376 }
26377 }
26378 fn as_syntax_node(&self) -> SyntaxNode {
26379 self.node.clone()
26380 }
26381 fn stable_ptr(&self) -> Self::StablePtr {
26382 TokenContinuePtr(self.node.0.stable_ptr)
26383 }
26384}
26385impl From<&TokenContinue> for SyntaxStablePtrId {
26386 fn from(node: &TokenContinue) -> Self {
26387 node.stable_ptr().untyped()
26388 }
26389}
26390#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26391pub struct TerminalContinue {
26392 node: SyntaxNode,
26393 children: Arc<[SyntaxNode]>,
26394}
26395impl Terminal for TerminalContinue {
26396 const KIND: SyntaxKind = SyntaxKind::TerminalContinue;
26397 type TokenType = TokenContinue;
26398 fn new_green(
26399 db: &dyn SyntaxGroup,
26400 leading_trivia: TriviaGreen,
26401 token: <<TerminalContinue as Terminal>::TokenType as TypedSyntaxNode>::Green,
26402 trailing_trivia: TriviaGreen,
26403 ) -> Self::Green {
26404 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
26405 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
26406 TerminalContinueGreen(
26407 Arc::new(GreenNode {
26408 kind: SyntaxKind::TerminalContinue,
26409 details: GreenNodeDetails::Node { children, width },
26410 })
26411 .intern(db),
26412 )
26413 }
26414 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26415 self.token(db).text(db)
26416 }
26417}
26418impl TerminalContinue {
26419 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26420 Trivia::from_syntax_node(db, self.children[0].clone())
26421 }
26422 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenContinue {
26423 TokenContinue::from_syntax_node(db, self.children[1].clone())
26424 }
26425 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26426 Trivia::from_syntax_node(db, self.children[2].clone())
26427 }
26428}
26429#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26430pub struct TerminalContinuePtr(pub SyntaxStablePtrId);
26431impl TerminalContinuePtr {}
26432impl TypedStablePtr for TerminalContinuePtr {
26433 type SyntaxNode = TerminalContinue;
26434 fn untyped(&self) -> SyntaxStablePtrId {
26435 self.0
26436 }
26437 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalContinue {
26438 TerminalContinue::from_syntax_node(db, self.0.lookup(db))
26439 }
26440}
26441impl From<TerminalContinuePtr> for SyntaxStablePtrId {
26442 fn from(ptr: TerminalContinuePtr) -> Self {
26443 ptr.untyped()
26444 }
26445}
26446#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26447pub struct TerminalContinueGreen(pub GreenId);
26448impl TypedSyntaxNode for TerminalContinue {
26449 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalContinue);
26450 type StablePtr = TerminalContinuePtr;
26451 type Green = TerminalContinueGreen;
26452 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26453 TerminalContinueGreen(
26454 Arc::new(GreenNode {
26455 kind: SyntaxKind::TerminalContinue,
26456 details: GreenNodeDetails::Node {
26457 children: vec![
26458 Trivia::missing(db).0,
26459 TokenContinue::missing(db).0,
26460 Trivia::missing(db).0,
26461 ],
26462 width: TextWidth::default(),
26463 },
26464 })
26465 .intern(db),
26466 )
26467 }
26468 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26469 let kind = node.kind(db);
26470 assert_eq!(
26471 kind,
26472 SyntaxKind::TerminalContinue,
26473 "Unexpected SyntaxKind {:?}. Expected {:?}.",
26474 kind,
26475 SyntaxKind::TerminalContinue
26476 );
26477 let children = db.get_children(node.clone());
26478 Self { node, children }
26479 }
26480 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26481 let kind = node.kind(db);
26482 if kind == SyntaxKind::TerminalContinue {
26483 Some(Self::from_syntax_node(db, node))
26484 } else {
26485 None
26486 }
26487 }
26488 fn as_syntax_node(&self) -> SyntaxNode {
26489 self.node.clone()
26490 }
26491 fn stable_ptr(&self) -> Self::StablePtr {
26492 TerminalContinuePtr(self.node.0.stable_ptr)
26493 }
26494}
26495impl From<&TerminalContinue> for SyntaxStablePtrId {
26496 fn from(node: &TerminalContinue) -> Self {
26497 node.stable_ptr().untyped()
26498 }
26499}
26500#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26501pub struct TokenReturn {
26502 node: SyntaxNode,
26503}
26504impl Token for TokenReturn {
26505 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
26506 TokenReturnGreen(
26507 Arc::new(GreenNode {
26508 kind: SyntaxKind::TokenReturn,
26509 details: GreenNodeDetails::Token(text),
26510 })
26511 .intern(db),
26512 )
26513 }
26514 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26515 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
26516 .clone()
26517 }
26518}
26519#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26520pub struct TokenReturnPtr(pub SyntaxStablePtrId);
26521impl TypedStablePtr for TokenReturnPtr {
26522 type SyntaxNode = TokenReturn;
26523 fn untyped(&self) -> SyntaxStablePtrId {
26524 self.0
26525 }
26526 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenReturn {
26527 TokenReturn::from_syntax_node(db, self.0.lookup(db))
26528 }
26529}
26530impl From<TokenReturnPtr> for SyntaxStablePtrId {
26531 fn from(ptr: TokenReturnPtr) -> Self {
26532 ptr.untyped()
26533 }
26534}
26535#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26536pub struct TokenReturnGreen(pub GreenId);
26537impl TokenReturnGreen {
26538 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26539 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
26540 }
26541}
26542impl TypedSyntaxNode for TokenReturn {
26543 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenReturn);
26544 type StablePtr = TokenReturnPtr;
26545 type Green = TokenReturnGreen;
26546 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26547 TokenReturnGreen(
26548 Arc::new(GreenNode {
26549 kind: SyntaxKind::TokenMissing,
26550 details: GreenNodeDetails::Token("".into()),
26551 })
26552 .intern(db),
26553 )
26554 }
26555 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26556 match node.0.green.lookup_intern(db).details {
26557 GreenNodeDetails::Token(_) => Self { node },
26558 GreenNodeDetails::Node { .. } => {
26559 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenReturn)
26560 }
26561 }
26562 }
26563 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26564 match node.0.green.lookup_intern(db).details {
26565 GreenNodeDetails::Token(_) => Some(Self { node }),
26566 GreenNodeDetails::Node { .. } => None,
26567 }
26568 }
26569 fn as_syntax_node(&self) -> SyntaxNode {
26570 self.node.clone()
26571 }
26572 fn stable_ptr(&self) -> Self::StablePtr {
26573 TokenReturnPtr(self.node.0.stable_ptr)
26574 }
26575}
26576impl From<&TokenReturn> for SyntaxStablePtrId {
26577 fn from(node: &TokenReturn) -> Self {
26578 node.stable_ptr().untyped()
26579 }
26580}
26581#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26582pub struct TerminalReturn {
26583 node: SyntaxNode,
26584 children: Arc<[SyntaxNode]>,
26585}
26586impl Terminal for TerminalReturn {
26587 const KIND: SyntaxKind = SyntaxKind::TerminalReturn;
26588 type TokenType = TokenReturn;
26589 fn new_green(
26590 db: &dyn SyntaxGroup,
26591 leading_trivia: TriviaGreen,
26592 token: <<TerminalReturn as Terminal>::TokenType as TypedSyntaxNode>::Green,
26593 trailing_trivia: TriviaGreen,
26594 ) -> Self::Green {
26595 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
26596 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
26597 TerminalReturnGreen(
26598 Arc::new(GreenNode {
26599 kind: SyntaxKind::TerminalReturn,
26600 details: GreenNodeDetails::Node { children, width },
26601 })
26602 .intern(db),
26603 )
26604 }
26605 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26606 self.token(db).text(db)
26607 }
26608}
26609impl TerminalReturn {
26610 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26611 Trivia::from_syntax_node(db, self.children[0].clone())
26612 }
26613 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenReturn {
26614 TokenReturn::from_syntax_node(db, self.children[1].clone())
26615 }
26616 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26617 Trivia::from_syntax_node(db, self.children[2].clone())
26618 }
26619}
26620#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26621pub struct TerminalReturnPtr(pub SyntaxStablePtrId);
26622impl TerminalReturnPtr {}
26623impl TypedStablePtr for TerminalReturnPtr {
26624 type SyntaxNode = TerminalReturn;
26625 fn untyped(&self) -> SyntaxStablePtrId {
26626 self.0
26627 }
26628 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalReturn {
26629 TerminalReturn::from_syntax_node(db, self.0.lookup(db))
26630 }
26631}
26632impl From<TerminalReturnPtr> for SyntaxStablePtrId {
26633 fn from(ptr: TerminalReturnPtr) -> Self {
26634 ptr.untyped()
26635 }
26636}
26637#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26638pub struct TerminalReturnGreen(pub GreenId);
26639impl TypedSyntaxNode for TerminalReturn {
26640 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalReturn);
26641 type StablePtr = TerminalReturnPtr;
26642 type Green = TerminalReturnGreen;
26643 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26644 TerminalReturnGreen(
26645 Arc::new(GreenNode {
26646 kind: SyntaxKind::TerminalReturn,
26647 details: GreenNodeDetails::Node {
26648 children: vec![
26649 Trivia::missing(db).0,
26650 TokenReturn::missing(db).0,
26651 Trivia::missing(db).0,
26652 ],
26653 width: TextWidth::default(),
26654 },
26655 })
26656 .intern(db),
26657 )
26658 }
26659 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26660 let kind = node.kind(db);
26661 assert_eq!(
26662 kind,
26663 SyntaxKind::TerminalReturn,
26664 "Unexpected SyntaxKind {:?}. Expected {:?}.",
26665 kind,
26666 SyntaxKind::TerminalReturn
26667 );
26668 let children = db.get_children(node.clone());
26669 Self { node, children }
26670 }
26671 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26672 let kind = node.kind(db);
26673 if kind == SyntaxKind::TerminalReturn {
26674 Some(Self::from_syntax_node(db, node))
26675 } else {
26676 None
26677 }
26678 }
26679 fn as_syntax_node(&self) -> SyntaxNode {
26680 self.node.clone()
26681 }
26682 fn stable_ptr(&self) -> Self::StablePtr {
26683 TerminalReturnPtr(self.node.0.stable_ptr)
26684 }
26685}
26686impl From<&TerminalReturn> for SyntaxStablePtrId {
26687 fn from(node: &TerminalReturn) -> Self {
26688 node.stable_ptr().untyped()
26689 }
26690}
26691#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26692pub struct TokenBreak {
26693 node: SyntaxNode,
26694}
26695impl Token for TokenBreak {
26696 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
26697 TokenBreakGreen(
26698 Arc::new(GreenNode {
26699 kind: SyntaxKind::TokenBreak,
26700 details: GreenNodeDetails::Token(text),
26701 })
26702 .intern(db),
26703 )
26704 }
26705 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26706 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
26707 .clone()
26708 }
26709}
26710#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26711pub struct TokenBreakPtr(pub SyntaxStablePtrId);
26712impl TypedStablePtr for TokenBreakPtr {
26713 type SyntaxNode = TokenBreak;
26714 fn untyped(&self) -> SyntaxStablePtrId {
26715 self.0
26716 }
26717 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenBreak {
26718 TokenBreak::from_syntax_node(db, self.0.lookup(db))
26719 }
26720}
26721impl From<TokenBreakPtr> for SyntaxStablePtrId {
26722 fn from(ptr: TokenBreakPtr) -> Self {
26723 ptr.untyped()
26724 }
26725}
26726#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26727pub struct TokenBreakGreen(pub GreenId);
26728impl TokenBreakGreen {
26729 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26730 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
26731 }
26732}
26733impl TypedSyntaxNode for TokenBreak {
26734 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenBreak);
26735 type StablePtr = TokenBreakPtr;
26736 type Green = TokenBreakGreen;
26737 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26738 TokenBreakGreen(
26739 Arc::new(GreenNode {
26740 kind: SyntaxKind::TokenMissing,
26741 details: GreenNodeDetails::Token("".into()),
26742 })
26743 .intern(db),
26744 )
26745 }
26746 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26747 match node.0.green.lookup_intern(db).details {
26748 GreenNodeDetails::Token(_) => Self { node },
26749 GreenNodeDetails::Node { .. } => {
26750 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenBreak)
26751 }
26752 }
26753 }
26754 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26755 match node.0.green.lookup_intern(db).details {
26756 GreenNodeDetails::Token(_) => Some(Self { node }),
26757 GreenNodeDetails::Node { .. } => None,
26758 }
26759 }
26760 fn as_syntax_node(&self) -> SyntaxNode {
26761 self.node.clone()
26762 }
26763 fn stable_ptr(&self) -> Self::StablePtr {
26764 TokenBreakPtr(self.node.0.stable_ptr)
26765 }
26766}
26767impl From<&TokenBreak> for SyntaxStablePtrId {
26768 fn from(node: &TokenBreak) -> Self {
26769 node.stable_ptr().untyped()
26770 }
26771}
26772#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26773pub struct TerminalBreak {
26774 node: SyntaxNode,
26775 children: Arc<[SyntaxNode]>,
26776}
26777impl Terminal for TerminalBreak {
26778 const KIND: SyntaxKind = SyntaxKind::TerminalBreak;
26779 type TokenType = TokenBreak;
26780 fn new_green(
26781 db: &dyn SyntaxGroup,
26782 leading_trivia: TriviaGreen,
26783 token: <<TerminalBreak as Terminal>::TokenType as TypedSyntaxNode>::Green,
26784 trailing_trivia: TriviaGreen,
26785 ) -> Self::Green {
26786 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
26787 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
26788 TerminalBreakGreen(
26789 Arc::new(GreenNode {
26790 kind: SyntaxKind::TerminalBreak,
26791 details: GreenNodeDetails::Node { children, width },
26792 })
26793 .intern(db),
26794 )
26795 }
26796 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26797 self.token(db).text(db)
26798 }
26799}
26800impl TerminalBreak {
26801 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26802 Trivia::from_syntax_node(db, self.children[0].clone())
26803 }
26804 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenBreak {
26805 TokenBreak::from_syntax_node(db, self.children[1].clone())
26806 }
26807 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26808 Trivia::from_syntax_node(db, self.children[2].clone())
26809 }
26810}
26811#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26812pub struct TerminalBreakPtr(pub SyntaxStablePtrId);
26813impl TerminalBreakPtr {}
26814impl TypedStablePtr for TerminalBreakPtr {
26815 type SyntaxNode = TerminalBreak;
26816 fn untyped(&self) -> SyntaxStablePtrId {
26817 self.0
26818 }
26819 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalBreak {
26820 TerminalBreak::from_syntax_node(db, self.0.lookup(db))
26821 }
26822}
26823impl From<TerminalBreakPtr> for SyntaxStablePtrId {
26824 fn from(ptr: TerminalBreakPtr) -> Self {
26825 ptr.untyped()
26826 }
26827}
26828#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26829pub struct TerminalBreakGreen(pub GreenId);
26830impl TypedSyntaxNode for TerminalBreak {
26831 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalBreak);
26832 type StablePtr = TerminalBreakPtr;
26833 type Green = TerminalBreakGreen;
26834 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26835 TerminalBreakGreen(
26836 Arc::new(GreenNode {
26837 kind: SyntaxKind::TerminalBreak,
26838 details: GreenNodeDetails::Node {
26839 children: vec![
26840 Trivia::missing(db).0,
26841 TokenBreak::missing(db).0,
26842 Trivia::missing(db).0,
26843 ],
26844 width: TextWidth::default(),
26845 },
26846 })
26847 .intern(db),
26848 )
26849 }
26850 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26851 let kind = node.kind(db);
26852 assert_eq!(
26853 kind,
26854 SyntaxKind::TerminalBreak,
26855 "Unexpected SyntaxKind {:?}. Expected {:?}.",
26856 kind,
26857 SyntaxKind::TerminalBreak
26858 );
26859 let children = db.get_children(node.clone());
26860 Self { node, children }
26861 }
26862 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26863 let kind = node.kind(db);
26864 if kind == SyntaxKind::TerminalBreak {
26865 Some(Self::from_syntax_node(db, node))
26866 } else {
26867 None
26868 }
26869 }
26870 fn as_syntax_node(&self) -> SyntaxNode {
26871 self.node.clone()
26872 }
26873 fn stable_ptr(&self) -> Self::StablePtr {
26874 TerminalBreakPtr(self.node.0.stable_ptr)
26875 }
26876}
26877impl From<&TerminalBreak> for SyntaxStablePtrId {
26878 fn from(node: &TerminalBreak) -> Self {
26879 node.stable_ptr().untyped()
26880 }
26881}
26882#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26883pub struct TokenStruct {
26884 node: SyntaxNode,
26885}
26886impl Token for TokenStruct {
26887 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
26888 TokenStructGreen(
26889 Arc::new(GreenNode {
26890 kind: SyntaxKind::TokenStruct,
26891 details: GreenNodeDetails::Token(text),
26892 })
26893 .intern(db),
26894 )
26895 }
26896 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26897 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
26898 .clone()
26899 }
26900}
26901#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26902pub struct TokenStructPtr(pub SyntaxStablePtrId);
26903impl TypedStablePtr for TokenStructPtr {
26904 type SyntaxNode = TokenStruct;
26905 fn untyped(&self) -> SyntaxStablePtrId {
26906 self.0
26907 }
26908 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenStruct {
26909 TokenStruct::from_syntax_node(db, self.0.lookup(db))
26910 }
26911}
26912impl From<TokenStructPtr> for SyntaxStablePtrId {
26913 fn from(ptr: TokenStructPtr) -> Self {
26914 ptr.untyped()
26915 }
26916}
26917#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26918pub struct TokenStructGreen(pub GreenId);
26919impl TokenStructGreen {
26920 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26921 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
26922 }
26923}
26924impl TypedSyntaxNode for TokenStruct {
26925 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenStruct);
26926 type StablePtr = TokenStructPtr;
26927 type Green = TokenStructGreen;
26928 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26929 TokenStructGreen(
26930 Arc::new(GreenNode {
26931 kind: SyntaxKind::TokenMissing,
26932 details: GreenNodeDetails::Token("".into()),
26933 })
26934 .intern(db),
26935 )
26936 }
26937 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26938 match node.0.green.lookup_intern(db).details {
26939 GreenNodeDetails::Token(_) => Self { node },
26940 GreenNodeDetails::Node { .. } => {
26941 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenStruct)
26942 }
26943 }
26944 }
26945 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26946 match node.0.green.lookup_intern(db).details {
26947 GreenNodeDetails::Token(_) => Some(Self { node }),
26948 GreenNodeDetails::Node { .. } => None,
26949 }
26950 }
26951 fn as_syntax_node(&self) -> SyntaxNode {
26952 self.node.clone()
26953 }
26954 fn stable_ptr(&self) -> Self::StablePtr {
26955 TokenStructPtr(self.node.0.stable_ptr)
26956 }
26957}
26958impl From<&TokenStruct> for SyntaxStablePtrId {
26959 fn from(node: &TokenStruct) -> Self {
26960 node.stable_ptr().untyped()
26961 }
26962}
26963#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26964pub struct TerminalStruct {
26965 node: SyntaxNode,
26966 children: Arc<[SyntaxNode]>,
26967}
26968impl Terminal for TerminalStruct {
26969 const KIND: SyntaxKind = SyntaxKind::TerminalStruct;
26970 type TokenType = TokenStruct;
26971 fn new_green(
26972 db: &dyn SyntaxGroup,
26973 leading_trivia: TriviaGreen,
26974 token: <<TerminalStruct as Terminal>::TokenType as TypedSyntaxNode>::Green,
26975 trailing_trivia: TriviaGreen,
26976 ) -> Self::Green {
26977 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
26978 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
26979 TerminalStructGreen(
26980 Arc::new(GreenNode {
26981 kind: SyntaxKind::TerminalStruct,
26982 details: GreenNodeDetails::Node { children, width },
26983 })
26984 .intern(db),
26985 )
26986 }
26987 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26988 self.token(db).text(db)
26989 }
26990}
26991impl TerminalStruct {
26992 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26993 Trivia::from_syntax_node(db, self.children[0].clone())
26994 }
26995 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenStruct {
26996 TokenStruct::from_syntax_node(db, self.children[1].clone())
26997 }
26998 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26999 Trivia::from_syntax_node(db, self.children[2].clone())
27000 }
27001}
27002#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27003pub struct TerminalStructPtr(pub SyntaxStablePtrId);
27004impl TerminalStructPtr {}
27005impl TypedStablePtr for TerminalStructPtr {
27006 type SyntaxNode = TerminalStruct;
27007 fn untyped(&self) -> SyntaxStablePtrId {
27008 self.0
27009 }
27010 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalStruct {
27011 TerminalStruct::from_syntax_node(db, self.0.lookup(db))
27012 }
27013}
27014impl From<TerminalStructPtr> for SyntaxStablePtrId {
27015 fn from(ptr: TerminalStructPtr) -> Self {
27016 ptr.untyped()
27017 }
27018}
27019#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27020pub struct TerminalStructGreen(pub GreenId);
27021impl TypedSyntaxNode for TerminalStruct {
27022 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalStruct);
27023 type StablePtr = TerminalStructPtr;
27024 type Green = TerminalStructGreen;
27025 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27026 TerminalStructGreen(
27027 Arc::new(GreenNode {
27028 kind: SyntaxKind::TerminalStruct,
27029 details: GreenNodeDetails::Node {
27030 children: vec![
27031 Trivia::missing(db).0,
27032 TokenStruct::missing(db).0,
27033 Trivia::missing(db).0,
27034 ],
27035 width: TextWidth::default(),
27036 },
27037 })
27038 .intern(db),
27039 )
27040 }
27041 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27042 let kind = node.kind(db);
27043 assert_eq!(
27044 kind,
27045 SyntaxKind::TerminalStruct,
27046 "Unexpected SyntaxKind {:?}. Expected {:?}.",
27047 kind,
27048 SyntaxKind::TerminalStruct
27049 );
27050 let children = db.get_children(node.clone());
27051 Self { node, children }
27052 }
27053 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27054 let kind = node.kind(db);
27055 if kind == SyntaxKind::TerminalStruct {
27056 Some(Self::from_syntax_node(db, node))
27057 } else {
27058 None
27059 }
27060 }
27061 fn as_syntax_node(&self) -> SyntaxNode {
27062 self.node.clone()
27063 }
27064 fn stable_ptr(&self) -> Self::StablePtr {
27065 TerminalStructPtr(self.node.0.stable_ptr)
27066 }
27067}
27068impl From<&TerminalStruct> for SyntaxStablePtrId {
27069 fn from(node: &TerminalStruct) -> Self {
27070 node.stable_ptr().untyped()
27071 }
27072}
27073#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27074pub struct TokenTrait {
27075 node: SyntaxNode,
27076}
27077impl Token for TokenTrait {
27078 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
27079 TokenTraitGreen(
27080 Arc::new(GreenNode {
27081 kind: SyntaxKind::TokenTrait,
27082 details: GreenNodeDetails::Token(text),
27083 })
27084 .intern(db),
27085 )
27086 }
27087 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27088 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
27089 .clone()
27090 }
27091}
27092#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27093pub struct TokenTraitPtr(pub SyntaxStablePtrId);
27094impl TypedStablePtr for TokenTraitPtr {
27095 type SyntaxNode = TokenTrait;
27096 fn untyped(&self) -> SyntaxStablePtrId {
27097 self.0
27098 }
27099 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenTrait {
27100 TokenTrait::from_syntax_node(db, self.0.lookup(db))
27101 }
27102}
27103impl From<TokenTraitPtr> for SyntaxStablePtrId {
27104 fn from(ptr: TokenTraitPtr) -> Self {
27105 ptr.untyped()
27106 }
27107}
27108#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27109pub struct TokenTraitGreen(pub GreenId);
27110impl TokenTraitGreen {
27111 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27112 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
27113 }
27114}
27115impl TypedSyntaxNode for TokenTrait {
27116 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenTrait);
27117 type StablePtr = TokenTraitPtr;
27118 type Green = TokenTraitGreen;
27119 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27120 TokenTraitGreen(
27121 Arc::new(GreenNode {
27122 kind: SyntaxKind::TokenMissing,
27123 details: GreenNodeDetails::Token("".into()),
27124 })
27125 .intern(db),
27126 )
27127 }
27128 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27129 match node.0.green.lookup_intern(db).details {
27130 GreenNodeDetails::Token(_) => Self { node },
27131 GreenNodeDetails::Node { .. } => {
27132 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenTrait)
27133 }
27134 }
27135 }
27136 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27137 match node.0.green.lookup_intern(db).details {
27138 GreenNodeDetails::Token(_) => Some(Self { node }),
27139 GreenNodeDetails::Node { .. } => None,
27140 }
27141 }
27142 fn as_syntax_node(&self) -> SyntaxNode {
27143 self.node.clone()
27144 }
27145 fn stable_ptr(&self) -> Self::StablePtr {
27146 TokenTraitPtr(self.node.0.stable_ptr)
27147 }
27148}
27149impl From<&TokenTrait> for SyntaxStablePtrId {
27150 fn from(node: &TokenTrait) -> Self {
27151 node.stable_ptr().untyped()
27152 }
27153}
27154#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27155pub struct TerminalTrait {
27156 node: SyntaxNode,
27157 children: Arc<[SyntaxNode]>,
27158}
27159impl Terminal for TerminalTrait {
27160 const KIND: SyntaxKind = SyntaxKind::TerminalTrait;
27161 type TokenType = TokenTrait;
27162 fn new_green(
27163 db: &dyn SyntaxGroup,
27164 leading_trivia: TriviaGreen,
27165 token: <<TerminalTrait as Terminal>::TokenType as TypedSyntaxNode>::Green,
27166 trailing_trivia: TriviaGreen,
27167 ) -> Self::Green {
27168 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
27169 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
27170 TerminalTraitGreen(
27171 Arc::new(GreenNode {
27172 kind: SyntaxKind::TerminalTrait,
27173 details: GreenNodeDetails::Node { children, width },
27174 })
27175 .intern(db),
27176 )
27177 }
27178 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27179 self.token(db).text(db)
27180 }
27181}
27182impl TerminalTrait {
27183 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27184 Trivia::from_syntax_node(db, self.children[0].clone())
27185 }
27186 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenTrait {
27187 TokenTrait::from_syntax_node(db, self.children[1].clone())
27188 }
27189 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27190 Trivia::from_syntax_node(db, self.children[2].clone())
27191 }
27192}
27193#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27194pub struct TerminalTraitPtr(pub SyntaxStablePtrId);
27195impl TerminalTraitPtr {}
27196impl TypedStablePtr for TerminalTraitPtr {
27197 type SyntaxNode = TerminalTrait;
27198 fn untyped(&self) -> SyntaxStablePtrId {
27199 self.0
27200 }
27201 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalTrait {
27202 TerminalTrait::from_syntax_node(db, self.0.lookup(db))
27203 }
27204}
27205impl From<TerminalTraitPtr> for SyntaxStablePtrId {
27206 fn from(ptr: TerminalTraitPtr) -> Self {
27207 ptr.untyped()
27208 }
27209}
27210#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27211pub struct TerminalTraitGreen(pub GreenId);
27212impl TypedSyntaxNode for TerminalTrait {
27213 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalTrait);
27214 type StablePtr = TerminalTraitPtr;
27215 type Green = TerminalTraitGreen;
27216 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27217 TerminalTraitGreen(
27218 Arc::new(GreenNode {
27219 kind: SyntaxKind::TerminalTrait,
27220 details: GreenNodeDetails::Node {
27221 children: vec![
27222 Trivia::missing(db).0,
27223 TokenTrait::missing(db).0,
27224 Trivia::missing(db).0,
27225 ],
27226 width: TextWidth::default(),
27227 },
27228 })
27229 .intern(db),
27230 )
27231 }
27232 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27233 let kind = node.kind(db);
27234 assert_eq!(
27235 kind,
27236 SyntaxKind::TerminalTrait,
27237 "Unexpected SyntaxKind {:?}. Expected {:?}.",
27238 kind,
27239 SyntaxKind::TerminalTrait
27240 );
27241 let children = db.get_children(node.clone());
27242 Self { node, children }
27243 }
27244 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27245 let kind = node.kind(db);
27246 if kind == SyntaxKind::TerminalTrait {
27247 Some(Self::from_syntax_node(db, node))
27248 } else {
27249 None
27250 }
27251 }
27252 fn as_syntax_node(&self) -> SyntaxNode {
27253 self.node.clone()
27254 }
27255 fn stable_ptr(&self) -> Self::StablePtr {
27256 TerminalTraitPtr(self.node.0.stable_ptr)
27257 }
27258}
27259impl From<&TerminalTrait> for SyntaxStablePtrId {
27260 fn from(node: &TerminalTrait) -> Self {
27261 node.stable_ptr().untyped()
27262 }
27263}
27264#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27265pub struct TokenTrue {
27266 node: SyntaxNode,
27267}
27268impl Token for TokenTrue {
27269 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
27270 TokenTrueGreen(
27271 Arc::new(GreenNode {
27272 kind: SyntaxKind::TokenTrue,
27273 details: GreenNodeDetails::Token(text),
27274 })
27275 .intern(db),
27276 )
27277 }
27278 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27279 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
27280 .clone()
27281 }
27282}
27283#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27284pub struct TokenTruePtr(pub SyntaxStablePtrId);
27285impl TypedStablePtr for TokenTruePtr {
27286 type SyntaxNode = TokenTrue;
27287 fn untyped(&self) -> SyntaxStablePtrId {
27288 self.0
27289 }
27290 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenTrue {
27291 TokenTrue::from_syntax_node(db, self.0.lookup(db))
27292 }
27293}
27294impl From<TokenTruePtr> for SyntaxStablePtrId {
27295 fn from(ptr: TokenTruePtr) -> Self {
27296 ptr.untyped()
27297 }
27298}
27299#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27300pub struct TokenTrueGreen(pub GreenId);
27301impl TokenTrueGreen {
27302 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27303 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
27304 }
27305}
27306impl TypedSyntaxNode for TokenTrue {
27307 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenTrue);
27308 type StablePtr = TokenTruePtr;
27309 type Green = TokenTrueGreen;
27310 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27311 TokenTrueGreen(
27312 Arc::new(GreenNode {
27313 kind: SyntaxKind::TokenMissing,
27314 details: GreenNodeDetails::Token("".into()),
27315 })
27316 .intern(db),
27317 )
27318 }
27319 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27320 match node.0.green.lookup_intern(db).details {
27321 GreenNodeDetails::Token(_) => Self { node },
27322 GreenNodeDetails::Node { .. } => {
27323 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenTrue)
27324 }
27325 }
27326 }
27327 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27328 match node.0.green.lookup_intern(db).details {
27329 GreenNodeDetails::Token(_) => Some(Self { node }),
27330 GreenNodeDetails::Node { .. } => None,
27331 }
27332 }
27333 fn as_syntax_node(&self) -> SyntaxNode {
27334 self.node.clone()
27335 }
27336 fn stable_ptr(&self) -> Self::StablePtr {
27337 TokenTruePtr(self.node.0.stable_ptr)
27338 }
27339}
27340impl From<&TokenTrue> for SyntaxStablePtrId {
27341 fn from(node: &TokenTrue) -> Self {
27342 node.stable_ptr().untyped()
27343 }
27344}
27345#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27346pub struct TerminalTrue {
27347 node: SyntaxNode,
27348 children: Arc<[SyntaxNode]>,
27349}
27350impl Terminal for TerminalTrue {
27351 const KIND: SyntaxKind = SyntaxKind::TerminalTrue;
27352 type TokenType = TokenTrue;
27353 fn new_green(
27354 db: &dyn SyntaxGroup,
27355 leading_trivia: TriviaGreen,
27356 token: <<TerminalTrue as Terminal>::TokenType as TypedSyntaxNode>::Green,
27357 trailing_trivia: TriviaGreen,
27358 ) -> Self::Green {
27359 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
27360 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
27361 TerminalTrueGreen(
27362 Arc::new(GreenNode {
27363 kind: SyntaxKind::TerminalTrue,
27364 details: GreenNodeDetails::Node { children, width },
27365 })
27366 .intern(db),
27367 )
27368 }
27369 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27370 self.token(db).text(db)
27371 }
27372}
27373impl TerminalTrue {
27374 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27375 Trivia::from_syntax_node(db, self.children[0].clone())
27376 }
27377 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenTrue {
27378 TokenTrue::from_syntax_node(db, self.children[1].clone())
27379 }
27380 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27381 Trivia::from_syntax_node(db, self.children[2].clone())
27382 }
27383}
27384#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27385pub struct TerminalTruePtr(pub SyntaxStablePtrId);
27386impl TerminalTruePtr {}
27387impl TypedStablePtr for TerminalTruePtr {
27388 type SyntaxNode = TerminalTrue;
27389 fn untyped(&self) -> SyntaxStablePtrId {
27390 self.0
27391 }
27392 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalTrue {
27393 TerminalTrue::from_syntax_node(db, self.0.lookup(db))
27394 }
27395}
27396impl From<TerminalTruePtr> for SyntaxStablePtrId {
27397 fn from(ptr: TerminalTruePtr) -> Self {
27398 ptr.untyped()
27399 }
27400}
27401#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27402pub struct TerminalTrueGreen(pub GreenId);
27403impl TypedSyntaxNode for TerminalTrue {
27404 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalTrue);
27405 type StablePtr = TerminalTruePtr;
27406 type Green = TerminalTrueGreen;
27407 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27408 TerminalTrueGreen(
27409 Arc::new(GreenNode {
27410 kind: SyntaxKind::TerminalTrue,
27411 details: GreenNodeDetails::Node {
27412 children: vec![
27413 Trivia::missing(db).0,
27414 TokenTrue::missing(db).0,
27415 Trivia::missing(db).0,
27416 ],
27417 width: TextWidth::default(),
27418 },
27419 })
27420 .intern(db),
27421 )
27422 }
27423 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27424 let kind = node.kind(db);
27425 assert_eq!(
27426 kind,
27427 SyntaxKind::TerminalTrue,
27428 "Unexpected SyntaxKind {:?}. Expected {:?}.",
27429 kind,
27430 SyntaxKind::TerminalTrue
27431 );
27432 let children = db.get_children(node.clone());
27433 Self { node, children }
27434 }
27435 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27436 let kind = node.kind(db);
27437 if kind == SyntaxKind::TerminalTrue { Some(Self::from_syntax_node(db, node)) } else { None }
27438 }
27439 fn as_syntax_node(&self) -> SyntaxNode {
27440 self.node.clone()
27441 }
27442 fn stable_ptr(&self) -> Self::StablePtr {
27443 TerminalTruePtr(self.node.0.stable_ptr)
27444 }
27445}
27446impl From<&TerminalTrue> for SyntaxStablePtrId {
27447 fn from(node: &TerminalTrue) -> Self {
27448 node.stable_ptr().untyped()
27449 }
27450}
27451#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27452pub struct TokenType {
27453 node: SyntaxNode,
27454}
27455impl Token for TokenType {
27456 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
27457 TokenTypeGreen(
27458 Arc::new(GreenNode {
27459 kind: SyntaxKind::TokenType,
27460 details: GreenNodeDetails::Token(text),
27461 })
27462 .intern(db),
27463 )
27464 }
27465 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27466 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
27467 .clone()
27468 }
27469}
27470#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27471pub struct TokenTypePtr(pub SyntaxStablePtrId);
27472impl TypedStablePtr for TokenTypePtr {
27473 type SyntaxNode = TokenType;
27474 fn untyped(&self) -> SyntaxStablePtrId {
27475 self.0
27476 }
27477 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenType {
27478 TokenType::from_syntax_node(db, self.0.lookup(db))
27479 }
27480}
27481impl From<TokenTypePtr> for SyntaxStablePtrId {
27482 fn from(ptr: TokenTypePtr) -> Self {
27483 ptr.untyped()
27484 }
27485}
27486#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27487pub struct TokenTypeGreen(pub GreenId);
27488impl TokenTypeGreen {
27489 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27490 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
27491 }
27492}
27493impl TypedSyntaxNode for TokenType {
27494 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenType);
27495 type StablePtr = TokenTypePtr;
27496 type Green = TokenTypeGreen;
27497 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27498 TokenTypeGreen(
27499 Arc::new(GreenNode {
27500 kind: SyntaxKind::TokenMissing,
27501 details: GreenNodeDetails::Token("".into()),
27502 })
27503 .intern(db),
27504 )
27505 }
27506 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27507 match node.0.green.lookup_intern(db).details {
27508 GreenNodeDetails::Token(_) => Self { node },
27509 GreenNodeDetails::Node { .. } => {
27510 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenType)
27511 }
27512 }
27513 }
27514 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27515 match node.0.green.lookup_intern(db).details {
27516 GreenNodeDetails::Token(_) => Some(Self { node }),
27517 GreenNodeDetails::Node { .. } => None,
27518 }
27519 }
27520 fn as_syntax_node(&self) -> SyntaxNode {
27521 self.node.clone()
27522 }
27523 fn stable_ptr(&self) -> Self::StablePtr {
27524 TokenTypePtr(self.node.0.stable_ptr)
27525 }
27526}
27527impl From<&TokenType> for SyntaxStablePtrId {
27528 fn from(node: &TokenType) -> Self {
27529 node.stable_ptr().untyped()
27530 }
27531}
27532#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27533pub struct TerminalType {
27534 node: SyntaxNode,
27535 children: Arc<[SyntaxNode]>,
27536}
27537impl Terminal for TerminalType {
27538 const KIND: SyntaxKind = SyntaxKind::TerminalType;
27539 type TokenType = TokenType;
27540 fn new_green(
27541 db: &dyn SyntaxGroup,
27542 leading_trivia: TriviaGreen,
27543 token: <<TerminalType as Terminal>::TokenType as TypedSyntaxNode>::Green,
27544 trailing_trivia: TriviaGreen,
27545 ) -> Self::Green {
27546 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
27547 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
27548 TerminalTypeGreen(
27549 Arc::new(GreenNode {
27550 kind: SyntaxKind::TerminalType,
27551 details: GreenNodeDetails::Node { children, width },
27552 })
27553 .intern(db),
27554 )
27555 }
27556 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27557 self.token(db).text(db)
27558 }
27559}
27560impl TerminalType {
27561 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27562 Trivia::from_syntax_node(db, self.children[0].clone())
27563 }
27564 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenType {
27565 TokenType::from_syntax_node(db, self.children[1].clone())
27566 }
27567 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27568 Trivia::from_syntax_node(db, self.children[2].clone())
27569 }
27570}
27571#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27572pub struct TerminalTypePtr(pub SyntaxStablePtrId);
27573impl TerminalTypePtr {}
27574impl TypedStablePtr for TerminalTypePtr {
27575 type SyntaxNode = TerminalType;
27576 fn untyped(&self) -> SyntaxStablePtrId {
27577 self.0
27578 }
27579 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalType {
27580 TerminalType::from_syntax_node(db, self.0.lookup(db))
27581 }
27582}
27583impl From<TerminalTypePtr> for SyntaxStablePtrId {
27584 fn from(ptr: TerminalTypePtr) -> Self {
27585 ptr.untyped()
27586 }
27587}
27588#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27589pub struct TerminalTypeGreen(pub GreenId);
27590impl TypedSyntaxNode for TerminalType {
27591 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalType);
27592 type StablePtr = TerminalTypePtr;
27593 type Green = TerminalTypeGreen;
27594 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27595 TerminalTypeGreen(
27596 Arc::new(GreenNode {
27597 kind: SyntaxKind::TerminalType,
27598 details: GreenNodeDetails::Node {
27599 children: vec![
27600 Trivia::missing(db).0,
27601 TokenType::missing(db).0,
27602 Trivia::missing(db).0,
27603 ],
27604 width: TextWidth::default(),
27605 },
27606 })
27607 .intern(db),
27608 )
27609 }
27610 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27611 let kind = node.kind(db);
27612 assert_eq!(
27613 kind,
27614 SyntaxKind::TerminalType,
27615 "Unexpected SyntaxKind {:?}. Expected {:?}.",
27616 kind,
27617 SyntaxKind::TerminalType
27618 );
27619 let children = db.get_children(node.clone());
27620 Self { node, children }
27621 }
27622 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27623 let kind = node.kind(db);
27624 if kind == SyntaxKind::TerminalType { Some(Self::from_syntax_node(db, node)) } else { None }
27625 }
27626 fn as_syntax_node(&self) -> SyntaxNode {
27627 self.node.clone()
27628 }
27629 fn stable_ptr(&self) -> Self::StablePtr {
27630 TerminalTypePtr(self.node.0.stable_ptr)
27631 }
27632}
27633impl From<&TerminalType> for SyntaxStablePtrId {
27634 fn from(node: &TerminalType) -> Self {
27635 node.stable_ptr().untyped()
27636 }
27637}
27638#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27639pub struct TokenUse {
27640 node: SyntaxNode,
27641}
27642impl Token for TokenUse {
27643 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
27644 TokenUseGreen(
27645 Arc::new(GreenNode {
27646 kind: SyntaxKind::TokenUse,
27647 details: GreenNodeDetails::Token(text),
27648 })
27649 .intern(db),
27650 )
27651 }
27652 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27653 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
27654 .clone()
27655 }
27656}
27657#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27658pub struct TokenUsePtr(pub SyntaxStablePtrId);
27659impl TypedStablePtr for TokenUsePtr {
27660 type SyntaxNode = TokenUse;
27661 fn untyped(&self) -> SyntaxStablePtrId {
27662 self.0
27663 }
27664 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenUse {
27665 TokenUse::from_syntax_node(db, self.0.lookup(db))
27666 }
27667}
27668impl From<TokenUsePtr> for SyntaxStablePtrId {
27669 fn from(ptr: TokenUsePtr) -> Self {
27670 ptr.untyped()
27671 }
27672}
27673#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27674pub struct TokenUseGreen(pub GreenId);
27675impl TokenUseGreen {
27676 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27677 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
27678 }
27679}
27680impl TypedSyntaxNode for TokenUse {
27681 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenUse);
27682 type StablePtr = TokenUsePtr;
27683 type Green = TokenUseGreen;
27684 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27685 TokenUseGreen(
27686 Arc::new(GreenNode {
27687 kind: SyntaxKind::TokenMissing,
27688 details: GreenNodeDetails::Token("".into()),
27689 })
27690 .intern(db),
27691 )
27692 }
27693 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27694 match node.0.green.lookup_intern(db).details {
27695 GreenNodeDetails::Token(_) => Self { node },
27696 GreenNodeDetails::Node { .. } => {
27697 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenUse)
27698 }
27699 }
27700 }
27701 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27702 match node.0.green.lookup_intern(db).details {
27703 GreenNodeDetails::Token(_) => Some(Self { node }),
27704 GreenNodeDetails::Node { .. } => None,
27705 }
27706 }
27707 fn as_syntax_node(&self) -> SyntaxNode {
27708 self.node.clone()
27709 }
27710 fn stable_ptr(&self) -> Self::StablePtr {
27711 TokenUsePtr(self.node.0.stable_ptr)
27712 }
27713}
27714impl From<&TokenUse> for SyntaxStablePtrId {
27715 fn from(node: &TokenUse) -> Self {
27716 node.stable_ptr().untyped()
27717 }
27718}
27719#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27720pub struct TerminalUse {
27721 node: SyntaxNode,
27722 children: Arc<[SyntaxNode]>,
27723}
27724impl Terminal for TerminalUse {
27725 const KIND: SyntaxKind = SyntaxKind::TerminalUse;
27726 type TokenType = TokenUse;
27727 fn new_green(
27728 db: &dyn SyntaxGroup,
27729 leading_trivia: TriviaGreen,
27730 token: <<TerminalUse as Terminal>::TokenType as TypedSyntaxNode>::Green,
27731 trailing_trivia: TriviaGreen,
27732 ) -> Self::Green {
27733 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
27734 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
27735 TerminalUseGreen(
27736 Arc::new(GreenNode {
27737 kind: SyntaxKind::TerminalUse,
27738 details: GreenNodeDetails::Node { children, width },
27739 })
27740 .intern(db),
27741 )
27742 }
27743 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27744 self.token(db).text(db)
27745 }
27746}
27747impl TerminalUse {
27748 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27749 Trivia::from_syntax_node(db, self.children[0].clone())
27750 }
27751 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenUse {
27752 TokenUse::from_syntax_node(db, self.children[1].clone())
27753 }
27754 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27755 Trivia::from_syntax_node(db, self.children[2].clone())
27756 }
27757}
27758#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27759pub struct TerminalUsePtr(pub SyntaxStablePtrId);
27760impl TerminalUsePtr {}
27761impl TypedStablePtr for TerminalUsePtr {
27762 type SyntaxNode = TerminalUse;
27763 fn untyped(&self) -> SyntaxStablePtrId {
27764 self.0
27765 }
27766 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalUse {
27767 TerminalUse::from_syntax_node(db, self.0.lookup(db))
27768 }
27769}
27770impl From<TerminalUsePtr> for SyntaxStablePtrId {
27771 fn from(ptr: TerminalUsePtr) -> Self {
27772 ptr.untyped()
27773 }
27774}
27775#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27776pub struct TerminalUseGreen(pub GreenId);
27777impl TypedSyntaxNode for TerminalUse {
27778 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalUse);
27779 type StablePtr = TerminalUsePtr;
27780 type Green = TerminalUseGreen;
27781 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27782 TerminalUseGreen(
27783 Arc::new(GreenNode {
27784 kind: SyntaxKind::TerminalUse,
27785 details: GreenNodeDetails::Node {
27786 children: vec![
27787 Trivia::missing(db).0,
27788 TokenUse::missing(db).0,
27789 Trivia::missing(db).0,
27790 ],
27791 width: TextWidth::default(),
27792 },
27793 })
27794 .intern(db),
27795 )
27796 }
27797 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27798 let kind = node.kind(db);
27799 assert_eq!(
27800 kind,
27801 SyntaxKind::TerminalUse,
27802 "Unexpected SyntaxKind {:?}. Expected {:?}.",
27803 kind,
27804 SyntaxKind::TerminalUse
27805 );
27806 let children = db.get_children(node.clone());
27807 Self { node, children }
27808 }
27809 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27810 let kind = node.kind(db);
27811 if kind == SyntaxKind::TerminalUse { Some(Self::from_syntax_node(db, node)) } else { None }
27812 }
27813 fn as_syntax_node(&self) -> SyntaxNode {
27814 self.node.clone()
27815 }
27816 fn stable_ptr(&self) -> Self::StablePtr {
27817 TerminalUsePtr(self.node.0.stable_ptr)
27818 }
27819}
27820impl From<&TerminalUse> for SyntaxStablePtrId {
27821 fn from(node: &TerminalUse) -> Self {
27822 node.stable_ptr().untyped()
27823 }
27824}
27825#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27826pub struct TokenPub {
27827 node: SyntaxNode,
27828}
27829impl Token for TokenPub {
27830 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
27831 TokenPubGreen(
27832 Arc::new(GreenNode {
27833 kind: SyntaxKind::TokenPub,
27834 details: GreenNodeDetails::Token(text),
27835 })
27836 .intern(db),
27837 )
27838 }
27839 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27840 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
27841 .clone()
27842 }
27843}
27844#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27845pub struct TokenPubPtr(pub SyntaxStablePtrId);
27846impl TypedStablePtr for TokenPubPtr {
27847 type SyntaxNode = TokenPub;
27848 fn untyped(&self) -> SyntaxStablePtrId {
27849 self.0
27850 }
27851 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenPub {
27852 TokenPub::from_syntax_node(db, self.0.lookup(db))
27853 }
27854}
27855impl From<TokenPubPtr> for SyntaxStablePtrId {
27856 fn from(ptr: TokenPubPtr) -> Self {
27857 ptr.untyped()
27858 }
27859}
27860#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27861pub struct TokenPubGreen(pub GreenId);
27862impl TokenPubGreen {
27863 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27864 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
27865 }
27866}
27867impl TypedSyntaxNode for TokenPub {
27868 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenPub);
27869 type StablePtr = TokenPubPtr;
27870 type Green = TokenPubGreen;
27871 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27872 TokenPubGreen(
27873 Arc::new(GreenNode {
27874 kind: SyntaxKind::TokenMissing,
27875 details: GreenNodeDetails::Token("".into()),
27876 })
27877 .intern(db),
27878 )
27879 }
27880 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27881 match node.0.green.lookup_intern(db).details {
27882 GreenNodeDetails::Token(_) => Self { node },
27883 GreenNodeDetails::Node { .. } => {
27884 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenPub)
27885 }
27886 }
27887 }
27888 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27889 match node.0.green.lookup_intern(db).details {
27890 GreenNodeDetails::Token(_) => Some(Self { node }),
27891 GreenNodeDetails::Node { .. } => None,
27892 }
27893 }
27894 fn as_syntax_node(&self) -> SyntaxNode {
27895 self.node.clone()
27896 }
27897 fn stable_ptr(&self) -> Self::StablePtr {
27898 TokenPubPtr(self.node.0.stable_ptr)
27899 }
27900}
27901impl From<&TokenPub> for SyntaxStablePtrId {
27902 fn from(node: &TokenPub) -> Self {
27903 node.stable_ptr().untyped()
27904 }
27905}
27906#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27907pub struct TerminalPub {
27908 node: SyntaxNode,
27909 children: Arc<[SyntaxNode]>,
27910}
27911impl Terminal for TerminalPub {
27912 const KIND: SyntaxKind = SyntaxKind::TerminalPub;
27913 type TokenType = TokenPub;
27914 fn new_green(
27915 db: &dyn SyntaxGroup,
27916 leading_trivia: TriviaGreen,
27917 token: <<TerminalPub as Terminal>::TokenType as TypedSyntaxNode>::Green,
27918 trailing_trivia: TriviaGreen,
27919 ) -> Self::Green {
27920 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
27921 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
27922 TerminalPubGreen(
27923 Arc::new(GreenNode {
27924 kind: SyntaxKind::TerminalPub,
27925 details: GreenNodeDetails::Node { children, width },
27926 })
27927 .intern(db),
27928 )
27929 }
27930 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27931 self.token(db).text(db)
27932 }
27933}
27934impl TerminalPub {
27935 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27936 Trivia::from_syntax_node(db, self.children[0].clone())
27937 }
27938 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenPub {
27939 TokenPub::from_syntax_node(db, self.children[1].clone())
27940 }
27941 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27942 Trivia::from_syntax_node(db, self.children[2].clone())
27943 }
27944}
27945#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27946pub struct TerminalPubPtr(pub SyntaxStablePtrId);
27947impl TerminalPubPtr {}
27948impl TypedStablePtr for TerminalPubPtr {
27949 type SyntaxNode = TerminalPub;
27950 fn untyped(&self) -> SyntaxStablePtrId {
27951 self.0
27952 }
27953 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalPub {
27954 TerminalPub::from_syntax_node(db, self.0.lookup(db))
27955 }
27956}
27957impl From<TerminalPubPtr> for SyntaxStablePtrId {
27958 fn from(ptr: TerminalPubPtr) -> Self {
27959 ptr.untyped()
27960 }
27961}
27962#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27963pub struct TerminalPubGreen(pub GreenId);
27964impl TypedSyntaxNode for TerminalPub {
27965 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalPub);
27966 type StablePtr = TerminalPubPtr;
27967 type Green = TerminalPubGreen;
27968 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27969 TerminalPubGreen(
27970 Arc::new(GreenNode {
27971 kind: SyntaxKind::TerminalPub,
27972 details: GreenNodeDetails::Node {
27973 children: vec![
27974 Trivia::missing(db).0,
27975 TokenPub::missing(db).0,
27976 Trivia::missing(db).0,
27977 ],
27978 width: TextWidth::default(),
27979 },
27980 })
27981 .intern(db),
27982 )
27983 }
27984 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27985 let kind = node.kind(db);
27986 assert_eq!(
27987 kind,
27988 SyntaxKind::TerminalPub,
27989 "Unexpected SyntaxKind {:?}. Expected {:?}.",
27990 kind,
27991 SyntaxKind::TerminalPub
27992 );
27993 let children = db.get_children(node.clone());
27994 Self { node, children }
27995 }
27996 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27997 let kind = node.kind(db);
27998 if kind == SyntaxKind::TerminalPub { Some(Self::from_syntax_node(db, node)) } else { None }
27999 }
28000 fn as_syntax_node(&self) -> SyntaxNode {
28001 self.node.clone()
28002 }
28003 fn stable_ptr(&self) -> Self::StablePtr {
28004 TerminalPubPtr(self.node.0.stable_ptr)
28005 }
28006}
28007impl From<&TerminalPub> for SyntaxStablePtrId {
28008 fn from(node: &TerminalPub) -> Self {
28009 node.stable_ptr().untyped()
28010 }
28011}
28012#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28013pub struct TokenAnd {
28014 node: SyntaxNode,
28015}
28016impl Token for TokenAnd {
28017 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
28018 TokenAndGreen(
28019 Arc::new(GreenNode {
28020 kind: SyntaxKind::TokenAnd,
28021 details: GreenNodeDetails::Token(text),
28022 })
28023 .intern(db),
28024 )
28025 }
28026 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28027 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
28028 .clone()
28029 }
28030}
28031#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28032pub struct TokenAndPtr(pub SyntaxStablePtrId);
28033impl TypedStablePtr for TokenAndPtr {
28034 type SyntaxNode = TokenAnd;
28035 fn untyped(&self) -> SyntaxStablePtrId {
28036 self.0
28037 }
28038 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenAnd {
28039 TokenAnd::from_syntax_node(db, self.0.lookup(db))
28040 }
28041}
28042impl From<TokenAndPtr> for SyntaxStablePtrId {
28043 fn from(ptr: TokenAndPtr) -> Self {
28044 ptr.untyped()
28045 }
28046}
28047#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28048pub struct TokenAndGreen(pub GreenId);
28049impl TokenAndGreen {
28050 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28051 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
28052 }
28053}
28054impl TypedSyntaxNode for TokenAnd {
28055 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenAnd);
28056 type StablePtr = TokenAndPtr;
28057 type Green = TokenAndGreen;
28058 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28059 TokenAndGreen(
28060 Arc::new(GreenNode {
28061 kind: SyntaxKind::TokenMissing,
28062 details: GreenNodeDetails::Token("".into()),
28063 })
28064 .intern(db),
28065 )
28066 }
28067 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28068 match node.0.green.lookup_intern(db).details {
28069 GreenNodeDetails::Token(_) => Self { node },
28070 GreenNodeDetails::Node { .. } => {
28071 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenAnd)
28072 }
28073 }
28074 }
28075 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28076 match node.0.green.lookup_intern(db).details {
28077 GreenNodeDetails::Token(_) => Some(Self { node }),
28078 GreenNodeDetails::Node { .. } => None,
28079 }
28080 }
28081 fn as_syntax_node(&self) -> SyntaxNode {
28082 self.node.clone()
28083 }
28084 fn stable_ptr(&self) -> Self::StablePtr {
28085 TokenAndPtr(self.node.0.stable_ptr)
28086 }
28087}
28088impl From<&TokenAnd> for SyntaxStablePtrId {
28089 fn from(node: &TokenAnd) -> Self {
28090 node.stable_ptr().untyped()
28091 }
28092}
28093#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28094pub struct TerminalAnd {
28095 node: SyntaxNode,
28096 children: Arc<[SyntaxNode]>,
28097}
28098impl Terminal for TerminalAnd {
28099 const KIND: SyntaxKind = SyntaxKind::TerminalAnd;
28100 type TokenType = TokenAnd;
28101 fn new_green(
28102 db: &dyn SyntaxGroup,
28103 leading_trivia: TriviaGreen,
28104 token: <<TerminalAnd as Terminal>::TokenType as TypedSyntaxNode>::Green,
28105 trailing_trivia: TriviaGreen,
28106 ) -> Self::Green {
28107 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
28108 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
28109 TerminalAndGreen(
28110 Arc::new(GreenNode {
28111 kind: SyntaxKind::TerminalAnd,
28112 details: GreenNodeDetails::Node { children, width },
28113 })
28114 .intern(db),
28115 )
28116 }
28117 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28118 self.token(db).text(db)
28119 }
28120}
28121impl TerminalAnd {
28122 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28123 Trivia::from_syntax_node(db, self.children[0].clone())
28124 }
28125 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenAnd {
28126 TokenAnd::from_syntax_node(db, self.children[1].clone())
28127 }
28128 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28129 Trivia::from_syntax_node(db, self.children[2].clone())
28130 }
28131}
28132#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28133pub struct TerminalAndPtr(pub SyntaxStablePtrId);
28134impl TerminalAndPtr {}
28135impl TypedStablePtr for TerminalAndPtr {
28136 type SyntaxNode = TerminalAnd;
28137 fn untyped(&self) -> SyntaxStablePtrId {
28138 self.0
28139 }
28140 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalAnd {
28141 TerminalAnd::from_syntax_node(db, self.0.lookup(db))
28142 }
28143}
28144impl From<TerminalAndPtr> for SyntaxStablePtrId {
28145 fn from(ptr: TerminalAndPtr) -> Self {
28146 ptr.untyped()
28147 }
28148}
28149#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28150pub struct TerminalAndGreen(pub GreenId);
28151impl TypedSyntaxNode for TerminalAnd {
28152 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalAnd);
28153 type StablePtr = TerminalAndPtr;
28154 type Green = TerminalAndGreen;
28155 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28156 TerminalAndGreen(
28157 Arc::new(GreenNode {
28158 kind: SyntaxKind::TerminalAnd,
28159 details: GreenNodeDetails::Node {
28160 children: vec![
28161 Trivia::missing(db).0,
28162 TokenAnd::missing(db).0,
28163 Trivia::missing(db).0,
28164 ],
28165 width: TextWidth::default(),
28166 },
28167 })
28168 .intern(db),
28169 )
28170 }
28171 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28172 let kind = node.kind(db);
28173 assert_eq!(
28174 kind,
28175 SyntaxKind::TerminalAnd,
28176 "Unexpected SyntaxKind {:?}. Expected {:?}.",
28177 kind,
28178 SyntaxKind::TerminalAnd
28179 );
28180 let children = db.get_children(node.clone());
28181 Self { node, children }
28182 }
28183 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28184 let kind = node.kind(db);
28185 if kind == SyntaxKind::TerminalAnd { Some(Self::from_syntax_node(db, node)) } else { None }
28186 }
28187 fn as_syntax_node(&self) -> SyntaxNode {
28188 self.node.clone()
28189 }
28190 fn stable_ptr(&self) -> Self::StablePtr {
28191 TerminalAndPtr(self.node.0.stable_ptr)
28192 }
28193}
28194impl From<&TerminalAnd> for SyntaxStablePtrId {
28195 fn from(node: &TerminalAnd) -> Self {
28196 node.stable_ptr().untyped()
28197 }
28198}
28199#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28200pub struct TokenAndAnd {
28201 node: SyntaxNode,
28202}
28203impl Token for TokenAndAnd {
28204 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
28205 TokenAndAndGreen(
28206 Arc::new(GreenNode {
28207 kind: SyntaxKind::TokenAndAnd,
28208 details: GreenNodeDetails::Token(text),
28209 })
28210 .intern(db),
28211 )
28212 }
28213 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28214 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
28215 .clone()
28216 }
28217}
28218#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28219pub struct TokenAndAndPtr(pub SyntaxStablePtrId);
28220impl TypedStablePtr for TokenAndAndPtr {
28221 type SyntaxNode = TokenAndAnd;
28222 fn untyped(&self) -> SyntaxStablePtrId {
28223 self.0
28224 }
28225 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenAndAnd {
28226 TokenAndAnd::from_syntax_node(db, self.0.lookup(db))
28227 }
28228}
28229impl From<TokenAndAndPtr> for SyntaxStablePtrId {
28230 fn from(ptr: TokenAndAndPtr) -> Self {
28231 ptr.untyped()
28232 }
28233}
28234#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28235pub struct TokenAndAndGreen(pub GreenId);
28236impl TokenAndAndGreen {
28237 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28238 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
28239 }
28240}
28241impl TypedSyntaxNode for TokenAndAnd {
28242 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenAndAnd);
28243 type StablePtr = TokenAndAndPtr;
28244 type Green = TokenAndAndGreen;
28245 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28246 TokenAndAndGreen(
28247 Arc::new(GreenNode {
28248 kind: SyntaxKind::TokenMissing,
28249 details: GreenNodeDetails::Token("".into()),
28250 })
28251 .intern(db),
28252 )
28253 }
28254 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28255 match node.0.green.lookup_intern(db).details {
28256 GreenNodeDetails::Token(_) => Self { node },
28257 GreenNodeDetails::Node { .. } => {
28258 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenAndAnd)
28259 }
28260 }
28261 }
28262 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28263 match node.0.green.lookup_intern(db).details {
28264 GreenNodeDetails::Token(_) => Some(Self { node }),
28265 GreenNodeDetails::Node { .. } => None,
28266 }
28267 }
28268 fn as_syntax_node(&self) -> SyntaxNode {
28269 self.node.clone()
28270 }
28271 fn stable_ptr(&self) -> Self::StablePtr {
28272 TokenAndAndPtr(self.node.0.stable_ptr)
28273 }
28274}
28275impl From<&TokenAndAnd> for SyntaxStablePtrId {
28276 fn from(node: &TokenAndAnd) -> Self {
28277 node.stable_ptr().untyped()
28278 }
28279}
28280#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28281pub struct TerminalAndAnd {
28282 node: SyntaxNode,
28283 children: Arc<[SyntaxNode]>,
28284}
28285impl Terminal for TerminalAndAnd {
28286 const KIND: SyntaxKind = SyntaxKind::TerminalAndAnd;
28287 type TokenType = TokenAndAnd;
28288 fn new_green(
28289 db: &dyn SyntaxGroup,
28290 leading_trivia: TriviaGreen,
28291 token: <<TerminalAndAnd as Terminal>::TokenType as TypedSyntaxNode>::Green,
28292 trailing_trivia: TriviaGreen,
28293 ) -> Self::Green {
28294 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
28295 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
28296 TerminalAndAndGreen(
28297 Arc::new(GreenNode {
28298 kind: SyntaxKind::TerminalAndAnd,
28299 details: GreenNodeDetails::Node { children, width },
28300 })
28301 .intern(db),
28302 )
28303 }
28304 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28305 self.token(db).text(db)
28306 }
28307}
28308impl TerminalAndAnd {
28309 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28310 Trivia::from_syntax_node(db, self.children[0].clone())
28311 }
28312 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenAndAnd {
28313 TokenAndAnd::from_syntax_node(db, self.children[1].clone())
28314 }
28315 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28316 Trivia::from_syntax_node(db, self.children[2].clone())
28317 }
28318}
28319#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28320pub struct TerminalAndAndPtr(pub SyntaxStablePtrId);
28321impl TerminalAndAndPtr {}
28322impl TypedStablePtr for TerminalAndAndPtr {
28323 type SyntaxNode = TerminalAndAnd;
28324 fn untyped(&self) -> SyntaxStablePtrId {
28325 self.0
28326 }
28327 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalAndAnd {
28328 TerminalAndAnd::from_syntax_node(db, self.0.lookup(db))
28329 }
28330}
28331impl From<TerminalAndAndPtr> for SyntaxStablePtrId {
28332 fn from(ptr: TerminalAndAndPtr) -> Self {
28333 ptr.untyped()
28334 }
28335}
28336#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28337pub struct TerminalAndAndGreen(pub GreenId);
28338impl TypedSyntaxNode for TerminalAndAnd {
28339 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalAndAnd);
28340 type StablePtr = TerminalAndAndPtr;
28341 type Green = TerminalAndAndGreen;
28342 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28343 TerminalAndAndGreen(
28344 Arc::new(GreenNode {
28345 kind: SyntaxKind::TerminalAndAnd,
28346 details: GreenNodeDetails::Node {
28347 children: vec![
28348 Trivia::missing(db).0,
28349 TokenAndAnd::missing(db).0,
28350 Trivia::missing(db).0,
28351 ],
28352 width: TextWidth::default(),
28353 },
28354 })
28355 .intern(db),
28356 )
28357 }
28358 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28359 let kind = node.kind(db);
28360 assert_eq!(
28361 kind,
28362 SyntaxKind::TerminalAndAnd,
28363 "Unexpected SyntaxKind {:?}. Expected {:?}.",
28364 kind,
28365 SyntaxKind::TerminalAndAnd
28366 );
28367 let children = db.get_children(node.clone());
28368 Self { node, children }
28369 }
28370 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28371 let kind = node.kind(db);
28372 if kind == SyntaxKind::TerminalAndAnd {
28373 Some(Self::from_syntax_node(db, node))
28374 } else {
28375 None
28376 }
28377 }
28378 fn as_syntax_node(&self) -> SyntaxNode {
28379 self.node.clone()
28380 }
28381 fn stable_ptr(&self) -> Self::StablePtr {
28382 TerminalAndAndPtr(self.node.0.stable_ptr)
28383 }
28384}
28385impl From<&TerminalAndAnd> for SyntaxStablePtrId {
28386 fn from(node: &TerminalAndAnd) -> Self {
28387 node.stable_ptr().untyped()
28388 }
28389}
28390#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28391pub struct TokenArrow {
28392 node: SyntaxNode,
28393}
28394impl Token for TokenArrow {
28395 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
28396 TokenArrowGreen(
28397 Arc::new(GreenNode {
28398 kind: SyntaxKind::TokenArrow,
28399 details: GreenNodeDetails::Token(text),
28400 })
28401 .intern(db),
28402 )
28403 }
28404 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28405 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
28406 .clone()
28407 }
28408}
28409#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28410pub struct TokenArrowPtr(pub SyntaxStablePtrId);
28411impl TypedStablePtr for TokenArrowPtr {
28412 type SyntaxNode = TokenArrow;
28413 fn untyped(&self) -> SyntaxStablePtrId {
28414 self.0
28415 }
28416 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenArrow {
28417 TokenArrow::from_syntax_node(db, self.0.lookup(db))
28418 }
28419}
28420impl From<TokenArrowPtr> for SyntaxStablePtrId {
28421 fn from(ptr: TokenArrowPtr) -> Self {
28422 ptr.untyped()
28423 }
28424}
28425#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28426pub struct TokenArrowGreen(pub GreenId);
28427impl TokenArrowGreen {
28428 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28429 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
28430 }
28431}
28432impl TypedSyntaxNode for TokenArrow {
28433 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenArrow);
28434 type StablePtr = TokenArrowPtr;
28435 type Green = TokenArrowGreen;
28436 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28437 TokenArrowGreen(
28438 Arc::new(GreenNode {
28439 kind: SyntaxKind::TokenMissing,
28440 details: GreenNodeDetails::Token("".into()),
28441 })
28442 .intern(db),
28443 )
28444 }
28445 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28446 match node.0.green.lookup_intern(db).details {
28447 GreenNodeDetails::Token(_) => Self { node },
28448 GreenNodeDetails::Node { .. } => {
28449 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenArrow)
28450 }
28451 }
28452 }
28453 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28454 match node.0.green.lookup_intern(db).details {
28455 GreenNodeDetails::Token(_) => Some(Self { node }),
28456 GreenNodeDetails::Node { .. } => None,
28457 }
28458 }
28459 fn as_syntax_node(&self) -> SyntaxNode {
28460 self.node.clone()
28461 }
28462 fn stable_ptr(&self) -> Self::StablePtr {
28463 TokenArrowPtr(self.node.0.stable_ptr)
28464 }
28465}
28466impl From<&TokenArrow> for SyntaxStablePtrId {
28467 fn from(node: &TokenArrow) -> Self {
28468 node.stable_ptr().untyped()
28469 }
28470}
28471#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28472pub struct TerminalArrow {
28473 node: SyntaxNode,
28474 children: Arc<[SyntaxNode]>,
28475}
28476impl Terminal for TerminalArrow {
28477 const KIND: SyntaxKind = SyntaxKind::TerminalArrow;
28478 type TokenType = TokenArrow;
28479 fn new_green(
28480 db: &dyn SyntaxGroup,
28481 leading_trivia: TriviaGreen,
28482 token: <<TerminalArrow as Terminal>::TokenType as TypedSyntaxNode>::Green,
28483 trailing_trivia: TriviaGreen,
28484 ) -> Self::Green {
28485 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
28486 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
28487 TerminalArrowGreen(
28488 Arc::new(GreenNode {
28489 kind: SyntaxKind::TerminalArrow,
28490 details: GreenNodeDetails::Node { children, width },
28491 })
28492 .intern(db),
28493 )
28494 }
28495 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28496 self.token(db).text(db)
28497 }
28498}
28499impl TerminalArrow {
28500 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28501 Trivia::from_syntax_node(db, self.children[0].clone())
28502 }
28503 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenArrow {
28504 TokenArrow::from_syntax_node(db, self.children[1].clone())
28505 }
28506 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28507 Trivia::from_syntax_node(db, self.children[2].clone())
28508 }
28509}
28510#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28511pub struct TerminalArrowPtr(pub SyntaxStablePtrId);
28512impl TerminalArrowPtr {}
28513impl TypedStablePtr for TerminalArrowPtr {
28514 type SyntaxNode = TerminalArrow;
28515 fn untyped(&self) -> SyntaxStablePtrId {
28516 self.0
28517 }
28518 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalArrow {
28519 TerminalArrow::from_syntax_node(db, self.0.lookup(db))
28520 }
28521}
28522impl From<TerminalArrowPtr> for SyntaxStablePtrId {
28523 fn from(ptr: TerminalArrowPtr) -> Self {
28524 ptr.untyped()
28525 }
28526}
28527#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28528pub struct TerminalArrowGreen(pub GreenId);
28529impl TypedSyntaxNode for TerminalArrow {
28530 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalArrow);
28531 type StablePtr = TerminalArrowPtr;
28532 type Green = TerminalArrowGreen;
28533 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28534 TerminalArrowGreen(
28535 Arc::new(GreenNode {
28536 kind: SyntaxKind::TerminalArrow,
28537 details: GreenNodeDetails::Node {
28538 children: vec![
28539 Trivia::missing(db).0,
28540 TokenArrow::missing(db).0,
28541 Trivia::missing(db).0,
28542 ],
28543 width: TextWidth::default(),
28544 },
28545 })
28546 .intern(db),
28547 )
28548 }
28549 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28550 let kind = node.kind(db);
28551 assert_eq!(
28552 kind,
28553 SyntaxKind::TerminalArrow,
28554 "Unexpected SyntaxKind {:?}. Expected {:?}.",
28555 kind,
28556 SyntaxKind::TerminalArrow
28557 );
28558 let children = db.get_children(node.clone());
28559 Self { node, children }
28560 }
28561 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28562 let kind = node.kind(db);
28563 if kind == SyntaxKind::TerminalArrow {
28564 Some(Self::from_syntax_node(db, node))
28565 } else {
28566 None
28567 }
28568 }
28569 fn as_syntax_node(&self) -> SyntaxNode {
28570 self.node.clone()
28571 }
28572 fn stable_ptr(&self) -> Self::StablePtr {
28573 TerminalArrowPtr(self.node.0.stable_ptr)
28574 }
28575}
28576impl From<&TerminalArrow> for SyntaxStablePtrId {
28577 fn from(node: &TerminalArrow) -> Self {
28578 node.stable_ptr().untyped()
28579 }
28580}
28581#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28582pub struct TokenAt {
28583 node: SyntaxNode,
28584}
28585impl Token for TokenAt {
28586 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
28587 TokenAtGreen(
28588 Arc::new(GreenNode {
28589 kind: SyntaxKind::TokenAt,
28590 details: GreenNodeDetails::Token(text),
28591 })
28592 .intern(db),
28593 )
28594 }
28595 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28596 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
28597 .clone()
28598 }
28599}
28600#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28601pub struct TokenAtPtr(pub SyntaxStablePtrId);
28602impl TypedStablePtr for TokenAtPtr {
28603 type SyntaxNode = TokenAt;
28604 fn untyped(&self) -> SyntaxStablePtrId {
28605 self.0
28606 }
28607 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenAt {
28608 TokenAt::from_syntax_node(db, self.0.lookup(db))
28609 }
28610}
28611impl From<TokenAtPtr> for SyntaxStablePtrId {
28612 fn from(ptr: TokenAtPtr) -> Self {
28613 ptr.untyped()
28614 }
28615}
28616#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28617pub struct TokenAtGreen(pub GreenId);
28618impl TokenAtGreen {
28619 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28620 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
28621 }
28622}
28623impl TypedSyntaxNode for TokenAt {
28624 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenAt);
28625 type StablePtr = TokenAtPtr;
28626 type Green = TokenAtGreen;
28627 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28628 TokenAtGreen(
28629 Arc::new(GreenNode {
28630 kind: SyntaxKind::TokenMissing,
28631 details: GreenNodeDetails::Token("".into()),
28632 })
28633 .intern(db),
28634 )
28635 }
28636 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28637 match node.0.green.lookup_intern(db).details {
28638 GreenNodeDetails::Token(_) => Self { node },
28639 GreenNodeDetails::Node { .. } => {
28640 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenAt)
28641 }
28642 }
28643 }
28644 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28645 match node.0.green.lookup_intern(db).details {
28646 GreenNodeDetails::Token(_) => Some(Self { node }),
28647 GreenNodeDetails::Node { .. } => None,
28648 }
28649 }
28650 fn as_syntax_node(&self) -> SyntaxNode {
28651 self.node.clone()
28652 }
28653 fn stable_ptr(&self) -> Self::StablePtr {
28654 TokenAtPtr(self.node.0.stable_ptr)
28655 }
28656}
28657impl From<&TokenAt> for SyntaxStablePtrId {
28658 fn from(node: &TokenAt) -> Self {
28659 node.stable_ptr().untyped()
28660 }
28661}
28662#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28663pub struct TerminalAt {
28664 node: SyntaxNode,
28665 children: Arc<[SyntaxNode]>,
28666}
28667impl Terminal for TerminalAt {
28668 const KIND: SyntaxKind = SyntaxKind::TerminalAt;
28669 type TokenType = TokenAt;
28670 fn new_green(
28671 db: &dyn SyntaxGroup,
28672 leading_trivia: TriviaGreen,
28673 token: <<TerminalAt as Terminal>::TokenType as TypedSyntaxNode>::Green,
28674 trailing_trivia: TriviaGreen,
28675 ) -> Self::Green {
28676 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
28677 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
28678 TerminalAtGreen(
28679 Arc::new(GreenNode {
28680 kind: SyntaxKind::TerminalAt,
28681 details: GreenNodeDetails::Node { children, width },
28682 })
28683 .intern(db),
28684 )
28685 }
28686 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28687 self.token(db).text(db)
28688 }
28689}
28690impl TerminalAt {
28691 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28692 Trivia::from_syntax_node(db, self.children[0].clone())
28693 }
28694 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenAt {
28695 TokenAt::from_syntax_node(db, self.children[1].clone())
28696 }
28697 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28698 Trivia::from_syntax_node(db, self.children[2].clone())
28699 }
28700}
28701#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28702pub struct TerminalAtPtr(pub SyntaxStablePtrId);
28703impl TerminalAtPtr {}
28704impl TypedStablePtr for TerminalAtPtr {
28705 type SyntaxNode = TerminalAt;
28706 fn untyped(&self) -> SyntaxStablePtrId {
28707 self.0
28708 }
28709 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalAt {
28710 TerminalAt::from_syntax_node(db, self.0.lookup(db))
28711 }
28712}
28713impl From<TerminalAtPtr> for SyntaxStablePtrId {
28714 fn from(ptr: TerminalAtPtr) -> Self {
28715 ptr.untyped()
28716 }
28717}
28718#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28719pub struct TerminalAtGreen(pub GreenId);
28720impl TypedSyntaxNode for TerminalAt {
28721 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalAt);
28722 type StablePtr = TerminalAtPtr;
28723 type Green = TerminalAtGreen;
28724 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28725 TerminalAtGreen(
28726 Arc::new(GreenNode {
28727 kind: SyntaxKind::TerminalAt,
28728 details: GreenNodeDetails::Node {
28729 children: vec![
28730 Trivia::missing(db).0,
28731 TokenAt::missing(db).0,
28732 Trivia::missing(db).0,
28733 ],
28734 width: TextWidth::default(),
28735 },
28736 })
28737 .intern(db),
28738 )
28739 }
28740 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28741 let kind = node.kind(db);
28742 assert_eq!(
28743 kind,
28744 SyntaxKind::TerminalAt,
28745 "Unexpected SyntaxKind {:?}. Expected {:?}.",
28746 kind,
28747 SyntaxKind::TerminalAt
28748 );
28749 let children = db.get_children(node.clone());
28750 Self { node, children }
28751 }
28752 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28753 let kind = node.kind(db);
28754 if kind == SyntaxKind::TerminalAt { Some(Self::from_syntax_node(db, node)) } else { None }
28755 }
28756 fn as_syntax_node(&self) -> SyntaxNode {
28757 self.node.clone()
28758 }
28759 fn stable_ptr(&self) -> Self::StablePtr {
28760 TerminalAtPtr(self.node.0.stable_ptr)
28761 }
28762}
28763impl From<&TerminalAt> for SyntaxStablePtrId {
28764 fn from(node: &TerminalAt) -> Self {
28765 node.stable_ptr().untyped()
28766 }
28767}
28768#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28769pub struct TokenBadCharacters {
28770 node: SyntaxNode,
28771}
28772impl Token for TokenBadCharacters {
28773 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
28774 TokenBadCharactersGreen(
28775 Arc::new(GreenNode {
28776 kind: SyntaxKind::TokenBadCharacters,
28777 details: GreenNodeDetails::Token(text),
28778 })
28779 .intern(db),
28780 )
28781 }
28782 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28783 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
28784 .clone()
28785 }
28786}
28787#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28788pub struct TokenBadCharactersPtr(pub SyntaxStablePtrId);
28789impl TypedStablePtr for TokenBadCharactersPtr {
28790 type SyntaxNode = TokenBadCharacters;
28791 fn untyped(&self) -> SyntaxStablePtrId {
28792 self.0
28793 }
28794 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenBadCharacters {
28795 TokenBadCharacters::from_syntax_node(db, self.0.lookup(db))
28796 }
28797}
28798impl From<TokenBadCharactersPtr> for SyntaxStablePtrId {
28799 fn from(ptr: TokenBadCharactersPtr) -> Self {
28800 ptr.untyped()
28801 }
28802}
28803#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28804pub struct TokenBadCharactersGreen(pub GreenId);
28805impl TokenBadCharactersGreen {
28806 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28807 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
28808 }
28809}
28810impl TypedSyntaxNode for TokenBadCharacters {
28811 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenBadCharacters);
28812 type StablePtr = TokenBadCharactersPtr;
28813 type Green = TokenBadCharactersGreen;
28814 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28815 TokenBadCharactersGreen(
28816 Arc::new(GreenNode {
28817 kind: SyntaxKind::TokenMissing,
28818 details: GreenNodeDetails::Token("".into()),
28819 })
28820 .intern(db),
28821 )
28822 }
28823 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28824 match node.0.green.lookup_intern(db).details {
28825 GreenNodeDetails::Token(_) => Self { node },
28826 GreenNodeDetails::Node { .. } => panic!(
28827 "Expected a token {:?}, not an internal node",
28828 SyntaxKind::TokenBadCharacters
28829 ),
28830 }
28831 }
28832 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28833 match node.0.green.lookup_intern(db).details {
28834 GreenNodeDetails::Token(_) => Some(Self { node }),
28835 GreenNodeDetails::Node { .. } => None,
28836 }
28837 }
28838 fn as_syntax_node(&self) -> SyntaxNode {
28839 self.node.clone()
28840 }
28841 fn stable_ptr(&self) -> Self::StablePtr {
28842 TokenBadCharactersPtr(self.node.0.stable_ptr)
28843 }
28844}
28845impl From<&TokenBadCharacters> for SyntaxStablePtrId {
28846 fn from(node: &TokenBadCharacters) -> Self {
28847 node.stable_ptr().untyped()
28848 }
28849}
28850#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28851pub struct TerminalBadCharacters {
28852 node: SyntaxNode,
28853 children: Arc<[SyntaxNode]>,
28854}
28855impl Terminal for TerminalBadCharacters {
28856 const KIND: SyntaxKind = SyntaxKind::TerminalBadCharacters;
28857 type TokenType = TokenBadCharacters;
28858 fn new_green(
28859 db: &dyn SyntaxGroup,
28860 leading_trivia: TriviaGreen,
28861 token: <<TerminalBadCharacters as Terminal>::TokenType as TypedSyntaxNode>::Green,
28862 trailing_trivia: TriviaGreen,
28863 ) -> Self::Green {
28864 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
28865 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
28866 TerminalBadCharactersGreen(
28867 Arc::new(GreenNode {
28868 kind: SyntaxKind::TerminalBadCharacters,
28869 details: GreenNodeDetails::Node { children, width },
28870 })
28871 .intern(db),
28872 )
28873 }
28874 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28875 self.token(db).text(db)
28876 }
28877}
28878impl TerminalBadCharacters {
28879 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28880 Trivia::from_syntax_node(db, self.children[0].clone())
28881 }
28882 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenBadCharacters {
28883 TokenBadCharacters::from_syntax_node(db, self.children[1].clone())
28884 }
28885 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28886 Trivia::from_syntax_node(db, self.children[2].clone())
28887 }
28888}
28889#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28890pub struct TerminalBadCharactersPtr(pub SyntaxStablePtrId);
28891impl TerminalBadCharactersPtr {}
28892impl TypedStablePtr for TerminalBadCharactersPtr {
28893 type SyntaxNode = TerminalBadCharacters;
28894 fn untyped(&self) -> SyntaxStablePtrId {
28895 self.0
28896 }
28897 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalBadCharacters {
28898 TerminalBadCharacters::from_syntax_node(db, self.0.lookup(db))
28899 }
28900}
28901impl From<TerminalBadCharactersPtr> for SyntaxStablePtrId {
28902 fn from(ptr: TerminalBadCharactersPtr) -> Self {
28903 ptr.untyped()
28904 }
28905}
28906#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28907pub struct TerminalBadCharactersGreen(pub GreenId);
28908impl TypedSyntaxNode for TerminalBadCharacters {
28909 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalBadCharacters);
28910 type StablePtr = TerminalBadCharactersPtr;
28911 type Green = TerminalBadCharactersGreen;
28912 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28913 TerminalBadCharactersGreen(
28914 Arc::new(GreenNode {
28915 kind: SyntaxKind::TerminalBadCharacters,
28916 details: GreenNodeDetails::Node {
28917 children: vec![
28918 Trivia::missing(db).0,
28919 TokenBadCharacters::missing(db).0,
28920 Trivia::missing(db).0,
28921 ],
28922 width: TextWidth::default(),
28923 },
28924 })
28925 .intern(db),
28926 )
28927 }
28928 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28929 let kind = node.kind(db);
28930 assert_eq!(
28931 kind,
28932 SyntaxKind::TerminalBadCharacters,
28933 "Unexpected SyntaxKind {:?}. Expected {:?}.",
28934 kind,
28935 SyntaxKind::TerminalBadCharacters
28936 );
28937 let children = db.get_children(node.clone());
28938 Self { node, children }
28939 }
28940 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28941 let kind = node.kind(db);
28942 if kind == SyntaxKind::TerminalBadCharacters {
28943 Some(Self::from_syntax_node(db, node))
28944 } else {
28945 None
28946 }
28947 }
28948 fn as_syntax_node(&self) -> SyntaxNode {
28949 self.node.clone()
28950 }
28951 fn stable_ptr(&self) -> Self::StablePtr {
28952 TerminalBadCharactersPtr(self.node.0.stable_ptr)
28953 }
28954}
28955impl From<&TerminalBadCharacters> for SyntaxStablePtrId {
28956 fn from(node: &TerminalBadCharacters) -> Self {
28957 node.stable_ptr().untyped()
28958 }
28959}
28960#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28961pub struct TokenColon {
28962 node: SyntaxNode,
28963}
28964impl Token for TokenColon {
28965 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
28966 TokenColonGreen(
28967 Arc::new(GreenNode {
28968 kind: SyntaxKind::TokenColon,
28969 details: GreenNodeDetails::Token(text),
28970 })
28971 .intern(db),
28972 )
28973 }
28974 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28975 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
28976 .clone()
28977 }
28978}
28979#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28980pub struct TokenColonPtr(pub SyntaxStablePtrId);
28981impl TypedStablePtr for TokenColonPtr {
28982 type SyntaxNode = TokenColon;
28983 fn untyped(&self) -> SyntaxStablePtrId {
28984 self.0
28985 }
28986 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenColon {
28987 TokenColon::from_syntax_node(db, self.0.lookup(db))
28988 }
28989}
28990impl From<TokenColonPtr> for SyntaxStablePtrId {
28991 fn from(ptr: TokenColonPtr) -> Self {
28992 ptr.untyped()
28993 }
28994}
28995#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28996pub struct TokenColonGreen(pub GreenId);
28997impl TokenColonGreen {
28998 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28999 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
29000 }
29001}
29002impl TypedSyntaxNode for TokenColon {
29003 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenColon);
29004 type StablePtr = TokenColonPtr;
29005 type Green = TokenColonGreen;
29006 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29007 TokenColonGreen(
29008 Arc::new(GreenNode {
29009 kind: SyntaxKind::TokenMissing,
29010 details: GreenNodeDetails::Token("".into()),
29011 })
29012 .intern(db),
29013 )
29014 }
29015 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29016 match node.0.green.lookup_intern(db).details {
29017 GreenNodeDetails::Token(_) => Self { node },
29018 GreenNodeDetails::Node { .. } => {
29019 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenColon)
29020 }
29021 }
29022 }
29023 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29024 match node.0.green.lookup_intern(db).details {
29025 GreenNodeDetails::Token(_) => Some(Self { node }),
29026 GreenNodeDetails::Node { .. } => None,
29027 }
29028 }
29029 fn as_syntax_node(&self) -> SyntaxNode {
29030 self.node.clone()
29031 }
29032 fn stable_ptr(&self) -> Self::StablePtr {
29033 TokenColonPtr(self.node.0.stable_ptr)
29034 }
29035}
29036impl From<&TokenColon> for SyntaxStablePtrId {
29037 fn from(node: &TokenColon) -> Self {
29038 node.stable_ptr().untyped()
29039 }
29040}
29041#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29042pub struct TerminalColon {
29043 node: SyntaxNode,
29044 children: Arc<[SyntaxNode]>,
29045}
29046impl Terminal for TerminalColon {
29047 const KIND: SyntaxKind = SyntaxKind::TerminalColon;
29048 type TokenType = TokenColon;
29049 fn new_green(
29050 db: &dyn SyntaxGroup,
29051 leading_trivia: TriviaGreen,
29052 token: <<TerminalColon as Terminal>::TokenType as TypedSyntaxNode>::Green,
29053 trailing_trivia: TriviaGreen,
29054 ) -> Self::Green {
29055 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
29056 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
29057 TerminalColonGreen(
29058 Arc::new(GreenNode {
29059 kind: SyntaxKind::TerminalColon,
29060 details: GreenNodeDetails::Node { children, width },
29061 })
29062 .intern(db),
29063 )
29064 }
29065 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29066 self.token(db).text(db)
29067 }
29068}
29069impl TerminalColon {
29070 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29071 Trivia::from_syntax_node(db, self.children[0].clone())
29072 }
29073 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenColon {
29074 TokenColon::from_syntax_node(db, self.children[1].clone())
29075 }
29076 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29077 Trivia::from_syntax_node(db, self.children[2].clone())
29078 }
29079}
29080#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29081pub struct TerminalColonPtr(pub SyntaxStablePtrId);
29082impl TerminalColonPtr {}
29083impl TypedStablePtr for TerminalColonPtr {
29084 type SyntaxNode = TerminalColon;
29085 fn untyped(&self) -> SyntaxStablePtrId {
29086 self.0
29087 }
29088 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalColon {
29089 TerminalColon::from_syntax_node(db, self.0.lookup(db))
29090 }
29091}
29092impl From<TerminalColonPtr> for SyntaxStablePtrId {
29093 fn from(ptr: TerminalColonPtr) -> Self {
29094 ptr.untyped()
29095 }
29096}
29097#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29098pub struct TerminalColonGreen(pub GreenId);
29099impl TypedSyntaxNode for TerminalColon {
29100 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalColon);
29101 type StablePtr = TerminalColonPtr;
29102 type Green = TerminalColonGreen;
29103 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29104 TerminalColonGreen(
29105 Arc::new(GreenNode {
29106 kind: SyntaxKind::TerminalColon,
29107 details: GreenNodeDetails::Node {
29108 children: vec![
29109 Trivia::missing(db).0,
29110 TokenColon::missing(db).0,
29111 Trivia::missing(db).0,
29112 ],
29113 width: TextWidth::default(),
29114 },
29115 })
29116 .intern(db),
29117 )
29118 }
29119 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29120 let kind = node.kind(db);
29121 assert_eq!(
29122 kind,
29123 SyntaxKind::TerminalColon,
29124 "Unexpected SyntaxKind {:?}. Expected {:?}.",
29125 kind,
29126 SyntaxKind::TerminalColon
29127 );
29128 let children = db.get_children(node.clone());
29129 Self { node, children }
29130 }
29131 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29132 let kind = node.kind(db);
29133 if kind == SyntaxKind::TerminalColon {
29134 Some(Self::from_syntax_node(db, node))
29135 } else {
29136 None
29137 }
29138 }
29139 fn as_syntax_node(&self) -> SyntaxNode {
29140 self.node.clone()
29141 }
29142 fn stable_ptr(&self) -> Self::StablePtr {
29143 TerminalColonPtr(self.node.0.stable_ptr)
29144 }
29145}
29146impl From<&TerminalColon> for SyntaxStablePtrId {
29147 fn from(node: &TerminalColon) -> Self {
29148 node.stable_ptr().untyped()
29149 }
29150}
29151#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29152pub struct TokenColonColon {
29153 node: SyntaxNode,
29154}
29155impl Token for TokenColonColon {
29156 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
29157 TokenColonColonGreen(
29158 Arc::new(GreenNode {
29159 kind: SyntaxKind::TokenColonColon,
29160 details: GreenNodeDetails::Token(text),
29161 })
29162 .intern(db),
29163 )
29164 }
29165 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29166 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
29167 .clone()
29168 }
29169}
29170#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29171pub struct TokenColonColonPtr(pub SyntaxStablePtrId);
29172impl TypedStablePtr for TokenColonColonPtr {
29173 type SyntaxNode = TokenColonColon;
29174 fn untyped(&self) -> SyntaxStablePtrId {
29175 self.0
29176 }
29177 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenColonColon {
29178 TokenColonColon::from_syntax_node(db, self.0.lookup(db))
29179 }
29180}
29181impl From<TokenColonColonPtr> for SyntaxStablePtrId {
29182 fn from(ptr: TokenColonColonPtr) -> Self {
29183 ptr.untyped()
29184 }
29185}
29186#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29187pub struct TokenColonColonGreen(pub GreenId);
29188impl TokenColonColonGreen {
29189 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29190 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
29191 }
29192}
29193impl TypedSyntaxNode for TokenColonColon {
29194 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenColonColon);
29195 type StablePtr = TokenColonColonPtr;
29196 type Green = TokenColonColonGreen;
29197 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29198 TokenColonColonGreen(
29199 Arc::new(GreenNode {
29200 kind: SyntaxKind::TokenMissing,
29201 details: GreenNodeDetails::Token("".into()),
29202 })
29203 .intern(db),
29204 )
29205 }
29206 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29207 match node.0.green.lookup_intern(db).details {
29208 GreenNodeDetails::Token(_) => Self { node },
29209 GreenNodeDetails::Node { .. } => {
29210 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenColonColon)
29211 }
29212 }
29213 }
29214 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29215 match node.0.green.lookup_intern(db).details {
29216 GreenNodeDetails::Token(_) => Some(Self { node }),
29217 GreenNodeDetails::Node { .. } => None,
29218 }
29219 }
29220 fn as_syntax_node(&self) -> SyntaxNode {
29221 self.node.clone()
29222 }
29223 fn stable_ptr(&self) -> Self::StablePtr {
29224 TokenColonColonPtr(self.node.0.stable_ptr)
29225 }
29226}
29227impl From<&TokenColonColon> for SyntaxStablePtrId {
29228 fn from(node: &TokenColonColon) -> Self {
29229 node.stable_ptr().untyped()
29230 }
29231}
29232#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29233pub struct TerminalColonColon {
29234 node: SyntaxNode,
29235 children: Arc<[SyntaxNode]>,
29236}
29237impl Terminal for TerminalColonColon {
29238 const KIND: SyntaxKind = SyntaxKind::TerminalColonColon;
29239 type TokenType = TokenColonColon;
29240 fn new_green(
29241 db: &dyn SyntaxGroup,
29242 leading_trivia: TriviaGreen,
29243 token: <<TerminalColonColon as Terminal>::TokenType as TypedSyntaxNode>::Green,
29244 trailing_trivia: TriviaGreen,
29245 ) -> Self::Green {
29246 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
29247 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
29248 TerminalColonColonGreen(
29249 Arc::new(GreenNode {
29250 kind: SyntaxKind::TerminalColonColon,
29251 details: GreenNodeDetails::Node { children, width },
29252 })
29253 .intern(db),
29254 )
29255 }
29256 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29257 self.token(db).text(db)
29258 }
29259}
29260impl TerminalColonColon {
29261 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29262 Trivia::from_syntax_node(db, self.children[0].clone())
29263 }
29264 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenColonColon {
29265 TokenColonColon::from_syntax_node(db, self.children[1].clone())
29266 }
29267 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29268 Trivia::from_syntax_node(db, self.children[2].clone())
29269 }
29270}
29271#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29272pub struct TerminalColonColonPtr(pub SyntaxStablePtrId);
29273impl TerminalColonColonPtr {}
29274impl TypedStablePtr for TerminalColonColonPtr {
29275 type SyntaxNode = TerminalColonColon;
29276 fn untyped(&self) -> SyntaxStablePtrId {
29277 self.0
29278 }
29279 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalColonColon {
29280 TerminalColonColon::from_syntax_node(db, self.0.lookup(db))
29281 }
29282}
29283impl From<TerminalColonColonPtr> for SyntaxStablePtrId {
29284 fn from(ptr: TerminalColonColonPtr) -> Self {
29285 ptr.untyped()
29286 }
29287}
29288#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29289pub struct TerminalColonColonGreen(pub GreenId);
29290impl TypedSyntaxNode for TerminalColonColon {
29291 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalColonColon);
29292 type StablePtr = TerminalColonColonPtr;
29293 type Green = TerminalColonColonGreen;
29294 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29295 TerminalColonColonGreen(
29296 Arc::new(GreenNode {
29297 kind: SyntaxKind::TerminalColonColon,
29298 details: GreenNodeDetails::Node {
29299 children: vec![
29300 Trivia::missing(db).0,
29301 TokenColonColon::missing(db).0,
29302 Trivia::missing(db).0,
29303 ],
29304 width: TextWidth::default(),
29305 },
29306 })
29307 .intern(db),
29308 )
29309 }
29310 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29311 let kind = node.kind(db);
29312 assert_eq!(
29313 kind,
29314 SyntaxKind::TerminalColonColon,
29315 "Unexpected SyntaxKind {:?}. Expected {:?}.",
29316 kind,
29317 SyntaxKind::TerminalColonColon
29318 );
29319 let children = db.get_children(node.clone());
29320 Self { node, children }
29321 }
29322 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29323 let kind = node.kind(db);
29324 if kind == SyntaxKind::TerminalColonColon {
29325 Some(Self::from_syntax_node(db, node))
29326 } else {
29327 None
29328 }
29329 }
29330 fn as_syntax_node(&self) -> SyntaxNode {
29331 self.node.clone()
29332 }
29333 fn stable_ptr(&self) -> Self::StablePtr {
29334 TerminalColonColonPtr(self.node.0.stable_ptr)
29335 }
29336}
29337impl From<&TerminalColonColon> for SyntaxStablePtrId {
29338 fn from(node: &TerminalColonColon) -> Self {
29339 node.stable_ptr().untyped()
29340 }
29341}
29342#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29343pub struct TokenComma {
29344 node: SyntaxNode,
29345}
29346impl Token for TokenComma {
29347 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
29348 TokenCommaGreen(
29349 Arc::new(GreenNode {
29350 kind: SyntaxKind::TokenComma,
29351 details: GreenNodeDetails::Token(text),
29352 })
29353 .intern(db),
29354 )
29355 }
29356 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29357 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
29358 .clone()
29359 }
29360}
29361#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29362pub struct TokenCommaPtr(pub SyntaxStablePtrId);
29363impl TypedStablePtr for TokenCommaPtr {
29364 type SyntaxNode = TokenComma;
29365 fn untyped(&self) -> SyntaxStablePtrId {
29366 self.0
29367 }
29368 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenComma {
29369 TokenComma::from_syntax_node(db, self.0.lookup(db))
29370 }
29371}
29372impl From<TokenCommaPtr> for SyntaxStablePtrId {
29373 fn from(ptr: TokenCommaPtr) -> Self {
29374 ptr.untyped()
29375 }
29376}
29377#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29378pub struct TokenCommaGreen(pub GreenId);
29379impl TokenCommaGreen {
29380 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29381 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
29382 }
29383}
29384impl TypedSyntaxNode for TokenComma {
29385 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenComma);
29386 type StablePtr = TokenCommaPtr;
29387 type Green = TokenCommaGreen;
29388 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29389 TokenCommaGreen(
29390 Arc::new(GreenNode {
29391 kind: SyntaxKind::TokenMissing,
29392 details: GreenNodeDetails::Token("".into()),
29393 })
29394 .intern(db),
29395 )
29396 }
29397 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29398 match node.0.green.lookup_intern(db).details {
29399 GreenNodeDetails::Token(_) => Self { node },
29400 GreenNodeDetails::Node { .. } => {
29401 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenComma)
29402 }
29403 }
29404 }
29405 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29406 match node.0.green.lookup_intern(db).details {
29407 GreenNodeDetails::Token(_) => Some(Self { node }),
29408 GreenNodeDetails::Node { .. } => None,
29409 }
29410 }
29411 fn as_syntax_node(&self) -> SyntaxNode {
29412 self.node.clone()
29413 }
29414 fn stable_ptr(&self) -> Self::StablePtr {
29415 TokenCommaPtr(self.node.0.stable_ptr)
29416 }
29417}
29418impl From<&TokenComma> for SyntaxStablePtrId {
29419 fn from(node: &TokenComma) -> Self {
29420 node.stable_ptr().untyped()
29421 }
29422}
29423#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29424pub struct TerminalComma {
29425 node: SyntaxNode,
29426 children: Arc<[SyntaxNode]>,
29427}
29428impl Terminal for TerminalComma {
29429 const KIND: SyntaxKind = SyntaxKind::TerminalComma;
29430 type TokenType = TokenComma;
29431 fn new_green(
29432 db: &dyn SyntaxGroup,
29433 leading_trivia: TriviaGreen,
29434 token: <<TerminalComma as Terminal>::TokenType as TypedSyntaxNode>::Green,
29435 trailing_trivia: TriviaGreen,
29436 ) -> Self::Green {
29437 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
29438 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
29439 TerminalCommaGreen(
29440 Arc::new(GreenNode {
29441 kind: SyntaxKind::TerminalComma,
29442 details: GreenNodeDetails::Node { children, width },
29443 })
29444 .intern(db),
29445 )
29446 }
29447 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29448 self.token(db).text(db)
29449 }
29450}
29451impl TerminalComma {
29452 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29453 Trivia::from_syntax_node(db, self.children[0].clone())
29454 }
29455 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenComma {
29456 TokenComma::from_syntax_node(db, self.children[1].clone())
29457 }
29458 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29459 Trivia::from_syntax_node(db, self.children[2].clone())
29460 }
29461}
29462#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29463pub struct TerminalCommaPtr(pub SyntaxStablePtrId);
29464impl TerminalCommaPtr {}
29465impl TypedStablePtr for TerminalCommaPtr {
29466 type SyntaxNode = TerminalComma;
29467 fn untyped(&self) -> SyntaxStablePtrId {
29468 self.0
29469 }
29470 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalComma {
29471 TerminalComma::from_syntax_node(db, self.0.lookup(db))
29472 }
29473}
29474impl From<TerminalCommaPtr> for SyntaxStablePtrId {
29475 fn from(ptr: TerminalCommaPtr) -> Self {
29476 ptr.untyped()
29477 }
29478}
29479#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29480pub struct TerminalCommaGreen(pub GreenId);
29481impl TypedSyntaxNode for TerminalComma {
29482 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalComma);
29483 type StablePtr = TerminalCommaPtr;
29484 type Green = TerminalCommaGreen;
29485 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29486 TerminalCommaGreen(
29487 Arc::new(GreenNode {
29488 kind: SyntaxKind::TerminalComma,
29489 details: GreenNodeDetails::Node {
29490 children: vec![
29491 Trivia::missing(db).0,
29492 TokenComma::missing(db).0,
29493 Trivia::missing(db).0,
29494 ],
29495 width: TextWidth::default(),
29496 },
29497 })
29498 .intern(db),
29499 )
29500 }
29501 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29502 let kind = node.kind(db);
29503 assert_eq!(
29504 kind,
29505 SyntaxKind::TerminalComma,
29506 "Unexpected SyntaxKind {:?}. Expected {:?}.",
29507 kind,
29508 SyntaxKind::TerminalComma
29509 );
29510 let children = db.get_children(node.clone());
29511 Self { node, children }
29512 }
29513 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29514 let kind = node.kind(db);
29515 if kind == SyntaxKind::TerminalComma {
29516 Some(Self::from_syntax_node(db, node))
29517 } else {
29518 None
29519 }
29520 }
29521 fn as_syntax_node(&self) -> SyntaxNode {
29522 self.node.clone()
29523 }
29524 fn stable_ptr(&self) -> Self::StablePtr {
29525 TerminalCommaPtr(self.node.0.stable_ptr)
29526 }
29527}
29528impl From<&TerminalComma> for SyntaxStablePtrId {
29529 fn from(node: &TerminalComma) -> Self {
29530 node.stable_ptr().untyped()
29531 }
29532}
29533#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29534pub struct TokenDiv {
29535 node: SyntaxNode,
29536}
29537impl Token for TokenDiv {
29538 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
29539 TokenDivGreen(
29540 Arc::new(GreenNode {
29541 kind: SyntaxKind::TokenDiv,
29542 details: GreenNodeDetails::Token(text),
29543 })
29544 .intern(db),
29545 )
29546 }
29547 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29548 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
29549 .clone()
29550 }
29551}
29552#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29553pub struct TokenDivPtr(pub SyntaxStablePtrId);
29554impl TypedStablePtr for TokenDivPtr {
29555 type SyntaxNode = TokenDiv;
29556 fn untyped(&self) -> SyntaxStablePtrId {
29557 self.0
29558 }
29559 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenDiv {
29560 TokenDiv::from_syntax_node(db, self.0.lookup(db))
29561 }
29562}
29563impl From<TokenDivPtr> for SyntaxStablePtrId {
29564 fn from(ptr: TokenDivPtr) -> Self {
29565 ptr.untyped()
29566 }
29567}
29568#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29569pub struct TokenDivGreen(pub GreenId);
29570impl TokenDivGreen {
29571 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29572 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
29573 }
29574}
29575impl TypedSyntaxNode for TokenDiv {
29576 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenDiv);
29577 type StablePtr = TokenDivPtr;
29578 type Green = TokenDivGreen;
29579 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29580 TokenDivGreen(
29581 Arc::new(GreenNode {
29582 kind: SyntaxKind::TokenMissing,
29583 details: GreenNodeDetails::Token("".into()),
29584 })
29585 .intern(db),
29586 )
29587 }
29588 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29589 match node.0.green.lookup_intern(db).details {
29590 GreenNodeDetails::Token(_) => Self { node },
29591 GreenNodeDetails::Node { .. } => {
29592 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenDiv)
29593 }
29594 }
29595 }
29596 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29597 match node.0.green.lookup_intern(db).details {
29598 GreenNodeDetails::Token(_) => Some(Self { node }),
29599 GreenNodeDetails::Node { .. } => None,
29600 }
29601 }
29602 fn as_syntax_node(&self) -> SyntaxNode {
29603 self.node.clone()
29604 }
29605 fn stable_ptr(&self) -> Self::StablePtr {
29606 TokenDivPtr(self.node.0.stable_ptr)
29607 }
29608}
29609impl From<&TokenDiv> for SyntaxStablePtrId {
29610 fn from(node: &TokenDiv) -> Self {
29611 node.stable_ptr().untyped()
29612 }
29613}
29614#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29615pub struct TerminalDiv {
29616 node: SyntaxNode,
29617 children: Arc<[SyntaxNode]>,
29618}
29619impl Terminal for TerminalDiv {
29620 const KIND: SyntaxKind = SyntaxKind::TerminalDiv;
29621 type TokenType = TokenDiv;
29622 fn new_green(
29623 db: &dyn SyntaxGroup,
29624 leading_trivia: TriviaGreen,
29625 token: <<TerminalDiv as Terminal>::TokenType as TypedSyntaxNode>::Green,
29626 trailing_trivia: TriviaGreen,
29627 ) -> Self::Green {
29628 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
29629 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
29630 TerminalDivGreen(
29631 Arc::new(GreenNode {
29632 kind: SyntaxKind::TerminalDiv,
29633 details: GreenNodeDetails::Node { children, width },
29634 })
29635 .intern(db),
29636 )
29637 }
29638 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29639 self.token(db).text(db)
29640 }
29641}
29642impl TerminalDiv {
29643 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29644 Trivia::from_syntax_node(db, self.children[0].clone())
29645 }
29646 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenDiv {
29647 TokenDiv::from_syntax_node(db, self.children[1].clone())
29648 }
29649 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29650 Trivia::from_syntax_node(db, self.children[2].clone())
29651 }
29652}
29653#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29654pub struct TerminalDivPtr(pub SyntaxStablePtrId);
29655impl TerminalDivPtr {}
29656impl TypedStablePtr for TerminalDivPtr {
29657 type SyntaxNode = TerminalDiv;
29658 fn untyped(&self) -> SyntaxStablePtrId {
29659 self.0
29660 }
29661 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalDiv {
29662 TerminalDiv::from_syntax_node(db, self.0.lookup(db))
29663 }
29664}
29665impl From<TerminalDivPtr> for SyntaxStablePtrId {
29666 fn from(ptr: TerminalDivPtr) -> Self {
29667 ptr.untyped()
29668 }
29669}
29670#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29671pub struct TerminalDivGreen(pub GreenId);
29672impl TypedSyntaxNode for TerminalDiv {
29673 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalDiv);
29674 type StablePtr = TerminalDivPtr;
29675 type Green = TerminalDivGreen;
29676 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29677 TerminalDivGreen(
29678 Arc::new(GreenNode {
29679 kind: SyntaxKind::TerminalDiv,
29680 details: GreenNodeDetails::Node {
29681 children: vec![
29682 Trivia::missing(db).0,
29683 TokenDiv::missing(db).0,
29684 Trivia::missing(db).0,
29685 ],
29686 width: TextWidth::default(),
29687 },
29688 })
29689 .intern(db),
29690 )
29691 }
29692 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29693 let kind = node.kind(db);
29694 assert_eq!(
29695 kind,
29696 SyntaxKind::TerminalDiv,
29697 "Unexpected SyntaxKind {:?}. Expected {:?}.",
29698 kind,
29699 SyntaxKind::TerminalDiv
29700 );
29701 let children = db.get_children(node.clone());
29702 Self { node, children }
29703 }
29704 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29705 let kind = node.kind(db);
29706 if kind == SyntaxKind::TerminalDiv { Some(Self::from_syntax_node(db, node)) } else { None }
29707 }
29708 fn as_syntax_node(&self) -> SyntaxNode {
29709 self.node.clone()
29710 }
29711 fn stable_ptr(&self) -> Self::StablePtr {
29712 TerminalDivPtr(self.node.0.stable_ptr)
29713 }
29714}
29715impl From<&TerminalDiv> for SyntaxStablePtrId {
29716 fn from(node: &TerminalDiv) -> Self {
29717 node.stable_ptr().untyped()
29718 }
29719}
29720#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29721pub struct TokenDivEq {
29722 node: SyntaxNode,
29723}
29724impl Token for TokenDivEq {
29725 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
29726 TokenDivEqGreen(
29727 Arc::new(GreenNode {
29728 kind: SyntaxKind::TokenDivEq,
29729 details: GreenNodeDetails::Token(text),
29730 })
29731 .intern(db),
29732 )
29733 }
29734 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29735 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
29736 .clone()
29737 }
29738}
29739#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29740pub struct TokenDivEqPtr(pub SyntaxStablePtrId);
29741impl TypedStablePtr for TokenDivEqPtr {
29742 type SyntaxNode = TokenDivEq;
29743 fn untyped(&self) -> SyntaxStablePtrId {
29744 self.0
29745 }
29746 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenDivEq {
29747 TokenDivEq::from_syntax_node(db, self.0.lookup(db))
29748 }
29749}
29750impl From<TokenDivEqPtr> for SyntaxStablePtrId {
29751 fn from(ptr: TokenDivEqPtr) -> Self {
29752 ptr.untyped()
29753 }
29754}
29755#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29756pub struct TokenDivEqGreen(pub GreenId);
29757impl TokenDivEqGreen {
29758 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29759 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
29760 }
29761}
29762impl TypedSyntaxNode for TokenDivEq {
29763 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenDivEq);
29764 type StablePtr = TokenDivEqPtr;
29765 type Green = TokenDivEqGreen;
29766 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29767 TokenDivEqGreen(
29768 Arc::new(GreenNode {
29769 kind: SyntaxKind::TokenMissing,
29770 details: GreenNodeDetails::Token("".into()),
29771 })
29772 .intern(db),
29773 )
29774 }
29775 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29776 match node.0.green.lookup_intern(db).details {
29777 GreenNodeDetails::Token(_) => Self { node },
29778 GreenNodeDetails::Node { .. } => {
29779 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenDivEq)
29780 }
29781 }
29782 }
29783 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29784 match node.0.green.lookup_intern(db).details {
29785 GreenNodeDetails::Token(_) => Some(Self { node }),
29786 GreenNodeDetails::Node { .. } => None,
29787 }
29788 }
29789 fn as_syntax_node(&self) -> SyntaxNode {
29790 self.node.clone()
29791 }
29792 fn stable_ptr(&self) -> Self::StablePtr {
29793 TokenDivEqPtr(self.node.0.stable_ptr)
29794 }
29795}
29796impl From<&TokenDivEq> for SyntaxStablePtrId {
29797 fn from(node: &TokenDivEq) -> Self {
29798 node.stable_ptr().untyped()
29799 }
29800}
29801#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29802pub struct TerminalDivEq {
29803 node: SyntaxNode,
29804 children: Arc<[SyntaxNode]>,
29805}
29806impl Terminal for TerminalDivEq {
29807 const KIND: SyntaxKind = SyntaxKind::TerminalDivEq;
29808 type TokenType = TokenDivEq;
29809 fn new_green(
29810 db: &dyn SyntaxGroup,
29811 leading_trivia: TriviaGreen,
29812 token: <<TerminalDivEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
29813 trailing_trivia: TriviaGreen,
29814 ) -> Self::Green {
29815 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
29816 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
29817 TerminalDivEqGreen(
29818 Arc::new(GreenNode {
29819 kind: SyntaxKind::TerminalDivEq,
29820 details: GreenNodeDetails::Node { children, width },
29821 })
29822 .intern(db),
29823 )
29824 }
29825 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29826 self.token(db).text(db)
29827 }
29828}
29829impl TerminalDivEq {
29830 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29831 Trivia::from_syntax_node(db, self.children[0].clone())
29832 }
29833 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenDivEq {
29834 TokenDivEq::from_syntax_node(db, self.children[1].clone())
29835 }
29836 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29837 Trivia::from_syntax_node(db, self.children[2].clone())
29838 }
29839}
29840#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29841pub struct TerminalDivEqPtr(pub SyntaxStablePtrId);
29842impl TerminalDivEqPtr {}
29843impl TypedStablePtr for TerminalDivEqPtr {
29844 type SyntaxNode = TerminalDivEq;
29845 fn untyped(&self) -> SyntaxStablePtrId {
29846 self.0
29847 }
29848 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalDivEq {
29849 TerminalDivEq::from_syntax_node(db, self.0.lookup(db))
29850 }
29851}
29852impl From<TerminalDivEqPtr> for SyntaxStablePtrId {
29853 fn from(ptr: TerminalDivEqPtr) -> Self {
29854 ptr.untyped()
29855 }
29856}
29857#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29858pub struct TerminalDivEqGreen(pub GreenId);
29859impl TypedSyntaxNode for TerminalDivEq {
29860 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalDivEq);
29861 type StablePtr = TerminalDivEqPtr;
29862 type Green = TerminalDivEqGreen;
29863 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29864 TerminalDivEqGreen(
29865 Arc::new(GreenNode {
29866 kind: SyntaxKind::TerminalDivEq,
29867 details: GreenNodeDetails::Node {
29868 children: vec![
29869 Trivia::missing(db).0,
29870 TokenDivEq::missing(db).0,
29871 Trivia::missing(db).0,
29872 ],
29873 width: TextWidth::default(),
29874 },
29875 })
29876 .intern(db),
29877 )
29878 }
29879 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29880 let kind = node.kind(db);
29881 assert_eq!(
29882 kind,
29883 SyntaxKind::TerminalDivEq,
29884 "Unexpected SyntaxKind {:?}. Expected {:?}.",
29885 kind,
29886 SyntaxKind::TerminalDivEq
29887 );
29888 let children = db.get_children(node.clone());
29889 Self { node, children }
29890 }
29891 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29892 let kind = node.kind(db);
29893 if kind == SyntaxKind::TerminalDivEq {
29894 Some(Self::from_syntax_node(db, node))
29895 } else {
29896 None
29897 }
29898 }
29899 fn as_syntax_node(&self) -> SyntaxNode {
29900 self.node.clone()
29901 }
29902 fn stable_ptr(&self) -> Self::StablePtr {
29903 TerminalDivEqPtr(self.node.0.stable_ptr)
29904 }
29905}
29906impl From<&TerminalDivEq> for SyntaxStablePtrId {
29907 fn from(node: &TerminalDivEq) -> Self {
29908 node.stable_ptr().untyped()
29909 }
29910}
29911#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29912pub struct TokenDot {
29913 node: SyntaxNode,
29914}
29915impl Token for TokenDot {
29916 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
29917 TokenDotGreen(
29918 Arc::new(GreenNode {
29919 kind: SyntaxKind::TokenDot,
29920 details: GreenNodeDetails::Token(text),
29921 })
29922 .intern(db),
29923 )
29924 }
29925 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29926 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
29927 .clone()
29928 }
29929}
29930#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29931pub struct TokenDotPtr(pub SyntaxStablePtrId);
29932impl TypedStablePtr for TokenDotPtr {
29933 type SyntaxNode = TokenDot;
29934 fn untyped(&self) -> SyntaxStablePtrId {
29935 self.0
29936 }
29937 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenDot {
29938 TokenDot::from_syntax_node(db, self.0.lookup(db))
29939 }
29940}
29941impl From<TokenDotPtr> for SyntaxStablePtrId {
29942 fn from(ptr: TokenDotPtr) -> Self {
29943 ptr.untyped()
29944 }
29945}
29946#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29947pub struct TokenDotGreen(pub GreenId);
29948impl TokenDotGreen {
29949 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29950 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
29951 }
29952}
29953impl TypedSyntaxNode for TokenDot {
29954 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenDot);
29955 type StablePtr = TokenDotPtr;
29956 type Green = TokenDotGreen;
29957 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29958 TokenDotGreen(
29959 Arc::new(GreenNode {
29960 kind: SyntaxKind::TokenMissing,
29961 details: GreenNodeDetails::Token("".into()),
29962 })
29963 .intern(db),
29964 )
29965 }
29966 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29967 match node.0.green.lookup_intern(db).details {
29968 GreenNodeDetails::Token(_) => Self { node },
29969 GreenNodeDetails::Node { .. } => {
29970 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenDot)
29971 }
29972 }
29973 }
29974 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29975 match node.0.green.lookup_intern(db).details {
29976 GreenNodeDetails::Token(_) => Some(Self { node }),
29977 GreenNodeDetails::Node { .. } => None,
29978 }
29979 }
29980 fn as_syntax_node(&self) -> SyntaxNode {
29981 self.node.clone()
29982 }
29983 fn stable_ptr(&self) -> Self::StablePtr {
29984 TokenDotPtr(self.node.0.stable_ptr)
29985 }
29986}
29987impl From<&TokenDot> for SyntaxStablePtrId {
29988 fn from(node: &TokenDot) -> Self {
29989 node.stable_ptr().untyped()
29990 }
29991}
29992#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29993pub struct TerminalDot {
29994 node: SyntaxNode,
29995 children: Arc<[SyntaxNode]>,
29996}
29997impl Terminal for TerminalDot {
29998 const KIND: SyntaxKind = SyntaxKind::TerminalDot;
29999 type TokenType = TokenDot;
30000 fn new_green(
30001 db: &dyn SyntaxGroup,
30002 leading_trivia: TriviaGreen,
30003 token: <<TerminalDot as Terminal>::TokenType as TypedSyntaxNode>::Green,
30004 trailing_trivia: TriviaGreen,
30005 ) -> Self::Green {
30006 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
30007 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
30008 TerminalDotGreen(
30009 Arc::new(GreenNode {
30010 kind: SyntaxKind::TerminalDot,
30011 details: GreenNodeDetails::Node { children, width },
30012 })
30013 .intern(db),
30014 )
30015 }
30016 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30017 self.token(db).text(db)
30018 }
30019}
30020impl TerminalDot {
30021 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30022 Trivia::from_syntax_node(db, self.children[0].clone())
30023 }
30024 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenDot {
30025 TokenDot::from_syntax_node(db, self.children[1].clone())
30026 }
30027 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30028 Trivia::from_syntax_node(db, self.children[2].clone())
30029 }
30030}
30031#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30032pub struct TerminalDotPtr(pub SyntaxStablePtrId);
30033impl TerminalDotPtr {}
30034impl TypedStablePtr for TerminalDotPtr {
30035 type SyntaxNode = TerminalDot;
30036 fn untyped(&self) -> SyntaxStablePtrId {
30037 self.0
30038 }
30039 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalDot {
30040 TerminalDot::from_syntax_node(db, self.0.lookup(db))
30041 }
30042}
30043impl From<TerminalDotPtr> for SyntaxStablePtrId {
30044 fn from(ptr: TerminalDotPtr) -> Self {
30045 ptr.untyped()
30046 }
30047}
30048#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30049pub struct TerminalDotGreen(pub GreenId);
30050impl TypedSyntaxNode for TerminalDot {
30051 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalDot);
30052 type StablePtr = TerminalDotPtr;
30053 type Green = TerminalDotGreen;
30054 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30055 TerminalDotGreen(
30056 Arc::new(GreenNode {
30057 kind: SyntaxKind::TerminalDot,
30058 details: GreenNodeDetails::Node {
30059 children: vec![
30060 Trivia::missing(db).0,
30061 TokenDot::missing(db).0,
30062 Trivia::missing(db).0,
30063 ],
30064 width: TextWidth::default(),
30065 },
30066 })
30067 .intern(db),
30068 )
30069 }
30070 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30071 let kind = node.kind(db);
30072 assert_eq!(
30073 kind,
30074 SyntaxKind::TerminalDot,
30075 "Unexpected SyntaxKind {:?}. Expected {:?}.",
30076 kind,
30077 SyntaxKind::TerminalDot
30078 );
30079 let children = db.get_children(node.clone());
30080 Self { node, children }
30081 }
30082 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30083 let kind = node.kind(db);
30084 if kind == SyntaxKind::TerminalDot { Some(Self::from_syntax_node(db, node)) } else { None }
30085 }
30086 fn as_syntax_node(&self) -> SyntaxNode {
30087 self.node.clone()
30088 }
30089 fn stable_ptr(&self) -> Self::StablePtr {
30090 TerminalDotPtr(self.node.0.stable_ptr)
30091 }
30092}
30093impl From<&TerminalDot> for SyntaxStablePtrId {
30094 fn from(node: &TerminalDot) -> Self {
30095 node.stable_ptr().untyped()
30096 }
30097}
30098#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30099pub struct TokenDotDot {
30100 node: SyntaxNode,
30101}
30102impl Token for TokenDotDot {
30103 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
30104 TokenDotDotGreen(
30105 Arc::new(GreenNode {
30106 kind: SyntaxKind::TokenDotDot,
30107 details: GreenNodeDetails::Token(text),
30108 })
30109 .intern(db),
30110 )
30111 }
30112 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30113 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
30114 .clone()
30115 }
30116}
30117#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30118pub struct TokenDotDotPtr(pub SyntaxStablePtrId);
30119impl TypedStablePtr for TokenDotDotPtr {
30120 type SyntaxNode = TokenDotDot;
30121 fn untyped(&self) -> SyntaxStablePtrId {
30122 self.0
30123 }
30124 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenDotDot {
30125 TokenDotDot::from_syntax_node(db, self.0.lookup(db))
30126 }
30127}
30128impl From<TokenDotDotPtr> for SyntaxStablePtrId {
30129 fn from(ptr: TokenDotDotPtr) -> Self {
30130 ptr.untyped()
30131 }
30132}
30133#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30134pub struct TokenDotDotGreen(pub GreenId);
30135impl TokenDotDotGreen {
30136 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30137 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
30138 }
30139}
30140impl TypedSyntaxNode for TokenDotDot {
30141 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenDotDot);
30142 type StablePtr = TokenDotDotPtr;
30143 type Green = TokenDotDotGreen;
30144 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30145 TokenDotDotGreen(
30146 Arc::new(GreenNode {
30147 kind: SyntaxKind::TokenMissing,
30148 details: GreenNodeDetails::Token("".into()),
30149 })
30150 .intern(db),
30151 )
30152 }
30153 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30154 match node.0.green.lookup_intern(db).details {
30155 GreenNodeDetails::Token(_) => Self { node },
30156 GreenNodeDetails::Node { .. } => {
30157 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenDotDot)
30158 }
30159 }
30160 }
30161 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30162 match node.0.green.lookup_intern(db).details {
30163 GreenNodeDetails::Token(_) => Some(Self { node }),
30164 GreenNodeDetails::Node { .. } => None,
30165 }
30166 }
30167 fn as_syntax_node(&self) -> SyntaxNode {
30168 self.node.clone()
30169 }
30170 fn stable_ptr(&self) -> Self::StablePtr {
30171 TokenDotDotPtr(self.node.0.stable_ptr)
30172 }
30173}
30174impl From<&TokenDotDot> for SyntaxStablePtrId {
30175 fn from(node: &TokenDotDot) -> Self {
30176 node.stable_ptr().untyped()
30177 }
30178}
30179#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30180pub struct TerminalDotDot {
30181 node: SyntaxNode,
30182 children: Arc<[SyntaxNode]>,
30183}
30184impl Terminal for TerminalDotDot {
30185 const KIND: SyntaxKind = SyntaxKind::TerminalDotDot;
30186 type TokenType = TokenDotDot;
30187 fn new_green(
30188 db: &dyn SyntaxGroup,
30189 leading_trivia: TriviaGreen,
30190 token: <<TerminalDotDot as Terminal>::TokenType as TypedSyntaxNode>::Green,
30191 trailing_trivia: TriviaGreen,
30192 ) -> Self::Green {
30193 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
30194 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
30195 TerminalDotDotGreen(
30196 Arc::new(GreenNode {
30197 kind: SyntaxKind::TerminalDotDot,
30198 details: GreenNodeDetails::Node { children, width },
30199 })
30200 .intern(db),
30201 )
30202 }
30203 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30204 self.token(db).text(db)
30205 }
30206}
30207impl TerminalDotDot {
30208 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30209 Trivia::from_syntax_node(db, self.children[0].clone())
30210 }
30211 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenDotDot {
30212 TokenDotDot::from_syntax_node(db, self.children[1].clone())
30213 }
30214 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30215 Trivia::from_syntax_node(db, self.children[2].clone())
30216 }
30217}
30218#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30219pub struct TerminalDotDotPtr(pub SyntaxStablePtrId);
30220impl TerminalDotDotPtr {}
30221impl TypedStablePtr for TerminalDotDotPtr {
30222 type SyntaxNode = TerminalDotDot;
30223 fn untyped(&self) -> SyntaxStablePtrId {
30224 self.0
30225 }
30226 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalDotDot {
30227 TerminalDotDot::from_syntax_node(db, self.0.lookup(db))
30228 }
30229}
30230impl From<TerminalDotDotPtr> for SyntaxStablePtrId {
30231 fn from(ptr: TerminalDotDotPtr) -> Self {
30232 ptr.untyped()
30233 }
30234}
30235#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30236pub struct TerminalDotDotGreen(pub GreenId);
30237impl TypedSyntaxNode for TerminalDotDot {
30238 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalDotDot);
30239 type StablePtr = TerminalDotDotPtr;
30240 type Green = TerminalDotDotGreen;
30241 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30242 TerminalDotDotGreen(
30243 Arc::new(GreenNode {
30244 kind: SyntaxKind::TerminalDotDot,
30245 details: GreenNodeDetails::Node {
30246 children: vec![
30247 Trivia::missing(db).0,
30248 TokenDotDot::missing(db).0,
30249 Trivia::missing(db).0,
30250 ],
30251 width: TextWidth::default(),
30252 },
30253 })
30254 .intern(db),
30255 )
30256 }
30257 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30258 let kind = node.kind(db);
30259 assert_eq!(
30260 kind,
30261 SyntaxKind::TerminalDotDot,
30262 "Unexpected SyntaxKind {:?}. Expected {:?}.",
30263 kind,
30264 SyntaxKind::TerminalDotDot
30265 );
30266 let children = db.get_children(node.clone());
30267 Self { node, children }
30268 }
30269 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30270 let kind = node.kind(db);
30271 if kind == SyntaxKind::TerminalDotDot {
30272 Some(Self::from_syntax_node(db, node))
30273 } else {
30274 None
30275 }
30276 }
30277 fn as_syntax_node(&self) -> SyntaxNode {
30278 self.node.clone()
30279 }
30280 fn stable_ptr(&self) -> Self::StablePtr {
30281 TerminalDotDotPtr(self.node.0.stable_ptr)
30282 }
30283}
30284impl From<&TerminalDotDot> for SyntaxStablePtrId {
30285 fn from(node: &TerminalDotDot) -> Self {
30286 node.stable_ptr().untyped()
30287 }
30288}
30289#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30290pub struct TokenDotDotEq {
30291 node: SyntaxNode,
30292}
30293impl Token for TokenDotDotEq {
30294 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
30295 TokenDotDotEqGreen(
30296 Arc::new(GreenNode {
30297 kind: SyntaxKind::TokenDotDotEq,
30298 details: GreenNodeDetails::Token(text),
30299 })
30300 .intern(db),
30301 )
30302 }
30303 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30304 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
30305 .clone()
30306 }
30307}
30308#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30309pub struct TokenDotDotEqPtr(pub SyntaxStablePtrId);
30310impl TypedStablePtr for TokenDotDotEqPtr {
30311 type SyntaxNode = TokenDotDotEq;
30312 fn untyped(&self) -> SyntaxStablePtrId {
30313 self.0
30314 }
30315 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenDotDotEq {
30316 TokenDotDotEq::from_syntax_node(db, self.0.lookup(db))
30317 }
30318}
30319impl From<TokenDotDotEqPtr> for SyntaxStablePtrId {
30320 fn from(ptr: TokenDotDotEqPtr) -> Self {
30321 ptr.untyped()
30322 }
30323}
30324#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30325pub struct TokenDotDotEqGreen(pub GreenId);
30326impl TokenDotDotEqGreen {
30327 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30328 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
30329 }
30330}
30331impl TypedSyntaxNode for TokenDotDotEq {
30332 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenDotDotEq);
30333 type StablePtr = TokenDotDotEqPtr;
30334 type Green = TokenDotDotEqGreen;
30335 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30336 TokenDotDotEqGreen(
30337 Arc::new(GreenNode {
30338 kind: SyntaxKind::TokenMissing,
30339 details: GreenNodeDetails::Token("".into()),
30340 })
30341 .intern(db),
30342 )
30343 }
30344 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30345 match node.0.green.lookup_intern(db).details {
30346 GreenNodeDetails::Token(_) => Self { node },
30347 GreenNodeDetails::Node { .. } => {
30348 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenDotDotEq)
30349 }
30350 }
30351 }
30352 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30353 match node.0.green.lookup_intern(db).details {
30354 GreenNodeDetails::Token(_) => Some(Self { node }),
30355 GreenNodeDetails::Node { .. } => None,
30356 }
30357 }
30358 fn as_syntax_node(&self) -> SyntaxNode {
30359 self.node.clone()
30360 }
30361 fn stable_ptr(&self) -> Self::StablePtr {
30362 TokenDotDotEqPtr(self.node.0.stable_ptr)
30363 }
30364}
30365impl From<&TokenDotDotEq> for SyntaxStablePtrId {
30366 fn from(node: &TokenDotDotEq) -> Self {
30367 node.stable_ptr().untyped()
30368 }
30369}
30370#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30371pub struct TerminalDotDotEq {
30372 node: SyntaxNode,
30373 children: Arc<[SyntaxNode]>,
30374}
30375impl Terminal for TerminalDotDotEq {
30376 const KIND: SyntaxKind = SyntaxKind::TerminalDotDotEq;
30377 type TokenType = TokenDotDotEq;
30378 fn new_green(
30379 db: &dyn SyntaxGroup,
30380 leading_trivia: TriviaGreen,
30381 token: <<TerminalDotDotEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
30382 trailing_trivia: TriviaGreen,
30383 ) -> Self::Green {
30384 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
30385 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
30386 TerminalDotDotEqGreen(
30387 Arc::new(GreenNode {
30388 kind: SyntaxKind::TerminalDotDotEq,
30389 details: GreenNodeDetails::Node { children, width },
30390 })
30391 .intern(db),
30392 )
30393 }
30394 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30395 self.token(db).text(db)
30396 }
30397}
30398impl TerminalDotDotEq {
30399 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30400 Trivia::from_syntax_node(db, self.children[0].clone())
30401 }
30402 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenDotDotEq {
30403 TokenDotDotEq::from_syntax_node(db, self.children[1].clone())
30404 }
30405 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30406 Trivia::from_syntax_node(db, self.children[2].clone())
30407 }
30408}
30409#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30410pub struct TerminalDotDotEqPtr(pub SyntaxStablePtrId);
30411impl TerminalDotDotEqPtr {}
30412impl TypedStablePtr for TerminalDotDotEqPtr {
30413 type SyntaxNode = TerminalDotDotEq;
30414 fn untyped(&self) -> SyntaxStablePtrId {
30415 self.0
30416 }
30417 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalDotDotEq {
30418 TerminalDotDotEq::from_syntax_node(db, self.0.lookup(db))
30419 }
30420}
30421impl From<TerminalDotDotEqPtr> for SyntaxStablePtrId {
30422 fn from(ptr: TerminalDotDotEqPtr) -> Self {
30423 ptr.untyped()
30424 }
30425}
30426#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30427pub struct TerminalDotDotEqGreen(pub GreenId);
30428impl TypedSyntaxNode for TerminalDotDotEq {
30429 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalDotDotEq);
30430 type StablePtr = TerminalDotDotEqPtr;
30431 type Green = TerminalDotDotEqGreen;
30432 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30433 TerminalDotDotEqGreen(
30434 Arc::new(GreenNode {
30435 kind: SyntaxKind::TerminalDotDotEq,
30436 details: GreenNodeDetails::Node {
30437 children: vec![
30438 Trivia::missing(db).0,
30439 TokenDotDotEq::missing(db).0,
30440 Trivia::missing(db).0,
30441 ],
30442 width: TextWidth::default(),
30443 },
30444 })
30445 .intern(db),
30446 )
30447 }
30448 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30449 let kind = node.kind(db);
30450 assert_eq!(
30451 kind,
30452 SyntaxKind::TerminalDotDotEq,
30453 "Unexpected SyntaxKind {:?}. Expected {:?}.",
30454 kind,
30455 SyntaxKind::TerminalDotDotEq
30456 );
30457 let children = db.get_children(node.clone());
30458 Self { node, children }
30459 }
30460 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30461 let kind = node.kind(db);
30462 if kind == SyntaxKind::TerminalDotDotEq {
30463 Some(Self::from_syntax_node(db, node))
30464 } else {
30465 None
30466 }
30467 }
30468 fn as_syntax_node(&self) -> SyntaxNode {
30469 self.node.clone()
30470 }
30471 fn stable_ptr(&self) -> Self::StablePtr {
30472 TerminalDotDotEqPtr(self.node.0.stable_ptr)
30473 }
30474}
30475impl From<&TerminalDotDotEq> for SyntaxStablePtrId {
30476 fn from(node: &TerminalDotDotEq) -> Self {
30477 node.stable_ptr().untyped()
30478 }
30479}
30480#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30481pub struct TokenEndOfFile {
30482 node: SyntaxNode,
30483}
30484impl Token for TokenEndOfFile {
30485 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
30486 TokenEndOfFileGreen(
30487 Arc::new(GreenNode {
30488 kind: SyntaxKind::TokenEndOfFile,
30489 details: GreenNodeDetails::Token(text),
30490 })
30491 .intern(db),
30492 )
30493 }
30494 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30495 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
30496 .clone()
30497 }
30498}
30499#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30500pub struct TokenEndOfFilePtr(pub SyntaxStablePtrId);
30501impl TypedStablePtr for TokenEndOfFilePtr {
30502 type SyntaxNode = TokenEndOfFile;
30503 fn untyped(&self) -> SyntaxStablePtrId {
30504 self.0
30505 }
30506 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenEndOfFile {
30507 TokenEndOfFile::from_syntax_node(db, self.0.lookup(db))
30508 }
30509}
30510impl From<TokenEndOfFilePtr> for SyntaxStablePtrId {
30511 fn from(ptr: TokenEndOfFilePtr) -> Self {
30512 ptr.untyped()
30513 }
30514}
30515#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30516pub struct TokenEndOfFileGreen(pub GreenId);
30517impl TokenEndOfFileGreen {
30518 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30519 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
30520 }
30521}
30522impl TypedSyntaxNode for TokenEndOfFile {
30523 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenEndOfFile);
30524 type StablePtr = TokenEndOfFilePtr;
30525 type Green = TokenEndOfFileGreen;
30526 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30527 TokenEndOfFileGreen(
30528 Arc::new(GreenNode {
30529 kind: SyntaxKind::TokenMissing,
30530 details: GreenNodeDetails::Token("".into()),
30531 })
30532 .intern(db),
30533 )
30534 }
30535 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30536 match node.0.green.lookup_intern(db).details {
30537 GreenNodeDetails::Token(_) => Self { node },
30538 GreenNodeDetails::Node { .. } => {
30539 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenEndOfFile)
30540 }
30541 }
30542 }
30543 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30544 match node.0.green.lookup_intern(db).details {
30545 GreenNodeDetails::Token(_) => Some(Self { node }),
30546 GreenNodeDetails::Node { .. } => None,
30547 }
30548 }
30549 fn as_syntax_node(&self) -> SyntaxNode {
30550 self.node.clone()
30551 }
30552 fn stable_ptr(&self) -> Self::StablePtr {
30553 TokenEndOfFilePtr(self.node.0.stable_ptr)
30554 }
30555}
30556impl From<&TokenEndOfFile> for SyntaxStablePtrId {
30557 fn from(node: &TokenEndOfFile) -> Self {
30558 node.stable_ptr().untyped()
30559 }
30560}
30561#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30562pub struct TerminalEndOfFile {
30563 node: SyntaxNode,
30564 children: Arc<[SyntaxNode]>,
30565}
30566impl Terminal for TerminalEndOfFile {
30567 const KIND: SyntaxKind = SyntaxKind::TerminalEndOfFile;
30568 type TokenType = TokenEndOfFile;
30569 fn new_green(
30570 db: &dyn SyntaxGroup,
30571 leading_trivia: TriviaGreen,
30572 token: <<TerminalEndOfFile as Terminal>::TokenType as TypedSyntaxNode>::Green,
30573 trailing_trivia: TriviaGreen,
30574 ) -> Self::Green {
30575 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
30576 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
30577 TerminalEndOfFileGreen(
30578 Arc::new(GreenNode {
30579 kind: SyntaxKind::TerminalEndOfFile,
30580 details: GreenNodeDetails::Node { children, width },
30581 })
30582 .intern(db),
30583 )
30584 }
30585 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30586 self.token(db).text(db)
30587 }
30588}
30589impl TerminalEndOfFile {
30590 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30591 Trivia::from_syntax_node(db, self.children[0].clone())
30592 }
30593 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenEndOfFile {
30594 TokenEndOfFile::from_syntax_node(db, self.children[1].clone())
30595 }
30596 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30597 Trivia::from_syntax_node(db, self.children[2].clone())
30598 }
30599}
30600#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30601pub struct TerminalEndOfFilePtr(pub SyntaxStablePtrId);
30602impl TerminalEndOfFilePtr {}
30603impl TypedStablePtr for TerminalEndOfFilePtr {
30604 type SyntaxNode = TerminalEndOfFile;
30605 fn untyped(&self) -> SyntaxStablePtrId {
30606 self.0
30607 }
30608 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalEndOfFile {
30609 TerminalEndOfFile::from_syntax_node(db, self.0.lookup(db))
30610 }
30611}
30612impl From<TerminalEndOfFilePtr> for SyntaxStablePtrId {
30613 fn from(ptr: TerminalEndOfFilePtr) -> Self {
30614 ptr.untyped()
30615 }
30616}
30617#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30618pub struct TerminalEndOfFileGreen(pub GreenId);
30619impl TypedSyntaxNode for TerminalEndOfFile {
30620 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalEndOfFile);
30621 type StablePtr = TerminalEndOfFilePtr;
30622 type Green = TerminalEndOfFileGreen;
30623 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30624 TerminalEndOfFileGreen(
30625 Arc::new(GreenNode {
30626 kind: SyntaxKind::TerminalEndOfFile,
30627 details: GreenNodeDetails::Node {
30628 children: vec![
30629 Trivia::missing(db).0,
30630 TokenEndOfFile::missing(db).0,
30631 Trivia::missing(db).0,
30632 ],
30633 width: TextWidth::default(),
30634 },
30635 })
30636 .intern(db),
30637 )
30638 }
30639 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30640 let kind = node.kind(db);
30641 assert_eq!(
30642 kind,
30643 SyntaxKind::TerminalEndOfFile,
30644 "Unexpected SyntaxKind {:?}. Expected {:?}.",
30645 kind,
30646 SyntaxKind::TerminalEndOfFile
30647 );
30648 let children = db.get_children(node.clone());
30649 Self { node, children }
30650 }
30651 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30652 let kind = node.kind(db);
30653 if kind == SyntaxKind::TerminalEndOfFile {
30654 Some(Self::from_syntax_node(db, node))
30655 } else {
30656 None
30657 }
30658 }
30659 fn as_syntax_node(&self) -> SyntaxNode {
30660 self.node.clone()
30661 }
30662 fn stable_ptr(&self) -> Self::StablePtr {
30663 TerminalEndOfFilePtr(self.node.0.stable_ptr)
30664 }
30665}
30666impl From<&TerminalEndOfFile> for SyntaxStablePtrId {
30667 fn from(node: &TerminalEndOfFile) -> Self {
30668 node.stable_ptr().untyped()
30669 }
30670}
30671#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30672pub struct TokenEq {
30673 node: SyntaxNode,
30674}
30675impl Token for TokenEq {
30676 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
30677 TokenEqGreen(
30678 Arc::new(GreenNode {
30679 kind: SyntaxKind::TokenEq,
30680 details: GreenNodeDetails::Token(text),
30681 })
30682 .intern(db),
30683 )
30684 }
30685 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30686 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
30687 .clone()
30688 }
30689}
30690#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30691pub struct TokenEqPtr(pub SyntaxStablePtrId);
30692impl TypedStablePtr for TokenEqPtr {
30693 type SyntaxNode = TokenEq;
30694 fn untyped(&self) -> SyntaxStablePtrId {
30695 self.0
30696 }
30697 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenEq {
30698 TokenEq::from_syntax_node(db, self.0.lookup(db))
30699 }
30700}
30701impl From<TokenEqPtr> for SyntaxStablePtrId {
30702 fn from(ptr: TokenEqPtr) -> Self {
30703 ptr.untyped()
30704 }
30705}
30706#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30707pub struct TokenEqGreen(pub GreenId);
30708impl TokenEqGreen {
30709 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30710 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
30711 }
30712}
30713impl TypedSyntaxNode for TokenEq {
30714 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenEq);
30715 type StablePtr = TokenEqPtr;
30716 type Green = TokenEqGreen;
30717 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30718 TokenEqGreen(
30719 Arc::new(GreenNode {
30720 kind: SyntaxKind::TokenMissing,
30721 details: GreenNodeDetails::Token("".into()),
30722 })
30723 .intern(db),
30724 )
30725 }
30726 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30727 match node.0.green.lookup_intern(db).details {
30728 GreenNodeDetails::Token(_) => Self { node },
30729 GreenNodeDetails::Node { .. } => {
30730 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenEq)
30731 }
30732 }
30733 }
30734 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30735 match node.0.green.lookup_intern(db).details {
30736 GreenNodeDetails::Token(_) => Some(Self { node }),
30737 GreenNodeDetails::Node { .. } => None,
30738 }
30739 }
30740 fn as_syntax_node(&self) -> SyntaxNode {
30741 self.node.clone()
30742 }
30743 fn stable_ptr(&self) -> Self::StablePtr {
30744 TokenEqPtr(self.node.0.stable_ptr)
30745 }
30746}
30747impl From<&TokenEq> for SyntaxStablePtrId {
30748 fn from(node: &TokenEq) -> Self {
30749 node.stable_ptr().untyped()
30750 }
30751}
30752#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30753pub struct TerminalEq {
30754 node: SyntaxNode,
30755 children: Arc<[SyntaxNode]>,
30756}
30757impl Terminal for TerminalEq {
30758 const KIND: SyntaxKind = SyntaxKind::TerminalEq;
30759 type TokenType = TokenEq;
30760 fn new_green(
30761 db: &dyn SyntaxGroup,
30762 leading_trivia: TriviaGreen,
30763 token: <<TerminalEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
30764 trailing_trivia: TriviaGreen,
30765 ) -> Self::Green {
30766 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
30767 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
30768 TerminalEqGreen(
30769 Arc::new(GreenNode {
30770 kind: SyntaxKind::TerminalEq,
30771 details: GreenNodeDetails::Node { children, width },
30772 })
30773 .intern(db),
30774 )
30775 }
30776 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30777 self.token(db).text(db)
30778 }
30779}
30780impl TerminalEq {
30781 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30782 Trivia::from_syntax_node(db, self.children[0].clone())
30783 }
30784 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenEq {
30785 TokenEq::from_syntax_node(db, self.children[1].clone())
30786 }
30787 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30788 Trivia::from_syntax_node(db, self.children[2].clone())
30789 }
30790}
30791#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30792pub struct TerminalEqPtr(pub SyntaxStablePtrId);
30793impl TerminalEqPtr {}
30794impl TypedStablePtr for TerminalEqPtr {
30795 type SyntaxNode = TerminalEq;
30796 fn untyped(&self) -> SyntaxStablePtrId {
30797 self.0
30798 }
30799 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalEq {
30800 TerminalEq::from_syntax_node(db, self.0.lookup(db))
30801 }
30802}
30803impl From<TerminalEqPtr> for SyntaxStablePtrId {
30804 fn from(ptr: TerminalEqPtr) -> Self {
30805 ptr.untyped()
30806 }
30807}
30808#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30809pub struct TerminalEqGreen(pub GreenId);
30810impl TypedSyntaxNode for TerminalEq {
30811 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalEq);
30812 type StablePtr = TerminalEqPtr;
30813 type Green = TerminalEqGreen;
30814 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30815 TerminalEqGreen(
30816 Arc::new(GreenNode {
30817 kind: SyntaxKind::TerminalEq,
30818 details: GreenNodeDetails::Node {
30819 children: vec![
30820 Trivia::missing(db).0,
30821 TokenEq::missing(db).0,
30822 Trivia::missing(db).0,
30823 ],
30824 width: TextWidth::default(),
30825 },
30826 })
30827 .intern(db),
30828 )
30829 }
30830 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30831 let kind = node.kind(db);
30832 assert_eq!(
30833 kind,
30834 SyntaxKind::TerminalEq,
30835 "Unexpected SyntaxKind {:?}. Expected {:?}.",
30836 kind,
30837 SyntaxKind::TerminalEq
30838 );
30839 let children = db.get_children(node.clone());
30840 Self { node, children }
30841 }
30842 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30843 let kind = node.kind(db);
30844 if kind == SyntaxKind::TerminalEq { Some(Self::from_syntax_node(db, node)) } else { None }
30845 }
30846 fn as_syntax_node(&self) -> SyntaxNode {
30847 self.node.clone()
30848 }
30849 fn stable_ptr(&self) -> Self::StablePtr {
30850 TerminalEqPtr(self.node.0.stable_ptr)
30851 }
30852}
30853impl From<&TerminalEq> for SyntaxStablePtrId {
30854 fn from(node: &TerminalEq) -> Self {
30855 node.stable_ptr().untyped()
30856 }
30857}
30858#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30859pub struct TokenEqEq {
30860 node: SyntaxNode,
30861}
30862impl Token for TokenEqEq {
30863 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
30864 TokenEqEqGreen(
30865 Arc::new(GreenNode {
30866 kind: SyntaxKind::TokenEqEq,
30867 details: GreenNodeDetails::Token(text),
30868 })
30869 .intern(db),
30870 )
30871 }
30872 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30873 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
30874 .clone()
30875 }
30876}
30877#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30878pub struct TokenEqEqPtr(pub SyntaxStablePtrId);
30879impl TypedStablePtr for TokenEqEqPtr {
30880 type SyntaxNode = TokenEqEq;
30881 fn untyped(&self) -> SyntaxStablePtrId {
30882 self.0
30883 }
30884 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenEqEq {
30885 TokenEqEq::from_syntax_node(db, self.0.lookup(db))
30886 }
30887}
30888impl From<TokenEqEqPtr> for SyntaxStablePtrId {
30889 fn from(ptr: TokenEqEqPtr) -> Self {
30890 ptr.untyped()
30891 }
30892}
30893#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30894pub struct TokenEqEqGreen(pub GreenId);
30895impl TokenEqEqGreen {
30896 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30897 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
30898 }
30899}
30900impl TypedSyntaxNode for TokenEqEq {
30901 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenEqEq);
30902 type StablePtr = TokenEqEqPtr;
30903 type Green = TokenEqEqGreen;
30904 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30905 TokenEqEqGreen(
30906 Arc::new(GreenNode {
30907 kind: SyntaxKind::TokenMissing,
30908 details: GreenNodeDetails::Token("".into()),
30909 })
30910 .intern(db),
30911 )
30912 }
30913 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30914 match node.0.green.lookup_intern(db).details {
30915 GreenNodeDetails::Token(_) => Self { node },
30916 GreenNodeDetails::Node { .. } => {
30917 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenEqEq)
30918 }
30919 }
30920 }
30921 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30922 match node.0.green.lookup_intern(db).details {
30923 GreenNodeDetails::Token(_) => Some(Self { node }),
30924 GreenNodeDetails::Node { .. } => None,
30925 }
30926 }
30927 fn as_syntax_node(&self) -> SyntaxNode {
30928 self.node.clone()
30929 }
30930 fn stable_ptr(&self) -> Self::StablePtr {
30931 TokenEqEqPtr(self.node.0.stable_ptr)
30932 }
30933}
30934impl From<&TokenEqEq> for SyntaxStablePtrId {
30935 fn from(node: &TokenEqEq) -> Self {
30936 node.stable_ptr().untyped()
30937 }
30938}
30939#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30940pub struct TerminalEqEq {
30941 node: SyntaxNode,
30942 children: Arc<[SyntaxNode]>,
30943}
30944impl Terminal for TerminalEqEq {
30945 const KIND: SyntaxKind = SyntaxKind::TerminalEqEq;
30946 type TokenType = TokenEqEq;
30947 fn new_green(
30948 db: &dyn SyntaxGroup,
30949 leading_trivia: TriviaGreen,
30950 token: <<TerminalEqEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
30951 trailing_trivia: TriviaGreen,
30952 ) -> Self::Green {
30953 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
30954 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
30955 TerminalEqEqGreen(
30956 Arc::new(GreenNode {
30957 kind: SyntaxKind::TerminalEqEq,
30958 details: GreenNodeDetails::Node { children, width },
30959 })
30960 .intern(db),
30961 )
30962 }
30963 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30964 self.token(db).text(db)
30965 }
30966}
30967impl TerminalEqEq {
30968 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30969 Trivia::from_syntax_node(db, self.children[0].clone())
30970 }
30971 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenEqEq {
30972 TokenEqEq::from_syntax_node(db, self.children[1].clone())
30973 }
30974 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30975 Trivia::from_syntax_node(db, self.children[2].clone())
30976 }
30977}
30978#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30979pub struct TerminalEqEqPtr(pub SyntaxStablePtrId);
30980impl TerminalEqEqPtr {}
30981impl TypedStablePtr for TerminalEqEqPtr {
30982 type SyntaxNode = TerminalEqEq;
30983 fn untyped(&self) -> SyntaxStablePtrId {
30984 self.0
30985 }
30986 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalEqEq {
30987 TerminalEqEq::from_syntax_node(db, self.0.lookup(db))
30988 }
30989}
30990impl From<TerminalEqEqPtr> for SyntaxStablePtrId {
30991 fn from(ptr: TerminalEqEqPtr) -> Self {
30992 ptr.untyped()
30993 }
30994}
30995#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30996pub struct TerminalEqEqGreen(pub GreenId);
30997impl TypedSyntaxNode for TerminalEqEq {
30998 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalEqEq);
30999 type StablePtr = TerminalEqEqPtr;
31000 type Green = TerminalEqEqGreen;
31001 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31002 TerminalEqEqGreen(
31003 Arc::new(GreenNode {
31004 kind: SyntaxKind::TerminalEqEq,
31005 details: GreenNodeDetails::Node {
31006 children: vec![
31007 Trivia::missing(db).0,
31008 TokenEqEq::missing(db).0,
31009 Trivia::missing(db).0,
31010 ],
31011 width: TextWidth::default(),
31012 },
31013 })
31014 .intern(db),
31015 )
31016 }
31017 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31018 let kind = node.kind(db);
31019 assert_eq!(
31020 kind,
31021 SyntaxKind::TerminalEqEq,
31022 "Unexpected SyntaxKind {:?}. Expected {:?}.",
31023 kind,
31024 SyntaxKind::TerminalEqEq
31025 );
31026 let children = db.get_children(node.clone());
31027 Self { node, children }
31028 }
31029 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31030 let kind = node.kind(db);
31031 if kind == SyntaxKind::TerminalEqEq { Some(Self::from_syntax_node(db, node)) } else { None }
31032 }
31033 fn as_syntax_node(&self) -> SyntaxNode {
31034 self.node.clone()
31035 }
31036 fn stable_ptr(&self) -> Self::StablePtr {
31037 TerminalEqEqPtr(self.node.0.stable_ptr)
31038 }
31039}
31040impl From<&TerminalEqEq> for SyntaxStablePtrId {
31041 fn from(node: &TerminalEqEq) -> Self {
31042 node.stable_ptr().untyped()
31043 }
31044}
31045#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31046pub struct TokenGE {
31047 node: SyntaxNode,
31048}
31049impl Token for TokenGE {
31050 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
31051 TokenGEGreen(
31052 Arc::new(GreenNode {
31053 kind: SyntaxKind::TokenGE,
31054 details: GreenNodeDetails::Token(text),
31055 })
31056 .intern(db),
31057 )
31058 }
31059 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31060 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
31061 .clone()
31062 }
31063}
31064#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31065pub struct TokenGEPtr(pub SyntaxStablePtrId);
31066impl TypedStablePtr for TokenGEPtr {
31067 type SyntaxNode = TokenGE;
31068 fn untyped(&self) -> SyntaxStablePtrId {
31069 self.0
31070 }
31071 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenGE {
31072 TokenGE::from_syntax_node(db, self.0.lookup(db))
31073 }
31074}
31075impl From<TokenGEPtr> for SyntaxStablePtrId {
31076 fn from(ptr: TokenGEPtr) -> Self {
31077 ptr.untyped()
31078 }
31079}
31080#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31081pub struct TokenGEGreen(pub GreenId);
31082impl TokenGEGreen {
31083 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31084 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
31085 }
31086}
31087impl TypedSyntaxNode for TokenGE {
31088 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenGE);
31089 type StablePtr = TokenGEPtr;
31090 type Green = TokenGEGreen;
31091 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31092 TokenGEGreen(
31093 Arc::new(GreenNode {
31094 kind: SyntaxKind::TokenMissing,
31095 details: GreenNodeDetails::Token("".into()),
31096 })
31097 .intern(db),
31098 )
31099 }
31100 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31101 match node.0.green.lookup_intern(db).details {
31102 GreenNodeDetails::Token(_) => Self { node },
31103 GreenNodeDetails::Node { .. } => {
31104 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenGE)
31105 }
31106 }
31107 }
31108 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31109 match node.0.green.lookup_intern(db).details {
31110 GreenNodeDetails::Token(_) => Some(Self { node }),
31111 GreenNodeDetails::Node { .. } => None,
31112 }
31113 }
31114 fn as_syntax_node(&self) -> SyntaxNode {
31115 self.node.clone()
31116 }
31117 fn stable_ptr(&self) -> Self::StablePtr {
31118 TokenGEPtr(self.node.0.stable_ptr)
31119 }
31120}
31121impl From<&TokenGE> for SyntaxStablePtrId {
31122 fn from(node: &TokenGE) -> Self {
31123 node.stable_ptr().untyped()
31124 }
31125}
31126#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31127pub struct TerminalGE {
31128 node: SyntaxNode,
31129 children: Arc<[SyntaxNode]>,
31130}
31131impl Terminal for TerminalGE {
31132 const KIND: SyntaxKind = SyntaxKind::TerminalGE;
31133 type TokenType = TokenGE;
31134 fn new_green(
31135 db: &dyn SyntaxGroup,
31136 leading_trivia: TriviaGreen,
31137 token: <<TerminalGE as Terminal>::TokenType as TypedSyntaxNode>::Green,
31138 trailing_trivia: TriviaGreen,
31139 ) -> Self::Green {
31140 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
31141 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
31142 TerminalGEGreen(
31143 Arc::new(GreenNode {
31144 kind: SyntaxKind::TerminalGE,
31145 details: GreenNodeDetails::Node { children, width },
31146 })
31147 .intern(db),
31148 )
31149 }
31150 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31151 self.token(db).text(db)
31152 }
31153}
31154impl TerminalGE {
31155 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31156 Trivia::from_syntax_node(db, self.children[0].clone())
31157 }
31158 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenGE {
31159 TokenGE::from_syntax_node(db, self.children[1].clone())
31160 }
31161 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31162 Trivia::from_syntax_node(db, self.children[2].clone())
31163 }
31164}
31165#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31166pub struct TerminalGEPtr(pub SyntaxStablePtrId);
31167impl TerminalGEPtr {}
31168impl TypedStablePtr for TerminalGEPtr {
31169 type SyntaxNode = TerminalGE;
31170 fn untyped(&self) -> SyntaxStablePtrId {
31171 self.0
31172 }
31173 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalGE {
31174 TerminalGE::from_syntax_node(db, self.0.lookup(db))
31175 }
31176}
31177impl From<TerminalGEPtr> for SyntaxStablePtrId {
31178 fn from(ptr: TerminalGEPtr) -> Self {
31179 ptr.untyped()
31180 }
31181}
31182#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31183pub struct TerminalGEGreen(pub GreenId);
31184impl TypedSyntaxNode for TerminalGE {
31185 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalGE);
31186 type StablePtr = TerminalGEPtr;
31187 type Green = TerminalGEGreen;
31188 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31189 TerminalGEGreen(
31190 Arc::new(GreenNode {
31191 kind: SyntaxKind::TerminalGE,
31192 details: GreenNodeDetails::Node {
31193 children: vec![
31194 Trivia::missing(db).0,
31195 TokenGE::missing(db).0,
31196 Trivia::missing(db).0,
31197 ],
31198 width: TextWidth::default(),
31199 },
31200 })
31201 .intern(db),
31202 )
31203 }
31204 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31205 let kind = node.kind(db);
31206 assert_eq!(
31207 kind,
31208 SyntaxKind::TerminalGE,
31209 "Unexpected SyntaxKind {:?}. Expected {:?}.",
31210 kind,
31211 SyntaxKind::TerminalGE
31212 );
31213 let children = db.get_children(node.clone());
31214 Self { node, children }
31215 }
31216 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31217 let kind = node.kind(db);
31218 if kind == SyntaxKind::TerminalGE { Some(Self::from_syntax_node(db, node)) } else { None }
31219 }
31220 fn as_syntax_node(&self) -> SyntaxNode {
31221 self.node.clone()
31222 }
31223 fn stable_ptr(&self) -> Self::StablePtr {
31224 TerminalGEPtr(self.node.0.stable_ptr)
31225 }
31226}
31227impl From<&TerminalGE> for SyntaxStablePtrId {
31228 fn from(node: &TerminalGE) -> Self {
31229 node.stable_ptr().untyped()
31230 }
31231}
31232#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31233pub struct TokenGT {
31234 node: SyntaxNode,
31235}
31236impl Token for TokenGT {
31237 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
31238 TokenGTGreen(
31239 Arc::new(GreenNode {
31240 kind: SyntaxKind::TokenGT,
31241 details: GreenNodeDetails::Token(text),
31242 })
31243 .intern(db),
31244 )
31245 }
31246 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31247 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
31248 .clone()
31249 }
31250}
31251#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31252pub struct TokenGTPtr(pub SyntaxStablePtrId);
31253impl TypedStablePtr for TokenGTPtr {
31254 type SyntaxNode = TokenGT;
31255 fn untyped(&self) -> SyntaxStablePtrId {
31256 self.0
31257 }
31258 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenGT {
31259 TokenGT::from_syntax_node(db, self.0.lookup(db))
31260 }
31261}
31262impl From<TokenGTPtr> for SyntaxStablePtrId {
31263 fn from(ptr: TokenGTPtr) -> Self {
31264 ptr.untyped()
31265 }
31266}
31267#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31268pub struct TokenGTGreen(pub GreenId);
31269impl TokenGTGreen {
31270 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31271 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
31272 }
31273}
31274impl TypedSyntaxNode for TokenGT {
31275 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenGT);
31276 type StablePtr = TokenGTPtr;
31277 type Green = TokenGTGreen;
31278 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31279 TokenGTGreen(
31280 Arc::new(GreenNode {
31281 kind: SyntaxKind::TokenMissing,
31282 details: GreenNodeDetails::Token("".into()),
31283 })
31284 .intern(db),
31285 )
31286 }
31287 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31288 match node.0.green.lookup_intern(db).details {
31289 GreenNodeDetails::Token(_) => Self { node },
31290 GreenNodeDetails::Node { .. } => {
31291 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenGT)
31292 }
31293 }
31294 }
31295 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31296 match node.0.green.lookup_intern(db).details {
31297 GreenNodeDetails::Token(_) => Some(Self { node }),
31298 GreenNodeDetails::Node { .. } => None,
31299 }
31300 }
31301 fn as_syntax_node(&self) -> SyntaxNode {
31302 self.node.clone()
31303 }
31304 fn stable_ptr(&self) -> Self::StablePtr {
31305 TokenGTPtr(self.node.0.stable_ptr)
31306 }
31307}
31308impl From<&TokenGT> for SyntaxStablePtrId {
31309 fn from(node: &TokenGT) -> Self {
31310 node.stable_ptr().untyped()
31311 }
31312}
31313#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31314pub struct TerminalGT {
31315 node: SyntaxNode,
31316 children: Arc<[SyntaxNode]>,
31317}
31318impl Terminal for TerminalGT {
31319 const KIND: SyntaxKind = SyntaxKind::TerminalGT;
31320 type TokenType = TokenGT;
31321 fn new_green(
31322 db: &dyn SyntaxGroup,
31323 leading_trivia: TriviaGreen,
31324 token: <<TerminalGT as Terminal>::TokenType as TypedSyntaxNode>::Green,
31325 trailing_trivia: TriviaGreen,
31326 ) -> Self::Green {
31327 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
31328 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
31329 TerminalGTGreen(
31330 Arc::new(GreenNode {
31331 kind: SyntaxKind::TerminalGT,
31332 details: GreenNodeDetails::Node { children, width },
31333 })
31334 .intern(db),
31335 )
31336 }
31337 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31338 self.token(db).text(db)
31339 }
31340}
31341impl TerminalGT {
31342 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31343 Trivia::from_syntax_node(db, self.children[0].clone())
31344 }
31345 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenGT {
31346 TokenGT::from_syntax_node(db, self.children[1].clone())
31347 }
31348 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31349 Trivia::from_syntax_node(db, self.children[2].clone())
31350 }
31351}
31352#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31353pub struct TerminalGTPtr(pub SyntaxStablePtrId);
31354impl TerminalGTPtr {}
31355impl TypedStablePtr for TerminalGTPtr {
31356 type SyntaxNode = TerminalGT;
31357 fn untyped(&self) -> SyntaxStablePtrId {
31358 self.0
31359 }
31360 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalGT {
31361 TerminalGT::from_syntax_node(db, self.0.lookup(db))
31362 }
31363}
31364impl From<TerminalGTPtr> for SyntaxStablePtrId {
31365 fn from(ptr: TerminalGTPtr) -> Self {
31366 ptr.untyped()
31367 }
31368}
31369#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31370pub struct TerminalGTGreen(pub GreenId);
31371impl TypedSyntaxNode for TerminalGT {
31372 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalGT);
31373 type StablePtr = TerminalGTPtr;
31374 type Green = TerminalGTGreen;
31375 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31376 TerminalGTGreen(
31377 Arc::new(GreenNode {
31378 kind: SyntaxKind::TerminalGT,
31379 details: GreenNodeDetails::Node {
31380 children: vec![
31381 Trivia::missing(db).0,
31382 TokenGT::missing(db).0,
31383 Trivia::missing(db).0,
31384 ],
31385 width: TextWidth::default(),
31386 },
31387 })
31388 .intern(db),
31389 )
31390 }
31391 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31392 let kind = node.kind(db);
31393 assert_eq!(
31394 kind,
31395 SyntaxKind::TerminalGT,
31396 "Unexpected SyntaxKind {:?}. Expected {:?}.",
31397 kind,
31398 SyntaxKind::TerminalGT
31399 );
31400 let children = db.get_children(node.clone());
31401 Self { node, children }
31402 }
31403 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31404 let kind = node.kind(db);
31405 if kind == SyntaxKind::TerminalGT { Some(Self::from_syntax_node(db, node)) } else { None }
31406 }
31407 fn as_syntax_node(&self) -> SyntaxNode {
31408 self.node.clone()
31409 }
31410 fn stable_ptr(&self) -> Self::StablePtr {
31411 TerminalGTPtr(self.node.0.stable_ptr)
31412 }
31413}
31414impl From<&TerminalGT> for SyntaxStablePtrId {
31415 fn from(node: &TerminalGT) -> Self {
31416 node.stable_ptr().untyped()
31417 }
31418}
31419#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31420pub struct TokenHash {
31421 node: SyntaxNode,
31422}
31423impl Token for TokenHash {
31424 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
31425 TokenHashGreen(
31426 Arc::new(GreenNode {
31427 kind: SyntaxKind::TokenHash,
31428 details: GreenNodeDetails::Token(text),
31429 })
31430 .intern(db),
31431 )
31432 }
31433 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31434 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
31435 .clone()
31436 }
31437}
31438#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31439pub struct TokenHashPtr(pub SyntaxStablePtrId);
31440impl TypedStablePtr for TokenHashPtr {
31441 type SyntaxNode = TokenHash;
31442 fn untyped(&self) -> SyntaxStablePtrId {
31443 self.0
31444 }
31445 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenHash {
31446 TokenHash::from_syntax_node(db, self.0.lookup(db))
31447 }
31448}
31449impl From<TokenHashPtr> for SyntaxStablePtrId {
31450 fn from(ptr: TokenHashPtr) -> Self {
31451 ptr.untyped()
31452 }
31453}
31454#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31455pub struct TokenHashGreen(pub GreenId);
31456impl TokenHashGreen {
31457 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31458 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
31459 }
31460}
31461impl TypedSyntaxNode for TokenHash {
31462 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenHash);
31463 type StablePtr = TokenHashPtr;
31464 type Green = TokenHashGreen;
31465 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31466 TokenHashGreen(
31467 Arc::new(GreenNode {
31468 kind: SyntaxKind::TokenMissing,
31469 details: GreenNodeDetails::Token("".into()),
31470 })
31471 .intern(db),
31472 )
31473 }
31474 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31475 match node.0.green.lookup_intern(db).details {
31476 GreenNodeDetails::Token(_) => Self { node },
31477 GreenNodeDetails::Node { .. } => {
31478 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenHash)
31479 }
31480 }
31481 }
31482 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31483 match node.0.green.lookup_intern(db).details {
31484 GreenNodeDetails::Token(_) => Some(Self { node }),
31485 GreenNodeDetails::Node { .. } => None,
31486 }
31487 }
31488 fn as_syntax_node(&self) -> SyntaxNode {
31489 self.node.clone()
31490 }
31491 fn stable_ptr(&self) -> Self::StablePtr {
31492 TokenHashPtr(self.node.0.stable_ptr)
31493 }
31494}
31495impl From<&TokenHash> for SyntaxStablePtrId {
31496 fn from(node: &TokenHash) -> Self {
31497 node.stable_ptr().untyped()
31498 }
31499}
31500#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31501pub struct TerminalHash {
31502 node: SyntaxNode,
31503 children: Arc<[SyntaxNode]>,
31504}
31505impl Terminal for TerminalHash {
31506 const KIND: SyntaxKind = SyntaxKind::TerminalHash;
31507 type TokenType = TokenHash;
31508 fn new_green(
31509 db: &dyn SyntaxGroup,
31510 leading_trivia: TriviaGreen,
31511 token: <<TerminalHash as Terminal>::TokenType as TypedSyntaxNode>::Green,
31512 trailing_trivia: TriviaGreen,
31513 ) -> Self::Green {
31514 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
31515 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
31516 TerminalHashGreen(
31517 Arc::new(GreenNode {
31518 kind: SyntaxKind::TerminalHash,
31519 details: GreenNodeDetails::Node { children, width },
31520 })
31521 .intern(db),
31522 )
31523 }
31524 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31525 self.token(db).text(db)
31526 }
31527}
31528impl TerminalHash {
31529 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31530 Trivia::from_syntax_node(db, self.children[0].clone())
31531 }
31532 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenHash {
31533 TokenHash::from_syntax_node(db, self.children[1].clone())
31534 }
31535 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31536 Trivia::from_syntax_node(db, self.children[2].clone())
31537 }
31538}
31539#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31540pub struct TerminalHashPtr(pub SyntaxStablePtrId);
31541impl TerminalHashPtr {}
31542impl TypedStablePtr for TerminalHashPtr {
31543 type SyntaxNode = TerminalHash;
31544 fn untyped(&self) -> SyntaxStablePtrId {
31545 self.0
31546 }
31547 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalHash {
31548 TerminalHash::from_syntax_node(db, self.0.lookup(db))
31549 }
31550}
31551impl From<TerminalHashPtr> for SyntaxStablePtrId {
31552 fn from(ptr: TerminalHashPtr) -> Self {
31553 ptr.untyped()
31554 }
31555}
31556#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31557pub struct TerminalHashGreen(pub GreenId);
31558impl TypedSyntaxNode for TerminalHash {
31559 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalHash);
31560 type StablePtr = TerminalHashPtr;
31561 type Green = TerminalHashGreen;
31562 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31563 TerminalHashGreen(
31564 Arc::new(GreenNode {
31565 kind: SyntaxKind::TerminalHash,
31566 details: GreenNodeDetails::Node {
31567 children: vec![
31568 Trivia::missing(db).0,
31569 TokenHash::missing(db).0,
31570 Trivia::missing(db).0,
31571 ],
31572 width: TextWidth::default(),
31573 },
31574 })
31575 .intern(db),
31576 )
31577 }
31578 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31579 let kind = node.kind(db);
31580 assert_eq!(
31581 kind,
31582 SyntaxKind::TerminalHash,
31583 "Unexpected SyntaxKind {:?}. Expected {:?}.",
31584 kind,
31585 SyntaxKind::TerminalHash
31586 );
31587 let children = db.get_children(node.clone());
31588 Self { node, children }
31589 }
31590 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31591 let kind = node.kind(db);
31592 if kind == SyntaxKind::TerminalHash { Some(Self::from_syntax_node(db, node)) } else { None }
31593 }
31594 fn as_syntax_node(&self) -> SyntaxNode {
31595 self.node.clone()
31596 }
31597 fn stable_ptr(&self) -> Self::StablePtr {
31598 TerminalHashPtr(self.node.0.stable_ptr)
31599 }
31600}
31601impl From<&TerminalHash> for SyntaxStablePtrId {
31602 fn from(node: &TerminalHash) -> Self {
31603 node.stable_ptr().untyped()
31604 }
31605}
31606#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31607pub struct TokenLBrace {
31608 node: SyntaxNode,
31609}
31610impl Token for TokenLBrace {
31611 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
31612 TokenLBraceGreen(
31613 Arc::new(GreenNode {
31614 kind: SyntaxKind::TokenLBrace,
31615 details: GreenNodeDetails::Token(text),
31616 })
31617 .intern(db),
31618 )
31619 }
31620 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31621 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
31622 .clone()
31623 }
31624}
31625#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31626pub struct TokenLBracePtr(pub SyntaxStablePtrId);
31627impl TypedStablePtr for TokenLBracePtr {
31628 type SyntaxNode = TokenLBrace;
31629 fn untyped(&self) -> SyntaxStablePtrId {
31630 self.0
31631 }
31632 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLBrace {
31633 TokenLBrace::from_syntax_node(db, self.0.lookup(db))
31634 }
31635}
31636impl From<TokenLBracePtr> for SyntaxStablePtrId {
31637 fn from(ptr: TokenLBracePtr) -> Self {
31638 ptr.untyped()
31639 }
31640}
31641#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31642pub struct TokenLBraceGreen(pub GreenId);
31643impl TokenLBraceGreen {
31644 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31645 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
31646 }
31647}
31648impl TypedSyntaxNode for TokenLBrace {
31649 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLBrace);
31650 type StablePtr = TokenLBracePtr;
31651 type Green = TokenLBraceGreen;
31652 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31653 TokenLBraceGreen(
31654 Arc::new(GreenNode {
31655 kind: SyntaxKind::TokenMissing,
31656 details: GreenNodeDetails::Token("".into()),
31657 })
31658 .intern(db),
31659 )
31660 }
31661 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31662 match node.0.green.lookup_intern(db).details {
31663 GreenNodeDetails::Token(_) => Self { node },
31664 GreenNodeDetails::Node { .. } => {
31665 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenLBrace)
31666 }
31667 }
31668 }
31669 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31670 match node.0.green.lookup_intern(db).details {
31671 GreenNodeDetails::Token(_) => Some(Self { node }),
31672 GreenNodeDetails::Node { .. } => None,
31673 }
31674 }
31675 fn as_syntax_node(&self) -> SyntaxNode {
31676 self.node.clone()
31677 }
31678 fn stable_ptr(&self) -> Self::StablePtr {
31679 TokenLBracePtr(self.node.0.stable_ptr)
31680 }
31681}
31682impl From<&TokenLBrace> for SyntaxStablePtrId {
31683 fn from(node: &TokenLBrace) -> Self {
31684 node.stable_ptr().untyped()
31685 }
31686}
31687#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31688pub struct TerminalLBrace {
31689 node: SyntaxNode,
31690 children: Arc<[SyntaxNode]>,
31691}
31692impl Terminal for TerminalLBrace {
31693 const KIND: SyntaxKind = SyntaxKind::TerminalLBrace;
31694 type TokenType = TokenLBrace;
31695 fn new_green(
31696 db: &dyn SyntaxGroup,
31697 leading_trivia: TriviaGreen,
31698 token: <<TerminalLBrace as Terminal>::TokenType as TypedSyntaxNode>::Green,
31699 trailing_trivia: TriviaGreen,
31700 ) -> Self::Green {
31701 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
31702 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
31703 TerminalLBraceGreen(
31704 Arc::new(GreenNode {
31705 kind: SyntaxKind::TerminalLBrace,
31706 details: GreenNodeDetails::Node { children, width },
31707 })
31708 .intern(db),
31709 )
31710 }
31711 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31712 self.token(db).text(db)
31713 }
31714}
31715impl TerminalLBrace {
31716 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31717 Trivia::from_syntax_node(db, self.children[0].clone())
31718 }
31719 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLBrace {
31720 TokenLBrace::from_syntax_node(db, self.children[1].clone())
31721 }
31722 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31723 Trivia::from_syntax_node(db, self.children[2].clone())
31724 }
31725}
31726#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31727pub struct TerminalLBracePtr(pub SyntaxStablePtrId);
31728impl TerminalLBracePtr {}
31729impl TypedStablePtr for TerminalLBracePtr {
31730 type SyntaxNode = TerminalLBrace;
31731 fn untyped(&self) -> SyntaxStablePtrId {
31732 self.0
31733 }
31734 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
31735 TerminalLBrace::from_syntax_node(db, self.0.lookup(db))
31736 }
31737}
31738impl From<TerminalLBracePtr> for SyntaxStablePtrId {
31739 fn from(ptr: TerminalLBracePtr) -> Self {
31740 ptr.untyped()
31741 }
31742}
31743#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31744pub struct TerminalLBraceGreen(pub GreenId);
31745impl TypedSyntaxNode for TerminalLBrace {
31746 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLBrace);
31747 type StablePtr = TerminalLBracePtr;
31748 type Green = TerminalLBraceGreen;
31749 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31750 TerminalLBraceGreen(
31751 Arc::new(GreenNode {
31752 kind: SyntaxKind::TerminalLBrace,
31753 details: GreenNodeDetails::Node {
31754 children: vec![
31755 Trivia::missing(db).0,
31756 TokenLBrace::missing(db).0,
31757 Trivia::missing(db).0,
31758 ],
31759 width: TextWidth::default(),
31760 },
31761 })
31762 .intern(db),
31763 )
31764 }
31765 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31766 let kind = node.kind(db);
31767 assert_eq!(
31768 kind,
31769 SyntaxKind::TerminalLBrace,
31770 "Unexpected SyntaxKind {:?}. Expected {:?}.",
31771 kind,
31772 SyntaxKind::TerminalLBrace
31773 );
31774 let children = db.get_children(node.clone());
31775 Self { node, children }
31776 }
31777 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31778 let kind = node.kind(db);
31779 if kind == SyntaxKind::TerminalLBrace {
31780 Some(Self::from_syntax_node(db, node))
31781 } else {
31782 None
31783 }
31784 }
31785 fn as_syntax_node(&self) -> SyntaxNode {
31786 self.node.clone()
31787 }
31788 fn stable_ptr(&self) -> Self::StablePtr {
31789 TerminalLBracePtr(self.node.0.stable_ptr)
31790 }
31791}
31792impl From<&TerminalLBrace> for SyntaxStablePtrId {
31793 fn from(node: &TerminalLBrace) -> Self {
31794 node.stable_ptr().untyped()
31795 }
31796}
31797#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31798pub struct TokenLBrack {
31799 node: SyntaxNode,
31800}
31801impl Token for TokenLBrack {
31802 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
31803 TokenLBrackGreen(
31804 Arc::new(GreenNode {
31805 kind: SyntaxKind::TokenLBrack,
31806 details: GreenNodeDetails::Token(text),
31807 })
31808 .intern(db),
31809 )
31810 }
31811 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31812 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
31813 .clone()
31814 }
31815}
31816#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31817pub struct TokenLBrackPtr(pub SyntaxStablePtrId);
31818impl TypedStablePtr for TokenLBrackPtr {
31819 type SyntaxNode = TokenLBrack;
31820 fn untyped(&self) -> SyntaxStablePtrId {
31821 self.0
31822 }
31823 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLBrack {
31824 TokenLBrack::from_syntax_node(db, self.0.lookup(db))
31825 }
31826}
31827impl From<TokenLBrackPtr> for SyntaxStablePtrId {
31828 fn from(ptr: TokenLBrackPtr) -> Self {
31829 ptr.untyped()
31830 }
31831}
31832#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31833pub struct TokenLBrackGreen(pub GreenId);
31834impl TokenLBrackGreen {
31835 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31836 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
31837 }
31838}
31839impl TypedSyntaxNode for TokenLBrack {
31840 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLBrack);
31841 type StablePtr = TokenLBrackPtr;
31842 type Green = TokenLBrackGreen;
31843 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31844 TokenLBrackGreen(
31845 Arc::new(GreenNode {
31846 kind: SyntaxKind::TokenMissing,
31847 details: GreenNodeDetails::Token("".into()),
31848 })
31849 .intern(db),
31850 )
31851 }
31852 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31853 match node.0.green.lookup_intern(db).details {
31854 GreenNodeDetails::Token(_) => Self { node },
31855 GreenNodeDetails::Node { .. } => {
31856 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenLBrack)
31857 }
31858 }
31859 }
31860 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31861 match node.0.green.lookup_intern(db).details {
31862 GreenNodeDetails::Token(_) => Some(Self { node }),
31863 GreenNodeDetails::Node { .. } => None,
31864 }
31865 }
31866 fn as_syntax_node(&self) -> SyntaxNode {
31867 self.node.clone()
31868 }
31869 fn stable_ptr(&self) -> Self::StablePtr {
31870 TokenLBrackPtr(self.node.0.stable_ptr)
31871 }
31872}
31873impl From<&TokenLBrack> for SyntaxStablePtrId {
31874 fn from(node: &TokenLBrack) -> Self {
31875 node.stable_ptr().untyped()
31876 }
31877}
31878#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31879pub struct TerminalLBrack {
31880 node: SyntaxNode,
31881 children: Arc<[SyntaxNode]>,
31882}
31883impl Terminal for TerminalLBrack {
31884 const KIND: SyntaxKind = SyntaxKind::TerminalLBrack;
31885 type TokenType = TokenLBrack;
31886 fn new_green(
31887 db: &dyn SyntaxGroup,
31888 leading_trivia: TriviaGreen,
31889 token: <<TerminalLBrack as Terminal>::TokenType as TypedSyntaxNode>::Green,
31890 trailing_trivia: TriviaGreen,
31891 ) -> Self::Green {
31892 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
31893 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
31894 TerminalLBrackGreen(
31895 Arc::new(GreenNode {
31896 kind: SyntaxKind::TerminalLBrack,
31897 details: GreenNodeDetails::Node { children, width },
31898 })
31899 .intern(db),
31900 )
31901 }
31902 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31903 self.token(db).text(db)
31904 }
31905}
31906impl TerminalLBrack {
31907 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31908 Trivia::from_syntax_node(db, self.children[0].clone())
31909 }
31910 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLBrack {
31911 TokenLBrack::from_syntax_node(db, self.children[1].clone())
31912 }
31913 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31914 Trivia::from_syntax_node(db, self.children[2].clone())
31915 }
31916}
31917#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31918pub struct TerminalLBrackPtr(pub SyntaxStablePtrId);
31919impl TerminalLBrackPtr {}
31920impl TypedStablePtr for TerminalLBrackPtr {
31921 type SyntaxNode = TerminalLBrack;
31922 fn untyped(&self) -> SyntaxStablePtrId {
31923 self.0
31924 }
31925 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
31926 TerminalLBrack::from_syntax_node(db, self.0.lookup(db))
31927 }
31928}
31929impl From<TerminalLBrackPtr> for SyntaxStablePtrId {
31930 fn from(ptr: TerminalLBrackPtr) -> Self {
31931 ptr.untyped()
31932 }
31933}
31934#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31935pub struct TerminalLBrackGreen(pub GreenId);
31936impl TypedSyntaxNode for TerminalLBrack {
31937 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLBrack);
31938 type StablePtr = TerminalLBrackPtr;
31939 type Green = TerminalLBrackGreen;
31940 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31941 TerminalLBrackGreen(
31942 Arc::new(GreenNode {
31943 kind: SyntaxKind::TerminalLBrack,
31944 details: GreenNodeDetails::Node {
31945 children: vec![
31946 Trivia::missing(db).0,
31947 TokenLBrack::missing(db).0,
31948 Trivia::missing(db).0,
31949 ],
31950 width: TextWidth::default(),
31951 },
31952 })
31953 .intern(db),
31954 )
31955 }
31956 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31957 let kind = node.kind(db);
31958 assert_eq!(
31959 kind,
31960 SyntaxKind::TerminalLBrack,
31961 "Unexpected SyntaxKind {:?}. Expected {:?}.",
31962 kind,
31963 SyntaxKind::TerminalLBrack
31964 );
31965 let children = db.get_children(node.clone());
31966 Self { node, children }
31967 }
31968 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31969 let kind = node.kind(db);
31970 if kind == SyntaxKind::TerminalLBrack {
31971 Some(Self::from_syntax_node(db, node))
31972 } else {
31973 None
31974 }
31975 }
31976 fn as_syntax_node(&self) -> SyntaxNode {
31977 self.node.clone()
31978 }
31979 fn stable_ptr(&self) -> Self::StablePtr {
31980 TerminalLBrackPtr(self.node.0.stable_ptr)
31981 }
31982}
31983impl From<&TerminalLBrack> for SyntaxStablePtrId {
31984 fn from(node: &TerminalLBrack) -> Self {
31985 node.stable_ptr().untyped()
31986 }
31987}
31988#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31989pub struct TokenLE {
31990 node: SyntaxNode,
31991}
31992impl Token for TokenLE {
31993 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
31994 TokenLEGreen(
31995 Arc::new(GreenNode {
31996 kind: SyntaxKind::TokenLE,
31997 details: GreenNodeDetails::Token(text),
31998 })
31999 .intern(db),
32000 )
32001 }
32002 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32003 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
32004 .clone()
32005 }
32006}
32007#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32008pub struct TokenLEPtr(pub SyntaxStablePtrId);
32009impl TypedStablePtr for TokenLEPtr {
32010 type SyntaxNode = TokenLE;
32011 fn untyped(&self) -> SyntaxStablePtrId {
32012 self.0
32013 }
32014 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLE {
32015 TokenLE::from_syntax_node(db, self.0.lookup(db))
32016 }
32017}
32018impl From<TokenLEPtr> for SyntaxStablePtrId {
32019 fn from(ptr: TokenLEPtr) -> Self {
32020 ptr.untyped()
32021 }
32022}
32023#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32024pub struct TokenLEGreen(pub GreenId);
32025impl TokenLEGreen {
32026 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32027 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
32028 }
32029}
32030impl TypedSyntaxNode for TokenLE {
32031 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLE);
32032 type StablePtr = TokenLEPtr;
32033 type Green = TokenLEGreen;
32034 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32035 TokenLEGreen(
32036 Arc::new(GreenNode {
32037 kind: SyntaxKind::TokenMissing,
32038 details: GreenNodeDetails::Token("".into()),
32039 })
32040 .intern(db),
32041 )
32042 }
32043 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32044 match node.0.green.lookup_intern(db).details {
32045 GreenNodeDetails::Token(_) => Self { node },
32046 GreenNodeDetails::Node { .. } => {
32047 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenLE)
32048 }
32049 }
32050 }
32051 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32052 match node.0.green.lookup_intern(db).details {
32053 GreenNodeDetails::Token(_) => Some(Self { node }),
32054 GreenNodeDetails::Node { .. } => None,
32055 }
32056 }
32057 fn as_syntax_node(&self) -> SyntaxNode {
32058 self.node.clone()
32059 }
32060 fn stable_ptr(&self) -> Self::StablePtr {
32061 TokenLEPtr(self.node.0.stable_ptr)
32062 }
32063}
32064impl From<&TokenLE> for SyntaxStablePtrId {
32065 fn from(node: &TokenLE) -> Self {
32066 node.stable_ptr().untyped()
32067 }
32068}
32069#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32070pub struct TerminalLE {
32071 node: SyntaxNode,
32072 children: Arc<[SyntaxNode]>,
32073}
32074impl Terminal for TerminalLE {
32075 const KIND: SyntaxKind = SyntaxKind::TerminalLE;
32076 type TokenType = TokenLE;
32077 fn new_green(
32078 db: &dyn SyntaxGroup,
32079 leading_trivia: TriviaGreen,
32080 token: <<TerminalLE as Terminal>::TokenType as TypedSyntaxNode>::Green,
32081 trailing_trivia: TriviaGreen,
32082 ) -> Self::Green {
32083 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
32084 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
32085 TerminalLEGreen(
32086 Arc::new(GreenNode {
32087 kind: SyntaxKind::TerminalLE,
32088 details: GreenNodeDetails::Node { children, width },
32089 })
32090 .intern(db),
32091 )
32092 }
32093 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32094 self.token(db).text(db)
32095 }
32096}
32097impl TerminalLE {
32098 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32099 Trivia::from_syntax_node(db, self.children[0].clone())
32100 }
32101 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLE {
32102 TokenLE::from_syntax_node(db, self.children[1].clone())
32103 }
32104 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32105 Trivia::from_syntax_node(db, self.children[2].clone())
32106 }
32107}
32108#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32109pub struct TerminalLEPtr(pub SyntaxStablePtrId);
32110impl TerminalLEPtr {}
32111impl TypedStablePtr for TerminalLEPtr {
32112 type SyntaxNode = TerminalLE;
32113 fn untyped(&self) -> SyntaxStablePtrId {
32114 self.0
32115 }
32116 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLE {
32117 TerminalLE::from_syntax_node(db, self.0.lookup(db))
32118 }
32119}
32120impl From<TerminalLEPtr> for SyntaxStablePtrId {
32121 fn from(ptr: TerminalLEPtr) -> Self {
32122 ptr.untyped()
32123 }
32124}
32125#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32126pub struct TerminalLEGreen(pub GreenId);
32127impl TypedSyntaxNode for TerminalLE {
32128 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLE);
32129 type StablePtr = TerminalLEPtr;
32130 type Green = TerminalLEGreen;
32131 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32132 TerminalLEGreen(
32133 Arc::new(GreenNode {
32134 kind: SyntaxKind::TerminalLE,
32135 details: GreenNodeDetails::Node {
32136 children: vec![
32137 Trivia::missing(db).0,
32138 TokenLE::missing(db).0,
32139 Trivia::missing(db).0,
32140 ],
32141 width: TextWidth::default(),
32142 },
32143 })
32144 .intern(db),
32145 )
32146 }
32147 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32148 let kind = node.kind(db);
32149 assert_eq!(
32150 kind,
32151 SyntaxKind::TerminalLE,
32152 "Unexpected SyntaxKind {:?}. Expected {:?}.",
32153 kind,
32154 SyntaxKind::TerminalLE
32155 );
32156 let children = db.get_children(node.clone());
32157 Self { node, children }
32158 }
32159 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32160 let kind = node.kind(db);
32161 if kind == SyntaxKind::TerminalLE { Some(Self::from_syntax_node(db, node)) } else { None }
32162 }
32163 fn as_syntax_node(&self) -> SyntaxNode {
32164 self.node.clone()
32165 }
32166 fn stable_ptr(&self) -> Self::StablePtr {
32167 TerminalLEPtr(self.node.0.stable_ptr)
32168 }
32169}
32170impl From<&TerminalLE> for SyntaxStablePtrId {
32171 fn from(node: &TerminalLE) -> Self {
32172 node.stable_ptr().untyped()
32173 }
32174}
32175#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32176pub struct TokenLParen {
32177 node: SyntaxNode,
32178}
32179impl Token for TokenLParen {
32180 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
32181 TokenLParenGreen(
32182 Arc::new(GreenNode {
32183 kind: SyntaxKind::TokenLParen,
32184 details: GreenNodeDetails::Token(text),
32185 })
32186 .intern(db),
32187 )
32188 }
32189 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32190 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
32191 .clone()
32192 }
32193}
32194#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32195pub struct TokenLParenPtr(pub SyntaxStablePtrId);
32196impl TypedStablePtr for TokenLParenPtr {
32197 type SyntaxNode = TokenLParen;
32198 fn untyped(&self) -> SyntaxStablePtrId {
32199 self.0
32200 }
32201 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLParen {
32202 TokenLParen::from_syntax_node(db, self.0.lookup(db))
32203 }
32204}
32205impl From<TokenLParenPtr> for SyntaxStablePtrId {
32206 fn from(ptr: TokenLParenPtr) -> Self {
32207 ptr.untyped()
32208 }
32209}
32210#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32211pub struct TokenLParenGreen(pub GreenId);
32212impl TokenLParenGreen {
32213 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32214 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
32215 }
32216}
32217impl TypedSyntaxNode for TokenLParen {
32218 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLParen);
32219 type StablePtr = TokenLParenPtr;
32220 type Green = TokenLParenGreen;
32221 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32222 TokenLParenGreen(
32223 Arc::new(GreenNode {
32224 kind: SyntaxKind::TokenMissing,
32225 details: GreenNodeDetails::Token("".into()),
32226 })
32227 .intern(db),
32228 )
32229 }
32230 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32231 match node.0.green.lookup_intern(db).details {
32232 GreenNodeDetails::Token(_) => Self { node },
32233 GreenNodeDetails::Node { .. } => {
32234 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenLParen)
32235 }
32236 }
32237 }
32238 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32239 match node.0.green.lookup_intern(db).details {
32240 GreenNodeDetails::Token(_) => Some(Self { node }),
32241 GreenNodeDetails::Node { .. } => None,
32242 }
32243 }
32244 fn as_syntax_node(&self) -> SyntaxNode {
32245 self.node.clone()
32246 }
32247 fn stable_ptr(&self) -> Self::StablePtr {
32248 TokenLParenPtr(self.node.0.stable_ptr)
32249 }
32250}
32251impl From<&TokenLParen> for SyntaxStablePtrId {
32252 fn from(node: &TokenLParen) -> Self {
32253 node.stable_ptr().untyped()
32254 }
32255}
32256#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32257pub struct TerminalLParen {
32258 node: SyntaxNode,
32259 children: Arc<[SyntaxNode]>,
32260}
32261impl Terminal for TerminalLParen {
32262 const KIND: SyntaxKind = SyntaxKind::TerminalLParen;
32263 type TokenType = TokenLParen;
32264 fn new_green(
32265 db: &dyn SyntaxGroup,
32266 leading_trivia: TriviaGreen,
32267 token: <<TerminalLParen as Terminal>::TokenType as TypedSyntaxNode>::Green,
32268 trailing_trivia: TriviaGreen,
32269 ) -> Self::Green {
32270 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
32271 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
32272 TerminalLParenGreen(
32273 Arc::new(GreenNode {
32274 kind: SyntaxKind::TerminalLParen,
32275 details: GreenNodeDetails::Node { children, width },
32276 })
32277 .intern(db),
32278 )
32279 }
32280 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32281 self.token(db).text(db)
32282 }
32283}
32284impl TerminalLParen {
32285 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32286 Trivia::from_syntax_node(db, self.children[0].clone())
32287 }
32288 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLParen {
32289 TokenLParen::from_syntax_node(db, self.children[1].clone())
32290 }
32291 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32292 Trivia::from_syntax_node(db, self.children[2].clone())
32293 }
32294}
32295#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32296pub struct TerminalLParenPtr(pub SyntaxStablePtrId);
32297impl TerminalLParenPtr {}
32298impl TypedStablePtr for TerminalLParenPtr {
32299 type SyntaxNode = TerminalLParen;
32300 fn untyped(&self) -> SyntaxStablePtrId {
32301 self.0
32302 }
32303 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
32304 TerminalLParen::from_syntax_node(db, self.0.lookup(db))
32305 }
32306}
32307impl From<TerminalLParenPtr> for SyntaxStablePtrId {
32308 fn from(ptr: TerminalLParenPtr) -> Self {
32309 ptr.untyped()
32310 }
32311}
32312#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32313pub struct TerminalLParenGreen(pub GreenId);
32314impl TypedSyntaxNode for TerminalLParen {
32315 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLParen);
32316 type StablePtr = TerminalLParenPtr;
32317 type Green = TerminalLParenGreen;
32318 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32319 TerminalLParenGreen(
32320 Arc::new(GreenNode {
32321 kind: SyntaxKind::TerminalLParen,
32322 details: GreenNodeDetails::Node {
32323 children: vec![
32324 Trivia::missing(db).0,
32325 TokenLParen::missing(db).0,
32326 Trivia::missing(db).0,
32327 ],
32328 width: TextWidth::default(),
32329 },
32330 })
32331 .intern(db),
32332 )
32333 }
32334 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32335 let kind = node.kind(db);
32336 assert_eq!(
32337 kind,
32338 SyntaxKind::TerminalLParen,
32339 "Unexpected SyntaxKind {:?}. Expected {:?}.",
32340 kind,
32341 SyntaxKind::TerminalLParen
32342 );
32343 let children = db.get_children(node.clone());
32344 Self { node, children }
32345 }
32346 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32347 let kind = node.kind(db);
32348 if kind == SyntaxKind::TerminalLParen {
32349 Some(Self::from_syntax_node(db, node))
32350 } else {
32351 None
32352 }
32353 }
32354 fn as_syntax_node(&self) -> SyntaxNode {
32355 self.node.clone()
32356 }
32357 fn stable_ptr(&self) -> Self::StablePtr {
32358 TerminalLParenPtr(self.node.0.stable_ptr)
32359 }
32360}
32361impl From<&TerminalLParen> for SyntaxStablePtrId {
32362 fn from(node: &TerminalLParen) -> Self {
32363 node.stable_ptr().untyped()
32364 }
32365}
32366#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32367pub struct TokenLT {
32368 node: SyntaxNode,
32369}
32370impl Token for TokenLT {
32371 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
32372 TokenLTGreen(
32373 Arc::new(GreenNode {
32374 kind: SyntaxKind::TokenLT,
32375 details: GreenNodeDetails::Token(text),
32376 })
32377 .intern(db),
32378 )
32379 }
32380 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32381 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
32382 .clone()
32383 }
32384}
32385#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32386pub struct TokenLTPtr(pub SyntaxStablePtrId);
32387impl TypedStablePtr for TokenLTPtr {
32388 type SyntaxNode = TokenLT;
32389 fn untyped(&self) -> SyntaxStablePtrId {
32390 self.0
32391 }
32392 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLT {
32393 TokenLT::from_syntax_node(db, self.0.lookup(db))
32394 }
32395}
32396impl From<TokenLTPtr> for SyntaxStablePtrId {
32397 fn from(ptr: TokenLTPtr) -> Self {
32398 ptr.untyped()
32399 }
32400}
32401#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32402pub struct TokenLTGreen(pub GreenId);
32403impl TokenLTGreen {
32404 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32405 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
32406 }
32407}
32408impl TypedSyntaxNode for TokenLT {
32409 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLT);
32410 type StablePtr = TokenLTPtr;
32411 type Green = TokenLTGreen;
32412 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32413 TokenLTGreen(
32414 Arc::new(GreenNode {
32415 kind: SyntaxKind::TokenMissing,
32416 details: GreenNodeDetails::Token("".into()),
32417 })
32418 .intern(db),
32419 )
32420 }
32421 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32422 match node.0.green.lookup_intern(db).details {
32423 GreenNodeDetails::Token(_) => Self { node },
32424 GreenNodeDetails::Node { .. } => {
32425 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenLT)
32426 }
32427 }
32428 }
32429 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32430 match node.0.green.lookup_intern(db).details {
32431 GreenNodeDetails::Token(_) => Some(Self { node }),
32432 GreenNodeDetails::Node { .. } => None,
32433 }
32434 }
32435 fn as_syntax_node(&self) -> SyntaxNode {
32436 self.node.clone()
32437 }
32438 fn stable_ptr(&self) -> Self::StablePtr {
32439 TokenLTPtr(self.node.0.stable_ptr)
32440 }
32441}
32442impl From<&TokenLT> for SyntaxStablePtrId {
32443 fn from(node: &TokenLT) -> Self {
32444 node.stable_ptr().untyped()
32445 }
32446}
32447#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32448pub struct TerminalLT {
32449 node: SyntaxNode,
32450 children: Arc<[SyntaxNode]>,
32451}
32452impl Terminal for TerminalLT {
32453 const KIND: SyntaxKind = SyntaxKind::TerminalLT;
32454 type TokenType = TokenLT;
32455 fn new_green(
32456 db: &dyn SyntaxGroup,
32457 leading_trivia: TriviaGreen,
32458 token: <<TerminalLT as Terminal>::TokenType as TypedSyntaxNode>::Green,
32459 trailing_trivia: TriviaGreen,
32460 ) -> Self::Green {
32461 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
32462 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
32463 TerminalLTGreen(
32464 Arc::new(GreenNode {
32465 kind: SyntaxKind::TerminalLT,
32466 details: GreenNodeDetails::Node { children, width },
32467 })
32468 .intern(db),
32469 )
32470 }
32471 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32472 self.token(db).text(db)
32473 }
32474}
32475impl TerminalLT {
32476 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32477 Trivia::from_syntax_node(db, self.children[0].clone())
32478 }
32479 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLT {
32480 TokenLT::from_syntax_node(db, self.children[1].clone())
32481 }
32482 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32483 Trivia::from_syntax_node(db, self.children[2].clone())
32484 }
32485}
32486#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32487pub struct TerminalLTPtr(pub SyntaxStablePtrId);
32488impl TerminalLTPtr {}
32489impl TypedStablePtr for TerminalLTPtr {
32490 type SyntaxNode = TerminalLT;
32491 fn untyped(&self) -> SyntaxStablePtrId {
32492 self.0
32493 }
32494 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLT {
32495 TerminalLT::from_syntax_node(db, self.0.lookup(db))
32496 }
32497}
32498impl From<TerminalLTPtr> for SyntaxStablePtrId {
32499 fn from(ptr: TerminalLTPtr) -> Self {
32500 ptr.untyped()
32501 }
32502}
32503#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32504pub struct TerminalLTGreen(pub GreenId);
32505impl TypedSyntaxNode for TerminalLT {
32506 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLT);
32507 type StablePtr = TerminalLTPtr;
32508 type Green = TerminalLTGreen;
32509 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32510 TerminalLTGreen(
32511 Arc::new(GreenNode {
32512 kind: SyntaxKind::TerminalLT,
32513 details: GreenNodeDetails::Node {
32514 children: vec![
32515 Trivia::missing(db).0,
32516 TokenLT::missing(db).0,
32517 Trivia::missing(db).0,
32518 ],
32519 width: TextWidth::default(),
32520 },
32521 })
32522 .intern(db),
32523 )
32524 }
32525 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32526 let kind = node.kind(db);
32527 assert_eq!(
32528 kind,
32529 SyntaxKind::TerminalLT,
32530 "Unexpected SyntaxKind {:?}. Expected {:?}.",
32531 kind,
32532 SyntaxKind::TerminalLT
32533 );
32534 let children = db.get_children(node.clone());
32535 Self { node, children }
32536 }
32537 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32538 let kind = node.kind(db);
32539 if kind == SyntaxKind::TerminalLT { Some(Self::from_syntax_node(db, node)) } else { None }
32540 }
32541 fn as_syntax_node(&self) -> SyntaxNode {
32542 self.node.clone()
32543 }
32544 fn stable_ptr(&self) -> Self::StablePtr {
32545 TerminalLTPtr(self.node.0.stable_ptr)
32546 }
32547}
32548impl From<&TerminalLT> for SyntaxStablePtrId {
32549 fn from(node: &TerminalLT) -> Self {
32550 node.stable_ptr().untyped()
32551 }
32552}
32553#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32554pub struct TokenMatchArrow {
32555 node: SyntaxNode,
32556}
32557impl Token for TokenMatchArrow {
32558 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
32559 TokenMatchArrowGreen(
32560 Arc::new(GreenNode {
32561 kind: SyntaxKind::TokenMatchArrow,
32562 details: GreenNodeDetails::Token(text),
32563 })
32564 .intern(db),
32565 )
32566 }
32567 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32568 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
32569 .clone()
32570 }
32571}
32572#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32573pub struct TokenMatchArrowPtr(pub SyntaxStablePtrId);
32574impl TypedStablePtr for TokenMatchArrowPtr {
32575 type SyntaxNode = TokenMatchArrow;
32576 fn untyped(&self) -> SyntaxStablePtrId {
32577 self.0
32578 }
32579 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMatchArrow {
32580 TokenMatchArrow::from_syntax_node(db, self.0.lookup(db))
32581 }
32582}
32583impl From<TokenMatchArrowPtr> for SyntaxStablePtrId {
32584 fn from(ptr: TokenMatchArrowPtr) -> Self {
32585 ptr.untyped()
32586 }
32587}
32588#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32589pub struct TokenMatchArrowGreen(pub GreenId);
32590impl TokenMatchArrowGreen {
32591 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32592 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
32593 }
32594}
32595impl TypedSyntaxNode for TokenMatchArrow {
32596 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMatchArrow);
32597 type StablePtr = TokenMatchArrowPtr;
32598 type Green = TokenMatchArrowGreen;
32599 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32600 TokenMatchArrowGreen(
32601 Arc::new(GreenNode {
32602 kind: SyntaxKind::TokenMissing,
32603 details: GreenNodeDetails::Token("".into()),
32604 })
32605 .intern(db),
32606 )
32607 }
32608 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32609 match node.0.green.lookup_intern(db).details {
32610 GreenNodeDetails::Token(_) => Self { node },
32611 GreenNodeDetails::Node { .. } => {
32612 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMatchArrow)
32613 }
32614 }
32615 }
32616 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32617 match node.0.green.lookup_intern(db).details {
32618 GreenNodeDetails::Token(_) => Some(Self { node }),
32619 GreenNodeDetails::Node { .. } => None,
32620 }
32621 }
32622 fn as_syntax_node(&self) -> SyntaxNode {
32623 self.node.clone()
32624 }
32625 fn stable_ptr(&self) -> Self::StablePtr {
32626 TokenMatchArrowPtr(self.node.0.stable_ptr)
32627 }
32628}
32629impl From<&TokenMatchArrow> for SyntaxStablePtrId {
32630 fn from(node: &TokenMatchArrow) -> Self {
32631 node.stable_ptr().untyped()
32632 }
32633}
32634#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32635pub struct TerminalMatchArrow {
32636 node: SyntaxNode,
32637 children: Arc<[SyntaxNode]>,
32638}
32639impl Terminal for TerminalMatchArrow {
32640 const KIND: SyntaxKind = SyntaxKind::TerminalMatchArrow;
32641 type TokenType = TokenMatchArrow;
32642 fn new_green(
32643 db: &dyn SyntaxGroup,
32644 leading_trivia: TriviaGreen,
32645 token: <<TerminalMatchArrow as Terminal>::TokenType as TypedSyntaxNode>::Green,
32646 trailing_trivia: TriviaGreen,
32647 ) -> Self::Green {
32648 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
32649 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
32650 TerminalMatchArrowGreen(
32651 Arc::new(GreenNode {
32652 kind: SyntaxKind::TerminalMatchArrow,
32653 details: GreenNodeDetails::Node { children, width },
32654 })
32655 .intern(db),
32656 )
32657 }
32658 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32659 self.token(db).text(db)
32660 }
32661}
32662impl TerminalMatchArrow {
32663 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32664 Trivia::from_syntax_node(db, self.children[0].clone())
32665 }
32666 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMatchArrow {
32667 TokenMatchArrow::from_syntax_node(db, self.children[1].clone())
32668 }
32669 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32670 Trivia::from_syntax_node(db, self.children[2].clone())
32671 }
32672}
32673#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32674pub struct TerminalMatchArrowPtr(pub SyntaxStablePtrId);
32675impl TerminalMatchArrowPtr {}
32676impl TypedStablePtr for TerminalMatchArrowPtr {
32677 type SyntaxNode = TerminalMatchArrow;
32678 fn untyped(&self) -> SyntaxStablePtrId {
32679 self.0
32680 }
32681 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMatchArrow {
32682 TerminalMatchArrow::from_syntax_node(db, self.0.lookup(db))
32683 }
32684}
32685impl From<TerminalMatchArrowPtr> for SyntaxStablePtrId {
32686 fn from(ptr: TerminalMatchArrowPtr) -> Self {
32687 ptr.untyped()
32688 }
32689}
32690#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32691pub struct TerminalMatchArrowGreen(pub GreenId);
32692impl TypedSyntaxNode for TerminalMatchArrow {
32693 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMatchArrow);
32694 type StablePtr = TerminalMatchArrowPtr;
32695 type Green = TerminalMatchArrowGreen;
32696 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32697 TerminalMatchArrowGreen(
32698 Arc::new(GreenNode {
32699 kind: SyntaxKind::TerminalMatchArrow,
32700 details: GreenNodeDetails::Node {
32701 children: vec![
32702 Trivia::missing(db).0,
32703 TokenMatchArrow::missing(db).0,
32704 Trivia::missing(db).0,
32705 ],
32706 width: TextWidth::default(),
32707 },
32708 })
32709 .intern(db),
32710 )
32711 }
32712 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32713 let kind = node.kind(db);
32714 assert_eq!(
32715 kind,
32716 SyntaxKind::TerminalMatchArrow,
32717 "Unexpected SyntaxKind {:?}. Expected {:?}.",
32718 kind,
32719 SyntaxKind::TerminalMatchArrow
32720 );
32721 let children = db.get_children(node.clone());
32722 Self { node, children }
32723 }
32724 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32725 let kind = node.kind(db);
32726 if kind == SyntaxKind::TerminalMatchArrow {
32727 Some(Self::from_syntax_node(db, node))
32728 } else {
32729 None
32730 }
32731 }
32732 fn as_syntax_node(&self) -> SyntaxNode {
32733 self.node.clone()
32734 }
32735 fn stable_ptr(&self) -> Self::StablePtr {
32736 TerminalMatchArrowPtr(self.node.0.stable_ptr)
32737 }
32738}
32739impl From<&TerminalMatchArrow> for SyntaxStablePtrId {
32740 fn from(node: &TerminalMatchArrow) -> Self {
32741 node.stable_ptr().untyped()
32742 }
32743}
32744#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32745pub struct TokenMinus {
32746 node: SyntaxNode,
32747}
32748impl Token for TokenMinus {
32749 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
32750 TokenMinusGreen(
32751 Arc::new(GreenNode {
32752 kind: SyntaxKind::TokenMinus,
32753 details: GreenNodeDetails::Token(text),
32754 })
32755 .intern(db),
32756 )
32757 }
32758 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32759 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
32760 .clone()
32761 }
32762}
32763#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32764pub struct TokenMinusPtr(pub SyntaxStablePtrId);
32765impl TypedStablePtr for TokenMinusPtr {
32766 type SyntaxNode = TokenMinus;
32767 fn untyped(&self) -> SyntaxStablePtrId {
32768 self.0
32769 }
32770 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMinus {
32771 TokenMinus::from_syntax_node(db, self.0.lookup(db))
32772 }
32773}
32774impl From<TokenMinusPtr> for SyntaxStablePtrId {
32775 fn from(ptr: TokenMinusPtr) -> Self {
32776 ptr.untyped()
32777 }
32778}
32779#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32780pub struct TokenMinusGreen(pub GreenId);
32781impl TokenMinusGreen {
32782 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32783 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
32784 }
32785}
32786impl TypedSyntaxNode for TokenMinus {
32787 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMinus);
32788 type StablePtr = TokenMinusPtr;
32789 type Green = TokenMinusGreen;
32790 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32791 TokenMinusGreen(
32792 Arc::new(GreenNode {
32793 kind: SyntaxKind::TokenMissing,
32794 details: GreenNodeDetails::Token("".into()),
32795 })
32796 .intern(db),
32797 )
32798 }
32799 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32800 match node.0.green.lookup_intern(db).details {
32801 GreenNodeDetails::Token(_) => Self { node },
32802 GreenNodeDetails::Node { .. } => {
32803 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMinus)
32804 }
32805 }
32806 }
32807 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32808 match node.0.green.lookup_intern(db).details {
32809 GreenNodeDetails::Token(_) => Some(Self { node }),
32810 GreenNodeDetails::Node { .. } => None,
32811 }
32812 }
32813 fn as_syntax_node(&self) -> SyntaxNode {
32814 self.node.clone()
32815 }
32816 fn stable_ptr(&self) -> Self::StablePtr {
32817 TokenMinusPtr(self.node.0.stable_ptr)
32818 }
32819}
32820impl From<&TokenMinus> for SyntaxStablePtrId {
32821 fn from(node: &TokenMinus) -> Self {
32822 node.stable_ptr().untyped()
32823 }
32824}
32825#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32826pub struct TerminalMinus {
32827 node: SyntaxNode,
32828 children: Arc<[SyntaxNode]>,
32829}
32830impl Terminal for TerminalMinus {
32831 const KIND: SyntaxKind = SyntaxKind::TerminalMinus;
32832 type TokenType = TokenMinus;
32833 fn new_green(
32834 db: &dyn SyntaxGroup,
32835 leading_trivia: TriviaGreen,
32836 token: <<TerminalMinus as Terminal>::TokenType as TypedSyntaxNode>::Green,
32837 trailing_trivia: TriviaGreen,
32838 ) -> Self::Green {
32839 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
32840 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
32841 TerminalMinusGreen(
32842 Arc::new(GreenNode {
32843 kind: SyntaxKind::TerminalMinus,
32844 details: GreenNodeDetails::Node { children, width },
32845 })
32846 .intern(db),
32847 )
32848 }
32849 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32850 self.token(db).text(db)
32851 }
32852}
32853impl TerminalMinus {
32854 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32855 Trivia::from_syntax_node(db, self.children[0].clone())
32856 }
32857 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMinus {
32858 TokenMinus::from_syntax_node(db, self.children[1].clone())
32859 }
32860 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32861 Trivia::from_syntax_node(db, self.children[2].clone())
32862 }
32863}
32864#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32865pub struct TerminalMinusPtr(pub SyntaxStablePtrId);
32866impl TerminalMinusPtr {}
32867impl TypedStablePtr for TerminalMinusPtr {
32868 type SyntaxNode = TerminalMinus;
32869 fn untyped(&self) -> SyntaxStablePtrId {
32870 self.0
32871 }
32872 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMinus {
32873 TerminalMinus::from_syntax_node(db, self.0.lookup(db))
32874 }
32875}
32876impl From<TerminalMinusPtr> for SyntaxStablePtrId {
32877 fn from(ptr: TerminalMinusPtr) -> Self {
32878 ptr.untyped()
32879 }
32880}
32881#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32882pub struct TerminalMinusGreen(pub GreenId);
32883impl TypedSyntaxNode for TerminalMinus {
32884 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMinus);
32885 type StablePtr = TerminalMinusPtr;
32886 type Green = TerminalMinusGreen;
32887 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32888 TerminalMinusGreen(
32889 Arc::new(GreenNode {
32890 kind: SyntaxKind::TerminalMinus,
32891 details: GreenNodeDetails::Node {
32892 children: vec![
32893 Trivia::missing(db).0,
32894 TokenMinus::missing(db).0,
32895 Trivia::missing(db).0,
32896 ],
32897 width: TextWidth::default(),
32898 },
32899 })
32900 .intern(db),
32901 )
32902 }
32903 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32904 let kind = node.kind(db);
32905 assert_eq!(
32906 kind,
32907 SyntaxKind::TerminalMinus,
32908 "Unexpected SyntaxKind {:?}. Expected {:?}.",
32909 kind,
32910 SyntaxKind::TerminalMinus
32911 );
32912 let children = db.get_children(node.clone());
32913 Self { node, children }
32914 }
32915 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32916 let kind = node.kind(db);
32917 if kind == SyntaxKind::TerminalMinus {
32918 Some(Self::from_syntax_node(db, node))
32919 } else {
32920 None
32921 }
32922 }
32923 fn as_syntax_node(&self) -> SyntaxNode {
32924 self.node.clone()
32925 }
32926 fn stable_ptr(&self) -> Self::StablePtr {
32927 TerminalMinusPtr(self.node.0.stable_ptr)
32928 }
32929}
32930impl From<&TerminalMinus> for SyntaxStablePtrId {
32931 fn from(node: &TerminalMinus) -> Self {
32932 node.stable_ptr().untyped()
32933 }
32934}
32935#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32936pub struct TokenMinusEq {
32937 node: SyntaxNode,
32938}
32939impl Token for TokenMinusEq {
32940 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
32941 TokenMinusEqGreen(
32942 Arc::new(GreenNode {
32943 kind: SyntaxKind::TokenMinusEq,
32944 details: GreenNodeDetails::Token(text),
32945 })
32946 .intern(db),
32947 )
32948 }
32949 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32950 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
32951 .clone()
32952 }
32953}
32954#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32955pub struct TokenMinusEqPtr(pub SyntaxStablePtrId);
32956impl TypedStablePtr for TokenMinusEqPtr {
32957 type SyntaxNode = TokenMinusEq;
32958 fn untyped(&self) -> SyntaxStablePtrId {
32959 self.0
32960 }
32961 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMinusEq {
32962 TokenMinusEq::from_syntax_node(db, self.0.lookup(db))
32963 }
32964}
32965impl From<TokenMinusEqPtr> for SyntaxStablePtrId {
32966 fn from(ptr: TokenMinusEqPtr) -> Self {
32967 ptr.untyped()
32968 }
32969}
32970#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32971pub struct TokenMinusEqGreen(pub GreenId);
32972impl TokenMinusEqGreen {
32973 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32974 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
32975 }
32976}
32977impl TypedSyntaxNode for TokenMinusEq {
32978 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMinusEq);
32979 type StablePtr = TokenMinusEqPtr;
32980 type Green = TokenMinusEqGreen;
32981 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32982 TokenMinusEqGreen(
32983 Arc::new(GreenNode {
32984 kind: SyntaxKind::TokenMissing,
32985 details: GreenNodeDetails::Token("".into()),
32986 })
32987 .intern(db),
32988 )
32989 }
32990 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32991 match node.0.green.lookup_intern(db).details {
32992 GreenNodeDetails::Token(_) => Self { node },
32993 GreenNodeDetails::Node { .. } => {
32994 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMinusEq)
32995 }
32996 }
32997 }
32998 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32999 match node.0.green.lookup_intern(db).details {
33000 GreenNodeDetails::Token(_) => Some(Self { node }),
33001 GreenNodeDetails::Node { .. } => None,
33002 }
33003 }
33004 fn as_syntax_node(&self) -> SyntaxNode {
33005 self.node.clone()
33006 }
33007 fn stable_ptr(&self) -> Self::StablePtr {
33008 TokenMinusEqPtr(self.node.0.stable_ptr)
33009 }
33010}
33011impl From<&TokenMinusEq> for SyntaxStablePtrId {
33012 fn from(node: &TokenMinusEq) -> Self {
33013 node.stable_ptr().untyped()
33014 }
33015}
33016#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33017pub struct TerminalMinusEq {
33018 node: SyntaxNode,
33019 children: Arc<[SyntaxNode]>,
33020}
33021impl Terminal for TerminalMinusEq {
33022 const KIND: SyntaxKind = SyntaxKind::TerminalMinusEq;
33023 type TokenType = TokenMinusEq;
33024 fn new_green(
33025 db: &dyn SyntaxGroup,
33026 leading_trivia: TriviaGreen,
33027 token: <<TerminalMinusEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
33028 trailing_trivia: TriviaGreen,
33029 ) -> Self::Green {
33030 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
33031 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
33032 TerminalMinusEqGreen(
33033 Arc::new(GreenNode {
33034 kind: SyntaxKind::TerminalMinusEq,
33035 details: GreenNodeDetails::Node { children, width },
33036 })
33037 .intern(db),
33038 )
33039 }
33040 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33041 self.token(db).text(db)
33042 }
33043}
33044impl TerminalMinusEq {
33045 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33046 Trivia::from_syntax_node(db, self.children[0].clone())
33047 }
33048 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMinusEq {
33049 TokenMinusEq::from_syntax_node(db, self.children[1].clone())
33050 }
33051 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33052 Trivia::from_syntax_node(db, self.children[2].clone())
33053 }
33054}
33055#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33056pub struct TerminalMinusEqPtr(pub SyntaxStablePtrId);
33057impl TerminalMinusEqPtr {}
33058impl TypedStablePtr for TerminalMinusEqPtr {
33059 type SyntaxNode = TerminalMinusEq;
33060 fn untyped(&self) -> SyntaxStablePtrId {
33061 self.0
33062 }
33063 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMinusEq {
33064 TerminalMinusEq::from_syntax_node(db, self.0.lookup(db))
33065 }
33066}
33067impl From<TerminalMinusEqPtr> for SyntaxStablePtrId {
33068 fn from(ptr: TerminalMinusEqPtr) -> Self {
33069 ptr.untyped()
33070 }
33071}
33072#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33073pub struct TerminalMinusEqGreen(pub GreenId);
33074impl TypedSyntaxNode for TerminalMinusEq {
33075 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMinusEq);
33076 type StablePtr = TerminalMinusEqPtr;
33077 type Green = TerminalMinusEqGreen;
33078 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33079 TerminalMinusEqGreen(
33080 Arc::new(GreenNode {
33081 kind: SyntaxKind::TerminalMinusEq,
33082 details: GreenNodeDetails::Node {
33083 children: vec![
33084 Trivia::missing(db).0,
33085 TokenMinusEq::missing(db).0,
33086 Trivia::missing(db).0,
33087 ],
33088 width: TextWidth::default(),
33089 },
33090 })
33091 .intern(db),
33092 )
33093 }
33094 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33095 let kind = node.kind(db);
33096 assert_eq!(
33097 kind,
33098 SyntaxKind::TerminalMinusEq,
33099 "Unexpected SyntaxKind {:?}. Expected {:?}.",
33100 kind,
33101 SyntaxKind::TerminalMinusEq
33102 );
33103 let children = db.get_children(node.clone());
33104 Self { node, children }
33105 }
33106 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33107 let kind = node.kind(db);
33108 if kind == SyntaxKind::TerminalMinusEq {
33109 Some(Self::from_syntax_node(db, node))
33110 } else {
33111 None
33112 }
33113 }
33114 fn as_syntax_node(&self) -> SyntaxNode {
33115 self.node.clone()
33116 }
33117 fn stable_ptr(&self) -> Self::StablePtr {
33118 TerminalMinusEqPtr(self.node.0.stable_ptr)
33119 }
33120}
33121impl From<&TerminalMinusEq> for SyntaxStablePtrId {
33122 fn from(node: &TerminalMinusEq) -> Self {
33123 node.stable_ptr().untyped()
33124 }
33125}
33126#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33127pub struct TokenMod {
33128 node: SyntaxNode,
33129}
33130impl Token for TokenMod {
33131 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
33132 TokenModGreen(
33133 Arc::new(GreenNode {
33134 kind: SyntaxKind::TokenMod,
33135 details: GreenNodeDetails::Token(text),
33136 })
33137 .intern(db),
33138 )
33139 }
33140 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33141 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
33142 .clone()
33143 }
33144}
33145#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33146pub struct TokenModPtr(pub SyntaxStablePtrId);
33147impl TypedStablePtr for TokenModPtr {
33148 type SyntaxNode = TokenMod;
33149 fn untyped(&self) -> SyntaxStablePtrId {
33150 self.0
33151 }
33152 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMod {
33153 TokenMod::from_syntax_node(db, self.0.lookup(db))
33154 }
33155}
33156impl From<TokenModPtr> for SyntaxStablePtrId {
33157 fn from(ptr: TokenModPtr) -> Self {
33158 ptr.untyped()
33159 }
33160}
33161#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33162pub struct TokenModGreen(pub GreenId);
33163impl TokenModGreen {
33164 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33165 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
33166 }
33167}
33168impl TypedSyntaxNode for TokenMod {
33169 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMod);
33170 type StablePtr = TokenModPtr;
33171 type Green = TokenModGreen;
33172 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33173 TokenModGreen(
33174 Arc::new(GreenNode {
33175 kind: SyntaxKind::TokenMissing,
33176 details: GreenNodeDetails::Token("".into()),
33177 })
33178 .intern(db),
33179 )
33180 }
33181 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33182 match node.0.green.lookup_intern(db).details {
33183 GreenNodeDetails::Token(_) => Self { node },
33184 GreenNodeDetails::Node { .. } => {
33185 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMod)
33186 }
33187 }
33188 }
33189 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33190 match node.0.green.lookup_intern(db).details {
33191 GreenNodeDetails::Token(_) => Some(Self { node }),
33192 GreenNodeDetails::Node { .. } => None,
33193 }
33194 }
33195 fn as_syntax_node(&self) -> SyntaxNode {
33196 self.node.clone()
33197 }
33198 fn stable_ptr(&self) -> Self::StablePtr {
33199 TokenModPtr(self.node.0.stable_ptr)
33200 }
33201}
33202impl From<&TokenMod> for SyntaxStablePtrId {
33203 fn from(node: &TokenMod) -> Self {
33204 node.stable_ptr().untyped()
33205 }
33206}
33207#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33208pub struct TerminalMod {
33209 node: SyntaxNode,
33210 children: Arc<[SyntaxNode]>,
33211}
33212impl Terminal for TerminalMod {
33213 const KIND: SyntaxKind = SyntaxKind::TerminalMod;
33214 type TokenType = TokenMod;
33215 fn new_green(
33216 db: &dyn SyntaxGroup,
33217 leading_trivia: TriviaGreen,
33218 token: <<TerminalMod as Terminal>::TokenType as TypedSyntaxNode>::Green,
33219 trailing_trivia: TriviaGreen,
33220 ) -> Self::Green {
33221 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
33222 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
33223 TerminalModGreen(
33224 Arc::new(GreenNode {
33225 kind: SyntaxKind::TerminalMod,
33226 details: GreenNodeDetails::Node { children, width },
33227 })
33228 .intern(db),
33229 )
33230 }
33231 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33232 self.token(db).text(db)
33233 }
33234}
33235impl TerminalMod {
33236 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33237 Trivia::from_syntax_node(db, self.children[0].clone())
33238 }
33239 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMod {
33240 TokenMod::from_syntax_node(db, self.children[1].clone())
33241 }
33242 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33243 Trivia::from_syntax_node(db, self.children[2].clone())
33244 }
33245}
33246#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33247pub struct TerminalModPtr(pub SyntaxStablePtrId);
33248impl TerminalModPtr {}
33249impl TypedStablePtr for TerminalModPtr {
33250 type SyntaxNode = TerminalMod;
33251 fn untyped(&self) -> SyntaxStablePtrId {
33252 self.0
33253 }
33254 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMod {
33255 TerminalMod::from_syntax_node(db, self.0.lookup(db))
33256 }
33257}
33258impl From<TerminalModPtr> for SyntaxStablePtrId {
33259 fn from(ptr: TerminalModPtr) -> Self {
33260 ptr.untyped()
33261 }
33262}
33263#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33264pub struct TerminalModGreen(pub GreenId);
33265impl TypedSyntaxNode for TerminalMod {
33266 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMod);
33267 type StablePtr = TerminalModPtr;
33268 type Green = TerminalModGreen;
33269 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33270 TerminalModGreen(
33271 Arc::new(GreenNode {
33272 kind: SyntaxKind::TerminalMod,
33273 details: GreenNodeDetails::Node {
33274 children: vec![
33275 Trivia::missing(db).0,
33276 TokenMod::missing(db).0,
33277 Trivia::missing(db).0,
33278 ],
33279 width: TextWidth::default(),
33280 },
33281 })
33282 .intern(db),
33283 )
33284 }
33285 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33286 let kind = node.kind(db);
33287 assert_eq!(
33288 kind,
33289 SyntaxKind::TerminalMod,
33290 "Unexpected SyntaxKind {:?}. Expected {:?}.",
33291 kind,
33292 SyntaxKind::TerminalMod
33293 );
33294 let children = db.get_children(node.clone());
33295 Self { node, children }
33296 }
33297 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33298 let kind = node.kind(db);
33299 if kind == SyntaxKind::TerminalMod { Some(Self::from_syntax_node(db, node)) } else { None }
33300 }
33301 fn as_syntax_node(&self) -> SyntaxNode {
33302 self.node.clone()
33303 }
33304 fn stable_ptr(&self) -> Self::StablePtr {
33305 TerminalModPtr(self.node.0.stable_ptr)
33306 }
33307}
33308impl From<&TerminalMod> for SyntaxStablePtrId {
33309 fn from(node: &TerminalMod) -> Self {
33310 node.stable_ptr().untyped()
33311 }
33312}
33313#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33314pub struct TokenModEq {
33315 node: SyntaxNode,
33316}
33317impl Token for TokenModEq {
33318 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
33319 TokenModEqGreen(
33320 Arc::new(GreenNode {
33321 kind: SyntaxKind::TokenModEq,
33322 details: GreenNodeDetails::Token(text),
33323 })
33324 .intern(db),
33325 )
33326 }
33327 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33328 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
33329 .clone()
33330 }
33331}
33332#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33333pub struct TokenModEqPtr(pub SyntaxStablePtrId);
33334impl TypedStablePtr for TokenModEqPtr {
33335 type SyntaxNode = TokenModEq;
33336 fn untyped(&self) -> SyntaxStablePtrId {
33337 self.0
33338 }
33339 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenModEq {
33340 TokenModEq::from_syntax_node(db, self.0.lookup(db))
33341 }
33342}
33343impl From<TokenModEqPtr> for SyntaxStablePtrId {
33344 fn from(ptr: TokenModEqPtr) -> Self {
33345 ptr.untyped()
33346 }
33347}
33348#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33349pub struct TokenModEqGreen(pub GreenId);
33350impl TokenModEqGreen {
33351 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33352 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
33353 }
33354}
33355impl TypedSyntaxNode for TokenModEq {
33356 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenModEq);
33357 type StablePtr = TokenModEqPtr;
33358 type Green = TokenModEqGreen;
33359 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33360 TokenModEqGreen(
33361 Arc::new(GreenNode {
33362 kind: SyntaxKind::TokenMissing,
33363 details: GreenNodeDetails::Token("".into()),
33364 })
33365 .intern(db),
33366 )
33367 }
33368 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33369 match node.0.green.lookup_intern(db).details {
33370 GreenNodeDetails::Token(_) => Self { node },
33371 GreenNodeDetails::Node { .. } => {
33372 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenModEq)
33373 }
33374 }
33375 }
33376 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33377 match node.0.green.lookup_intern(db).details {
33378 GreenNodeDetails::Token(_) => Some(Self { node }),
33379 GreenNodeDetails::Node { .. } => None,
33380 }
33381 }
33382 fn as_syntax_node(&self) -> SyntaxNode {
33383 self.node.clone()
33384 }
33385 fn stable_ptr(&self) -> Self::StablePtr {
33386 TokenModEqPtr(self.node.0.stable_ptr)
33387 }
33388}
33389impl From<&TokenModEq> for SyntaxStablePtrId {
33390 fn from(node: &TokenModEq) -> Self {
33391 node.stable_ptr().untyped()
33392 }
33393}
33394#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33395pub struct TerminalModEq {
33396 node: SyntaxNode,
33397 children: Arc<[SyntaxNode]>,
33398}
33399impl Terminal for TerminalModEq {
33400 const KIND: SyntaxKind = SyntaxKind::TerminalModEq;
33401 type TokenType = TokenModEq;
33402 fn new_green(
33403 db: &dyn SyntaxGroup,
33404 leading_trivia: TriviaGreen,
33405 token: <<TerminalModEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
33406 trailing_trivia: TriviaGreen,
33407 ) -> Self::Green {
33408 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
33409 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
33410 TerminalModEqGreen(
33411 Arc::new(GreenNode {
33412 kind: SyntaxKind::TerminalModEq,
33413 details: GreenNodeDetails::Node { children, width },
33414 })
33415 .intern(db),
33416 )
33417 }
33418 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33419 self.token(db).text(db)
33420 }
33421}
33422impl TerminalModEq {
33423 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33424 Trivia::from_syntax_node(db, self.children[0].clone())
33425 }
33426 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenModEq {
33427 TokenModEq::from_syntax_node(db, self.children[1].clone())
33428 }
33429 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33430 Trivia::from_syntax_node(db, self.children[2].clone())
33431 }
33432}
33433#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33434pub struct TerminalModEqPtr(pub SyntaxStablePtrId);
33435impl TerminalModEqPtr {}
33436impl TypedStablePtr for TerminalModEqPtr {
33437 type SyntaxNode = TerminalModEq;
33438 fn untyped(&self) -> SyntaxStablePtrId {
33439 self.0
33440 }
33441 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalModEq {
33442 TerminalModEq::from_syntax_node(db, self.0.lookup(db))
33443 }
33444}
33445impl From<TerminalModEqPtr> for SyntaxStablePtrId {
33446 fn from(ptr: TerminalModEqPtr) -> Self {
33447 ptr.untyped()
33448 }
33449}
33450#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33451pub struct TerminalModEqGreen(pub GreenId);
33452impl TypedSyntaxNode for TerminalModEq {
33453 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalModEq);
33454 type StablePtr = TerminalModEqPtr;
33455 type Green = TerminalModEqGreen;
33456 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33457 TerminalModEqGreen(
33458 Arc::new(GreenNode {
33459 kind: SyntaxKind::TerminalModEq,
33460 details: GreenNodeDetails::Node {
33461 children: vec![
33462 Trivia::missing(db).0,
33463 TokenModEq::missing(db).0,
33464 Trivia::missing(db).0,
33465 ],
33466 width: TextWidth::default(),
33467 },
33468 })
33469 .intern(db),
33470 )
33471 }
33472 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33473 let kind = node.kind(db);
33474 assert_eq!(
33475 kind,
33476 SyntaxKind::TerminalModEq,
33477 "Unexpected SyntaxKind {:?}. Expected {:?}.",
33478 kind,
33479 SyntaxKind::TerminalModEq
33480 );
33481 let children = db.get_children(node.clone());
33482 Self { node, children }
33483 }
33484 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33485 let kind = node.kind(db);
33486 if kind == SyntaxKind::TerminalModEq {
33487 Some(Self::from_syntax_node(db, node))
33488 } else {
33489 None
33490 }
33491 }
33492 fn as_syntax_node(&self) -> SyntaxNode {
33493 self.node.clone()
33494 }
33495 fn stable_ptr(&self) -> Self::StablePtr {
33496 TerminalModEqPtr(self.node.0.stable_ptr)
33497 }
33498}
33499impl From<&TerminalModEq> for SyntaxStablePtrId {
33500 fn from(node: &TerminalModEq) -> Self {
33501 node.stable_ptr().untyped()
33502 }
33503}
33504#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33505pub struct TokenMul {
33506 node: SyntaxNode,
33507}
33508impl Token for TokenMul {
33509 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
33510 TokenMulGreen(
33511 Arc::new(GreenNode {
33512 kind: SyntaxKind::TokenMul,
33513 details: GreenNodeDetails::Token(text),
33514 })
33515 .intern(db),
33516 )
33517 }
33518 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33519 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
33520 .clone()
33521 }
33522}
33523#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33524pub struct TokenMulPtr(pub SyntaxStablePtrId);
33525impl TypedStablePtr for TokenMulPtr {
33526 type SyntaxNode = TokenMul;
33527 fn untyped(&self) -> SyntaxStablePtrId {
33528 self.0
33529 }
33530 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMul {
33531 TokenMul::from_syntax_node(db, self.0.lookup(db))
33532 }
33533}
33534impl From<TokenMulPtr> for SyntaxStablePtrId {
33535 fn from(ptr: TokenMulPtr) -> Self {
33536 ptr.untyped()
33537 }
33538}
33539#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33540pub struct TokenMulGreen(pub GreenId);
33541impl TokenMulGreen {
33542 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33543 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
33544 }
33545}
33546impl TypedSyntaxNode for TokenMul {
33547 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMul);
33548 type StablePtr = TokenMulPtr;
33549 type Green = TokenMulGreen;
33550 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33551 TokenMulGreen(
33552 Arc::new(GreenNode {
33553 kind: SyntaxKind::TokenMissing,
33554 details: GreenNodeDetails::Token("".into()),
33555 })
33556 .intern(db),
33557 )
33558 }
33559 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33560 match node.0.green.lookup_intern(db).details {
33561 GreenNodeDetails::Token(_) => Self { node },
33562 GreenNodeDetails::Node { .. } => {
33563 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMul)
33564 }
33565 }
33566 }
33567 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33568 match node.0.green.lookup_intern(db).details {
33569 GreenNodeDetails::Token(_) => Some(Self { node }),
33570 GreenNodeDetails::Node { .. } => None,
33571 }
33572 }
33573 fn as_syntax_node(&self) -> SyntaxNode {
33574 self.node.clone()
33575 }
33576 fn stable_ptr(&self) -> Self::StablePtr {
33577 TokenMulPtr(self.node.0.stable_ptr)
33578 }
33579}
33580impl From<&TokenMul> for SyntaxStablePtrId {
33581 fn from(node: &TokenMul) -> Self {
33582 node.stable_ptr().untyped()
33583 }
33584}
33585#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33586pub struct TerminalMul {
33587 node: SyntaxNode,
33588 children: Arc<[SyntaxNode]>,
33589}
33590impl Terminal for TerminalMul {
33591 const KIND: SyntaxKind = SyntaxKind::TerminalMul;
33592 type TokenType = TokenMul;
33593 fn new_green(
33594 db: &dyn SyntaxGroup,
33595 leading_trivia: TriviaGreen,
33596 token: <<TerminalMul as Terminal>::TokenType as TypedSyntaxNode>::Green,
33597 trailing_trivia: TriviaGreen,
33598 ) -> Self::Green {
33599 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
33600 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
33601 TerminalMulGreen(
33602 Arc::new(GreenNode {
33603 kind: SyntaxKind::TerminalMul,
33604 details: GreenNodeDetails::Node { children, width },
33605 })
33606 .intern(db),
33607 )
33608 }
33609 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33610 self.token(db).text(db)
33611 }
33612}
33613impl TerminalMul {
33614 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33615 Trivia::from_syntax_node(db, self.children[0].clone())
33616 }
33617 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMul {
33618 TokenMul::from_syntax_node(db, self.children[1].clone())
33619 }
33620 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33621 Trivia::from_syntax_node(db, self.children[2].clone())
33622 }
33623}
33624#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33625pub struct TerminalMulPtr(pub SyntaxStablePtrId);
33626impl TerminalMulPtr {}
33627impl TypedStablePtr for TerminalMulPtr {
33628 type SyntaxNode = TerminalMul;
33629 fn untyped(&self) -> SyntaxStablePtrId {
33630 self.0
33631 }
33632 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMul {
33633 TerminalMul::from_syntax_node(db, self.0.lookup(db))
33634 }
33635}
33636impl From<TerminalMulPtr> for SyntaxStablePtrId {
33637 fn from(ptr: TerminalMulPtr) -> Self {
33638 ptr.untyped()
33639 }
33640}
33641#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33642pub struct TerminalMulGreen(pub GreenId);
33643impl TypedSyntaxNode for TerminalMul {
33644 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMul);
33645 type StablePtr = TerminalMulPtr;
33646 type Green = TerminalMulGreen;
33647 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33648 TerminalMulGreen(
33649 Arc::new(GreenNode {
33650 kind: SyntaxKind::TerminalMul,
33651 details: GreenNodeDetails::Node {
33652 children: vec![
33653 Trivia::missing(db).0,
33654 TokenMul::missing(db).0,
33655 Trivia::missing(db).0,
33656 ],
33657 width: TextWidth::default(),
33658 },
33659 })
33660 .intern(db),
33661 )
33662 }
33663 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33664 let kind = node.kind(db);
33665 assert_eq!(
33666 kind,
33667 SyntaxKind::TerminalMul,
33668 "Unexpected SyntaxKind {:?}. Expected {:?}.",
33669 kind,
33670 SyntaxKind::TerminalMul
33671 );
33672 let children = db.get_children(node.clone());
33673 Self { node, children }
33674 }
33675 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33676 let kind = node.kind(db);
33677 if kind == SyntaxKind::TerminalMul { Some(Self::from_syntax_node(db, node)) } else { None }
33678 }
33679 fn as_syntax_node(&self) -> SyntaxNode {
33680 self.node.clone()
33681 }
33682 fn stable_ptr(&self) -> Self::StablePtr {
33683 TerminalMulPtr(self.node.0.stable_ptr)
33684 }
33685}
33686impl From<&TerminalMul> for SyntaxStablePtrId {
33687 fn from(node: &TerminalMul) -> Self {
33688 node.stable_ptr().untyped()
33689 }
33690}
33691#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33692pub struct TokenMulEq {
33693 node: SyntaxNode,
33694}
33695impl Token for TokenMulEq {
33696 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
33697 TokenMulEqGreen(
33698 Arc::new(GreenNode {
33699 kind: SyntaxKind::TokenMulEq,
33700 details: GreenNodeDetails::Token(text),
33701 })
33702 .intern(db),
33703 )
33704 }
33705 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33706 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
33707 .clone()
33708 }
33709}
33710#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33711pub struct TokenMulEqPtr(pub SyntaxStablePtrId);
33712impl TypedStablePtr for TokenMulEqPtr {
33713 type SyntaxNode = TokenMulEq;
33714 fn untyped(&self) -> SyntaxStablePtrId {
33715 self.0
33716 }
33717 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMulEq {
33718 TokenMulEq::from_syntax_node(db, self.0.lookup(db))
33719 }
33720}
33721impl From<TokenMulEqPtr> for SyntaxStablePtrId {
33722 fn from(ptr: TokenMulEqPtr) -> Self {
33723 ptr.untyped()
33724 }
33725}
33726#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33727pub struct TokenMulEqGreen(pub GreenId);
33728impl TokenMulEqGreen {
33729 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33730 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
33731 }
33732}
33733impl TypedSyntaxNode for TokenMulEq {
33734 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMulEq);
33735 type StablePtr = TokenMulEqPtr;
33736 type Green = TokenMulEqGreen;
33737 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33738 TokenMulEqGreen(
33739 Arc::new(GreenNode {
33740 kind: SyntaxKind::TokenMissing,
33741 details: GreenNodeDetails::Token("".into()),
33742 })
33743 .intern(db),
33744 )
33745 }
33746 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33747 match node.0.green.lookup_intern(db).details {
33748 GreenNodeDetails::Token(_) => Self { node },
33749 GreenNodeDetails::Node { .. } => {
33750 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMulEq)
33751 }
33752 }
33753 }
33754 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33755 match node.0.green.lookup_intern(db).details {
33756 GreenNodeDetails::Token(_) => Some(Self { node }),
33757 GreenNodeDetails::Node { .. } => None,
33758 }
33759 }
33760 fn as_syntax_node(&self) -> SyntaxNode {
33761 self.node.clone()
33762 }
33763 fn stable_ptr(&self) -> Self::StablePtr {
33764 TokenMulEqPtr(self.node.0.stable_ptr)
33765 }
33766}
33767impl From<&TokenMulEq> for SyntaxStablePtrId {
33768 fn from(node: &TokenMulEq) -> Self {
33769 node.stable_ptr().untyped()
33770 }
33771}
33772#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33773pub struct TerminalMulEq {
33774 node: SyntaxNode,
33775 children: Arc<[SyntaxNode]>,
33776}
33777impl Terminal for TerminalMulEq {
33778 const KIND: SyntaxKind = SyntaxKind::TerminalMulEq;
33779 type TokenType = TokenMulEq;
33780 fn new_green(
33781 db: &dyn SyntaxGroup,
33782 leading_trivia: TriviaGreen,
33783 token: <<TerminalMulEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
33784 trailing_trivia: TriviaGreen,
33785 ) -> Self::Green {
33786 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
33787 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
33788 TerminalMulEqGreen(
33789 Arc::new(GreenNode {
33790 kind: SyntaxKind::TerminalMulEq,
33791 details: GreenNodeDetails::Node { children, width },
33792 })
33793 .intern(db),
33794 )
33795 }
33796 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33797 self.token(db).text(db)
33798 }
33799}
33800impl TerminalMulEq {
33801 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33802 Trivia::from_syntax_node(db, self.children[0].clone())
33803 }
33804 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMulEq {
33805 TokenMulEq::from_syntax_node(db, self.children[1].clone())
33806 }
33807 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33808 Trivia::from_syntax_node(db, self.children[2].clone())
33809 }
33810}
33811#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33812pub struct TerminalMulEqPtr(pub SyntaxStablePtrId);
33813impl TerminalMulEqPtr {}
33814impl TypedStablePtr for TerminalMulEqPtr {
33815 type SyntaxNode = TerminalMulEq;
33816 fn untyped(&self) -> SyntaxStablePtrId {
33817 self.0
33818 }
33819 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMulEq {
33820 TerminalMulEq::from_syntax_node(db, self.0.lookup(db))
33821 }
33822}
33823impl From<TerminalMulEqPtr> for SyntaxStablePtrId {
33824 fn from(ptr: TerminalMulEqPtr) -> Self {
33825 ptr.untyped()
33826 }
33827}
33828#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33829pub struct TerminalMulEqGreen(pub GreenId);
33830impl TypedSyntaxNode for TerminalMulEq {
33831 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMulEq);
33832 type StablePtr = TerminalMulEqPtr;
33833 type Green = TerminalMulEqGreen;
33834 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33835 TerminalMulEqGreen(
33836 Arc::new(GreenNode {
33837 kind: SyntaxKind::TerminalMulEq,
33838 details: GreenNodeDetails::Node {
33839 children: vec![
33840 Trivia::missing(db).0,
33841 TokenMulEq::missing(db).0,
33842 Trivia::missing(db).0,
33843 ],
33844 width: TextWidth::default(),
33845 },
33846 })
33847 .intern(db),
33848 )
33849 }
33850 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33851 let kind = node.kind(db);
33852 assert_eq!(
33853 kind,
33854 SyntaxKind::TerminalMulEq,
33855 "Unexpected SyntaxKind {:?}. Expected {:?}.",
33856 kind,
33857 SyntaxKind::TerminalMulEq
33858 );
33859 let children = db.get_children(node.clone());
33860 Self { node, children }
33861 }
33862 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33863 let kind = node.kind(db);
33864 if kind == SyntaxKind::TerminalMulEq {
33865 Some(Self::from_syntax_node(db, node))
33866 } else {
33867 None
33868 }
33869 }
33870 fn as_syntax_node(&self) -> SyntaxNode {
33871 self.node.clone()
33872 }
33873 fn stable_ptr(&self) -> Self::StablePtr {
33874 TerminalMulEqPtr(self.node.0.stable_ptr)
33875 }
33876}
33877impl From<&TerminalMulEq> for SyntaxStablePtrId {
33878 fn from(node: &TerminalMulEq) -> Self {
33879 node.stable_ptr().untyped()
33880 }
33881}
33882#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33883pub struct TokenNeq {
33884 node: SyntaxNode,
33885}
33886impl Token for TokenNeq {
33887 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
33888 TokenNeqGreen(
33889 Arc::new(GreenNode {
33890 kind: SyntaxKind::TokenNeq,
33891 details: GreenNodeDetails::Token(text),
33892 })
33893 .intern(db),
33894 )
33895 }
33896 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33897 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
33898 .clone()
33899 }
33900}
33901#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33902pub struct TokenNeqPtr(pub SyntaxStablePtrId);
33903impl TypedStablePtr for TokenNeqPtr {
33904 type SyntaxNode = TokenNeq;
33905 fn untyped(&self) -> SyntaxStablePtrId {
33906 self.0
33907 }
33908 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenNeq {
33909 TokenNeq::from_syntax_node(db, self.0.lookup(db))
33910 }
33911}
33912impl From<TokenNeqPtr> for SyntaxStablePtrId {
33913 fn from(ptr: TokenNeqPtr) -> Self {
33914 ptr.untyped()
33915 }
33916}
33917#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33918pub struct TokenNeqGreen(pub GreenId);
33919impl TokenNeqGreen {
33920 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33921 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
33922 }
33923}
33924impl TypedSyntaxNode for TokenNeq {
33925 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenNeq);
33926 type StablePtr = TokenNeqPtr;
33927 type Green = TokenNeqGreen;
33928 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33929 TokenNeqGreen(
33930 Arc::new(GreenNode {
33931 kind: SyntaxKind::TokenMissing,
33932 details: GreenNodeDetails::Token("".into()),
33933 })
33934 .intern(db),
33935 )
33936 }
33937 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33938 match node.0.green.lookup_intern(db).details {
33939 GreenNodeDetails::Token(_) => Self { node },
33940 GreenNodeDetails::Node { .. } => {
33941 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenNeq)
33942 }
33943 }
33944 }
33945 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33946 match node.0.green.lookup_intern(db).details {
33947 GreenNodeDetails::Token(_) => Some(Self { node }),
33948 GreenNodeDetails::Node { .. } => None,
33949 }
33950 }
33951 fn as_syntax_node(&self) -> SyntaxNode {
33952 self.node.clone()
33953 }
33954 fn stable_ptr(&self) -> Self::StablePtr {
33955 TokenNeqPtr(self.node.0.stable_ptr)
33956 }
33957}
33958impl From<&TokenNeq> for SyntaxStablePtrId {
33959 fn from(node: &TokenNeq) -> Self {
33960 node.stable_ptr().untyped()
33961 }
33962}
33963#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33964pub struct TerminalNeq {
33965 node: SyntaxNode,
33966 children: Arc<[SyntaxNode]>,
33967}
33968impl Terminal for TerminalNeq {
33969 const KIND: SyntaxKind = SyntaxKind::TerminalNeq;
33970 type TokenType = TokenNeq;
33971 fn new_green(
33972 db: &dyn SyntaxGroup,
33973 leading_trivia: TriviaGreen,
33974 token: <<TerminalNeq as Terminal>::TokenType as TypedSyntaxNode>::Green,
33975 trailing_trivia: TriviaGreen,
33976 ) -> Self::Green {
33977 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
33978 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
33979 TerminalNeqGreen(
33980 Arc::new(GreenNode {
33981 kind: SyntaxKind::TerminalNeq,
33982 details: GreenNodeDetails::Node { children, width },
33983 })
33984 .intern(db),
33985 )
33986 }
33987 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33988 self.token(db).text(db)
33989 }
33990}
33991impl TerminalNeq {
33992 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33993 Trivia::from_syntax_node(db, self.children[0].clone())
33994 }
33995 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenNeq {
33996 TokenNeq::from_syntax_node(db, self.children[1].clone())
33997 }
33998 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33999 Trivia::from_syntax_node(db, self.children[2].clone())
34000 }
34001}
34002#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34003pub struct TerminalNeqPtr(pub SyntaxStablePtrId);
34004impl TerminalNeqPtr {}
34005impl TypedStablePtr for TerminalNeqPtr {
34006 type SyntaxNode = TerminalNeq;
34007 fn untyped(&self) -> SyntaxStablePtrId {
34008 self.0
34009 }
34010 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalNeq {
34011 TerminalNeq::from_syntax_node(db, self.0.lookup(db))
34012 }
34013}
34014impl From<TerminalNeqPtr> for SyntaxStablePtrId {
34015 fn from(ptr: TerminalNeqPtr) -> Self {
34016 ptr.untyped()
34017 }
34018}
34019#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34020pub struct TerminalNeqGreen(pub GreenId);
34021impl TypedSyntaxNode for TerminalNeq {
34022 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalNeq);
34023 type StablePtr = TerminalNeqPtr;
34024 type Green = TerminalNeqGreen;
34025 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34026 TerminalNeqGreen(
34027 Arc::new(GreenNode {
34028 kind: SyntaxKind::TerminalNeq,
34029 details: GreenNodeDetails::Node {
34030 children: vec![
34031 Trivia::missing(db).0,
34032 TokenNeq::missing(db).0,
34033 Trivia::missing(db).0,
34034 ],
34035 width: TextWidth::default(),
34036 },
34037 })
34038 .intern(db),
34039 )
34040 }
34041 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34042 let kind = node.kind(db);
34043 assert_eq!(
34044 kind,
34045 SyntaxKind::TerminalNeq,
34046 "Unexpected SyntaxKind {:?}. Expected {:?}.",
34047 kind,
34048 SyntaxKind::TerminalNeq
34049 );
34050 let children = db.get_children(node.clone());
34051 Self { node, children }
34052 }
34053 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34054 let kind = node.kind(db);
34055 if kind == SyntaxKind::TerminalNeq { Some(Self::from_syntax_node(db, node)) } else { None }
34056 }
34057 fn as_syntax_node(&self) -> SyntaxNode {
34058 self.node.clone()
34059 }
34060 fn stable_ptr(&self) -> Self::StablePtr {
34061 TerminalNeqPtr(self.node.0.stable_ptr)
34062 }
34063}
34064impl From<&TerminalNeq> for SyntaxStablePtrId {
34065 fn from(node: &TerminalNeq) -> Self {
34066 node.stable_ptr().untyped()
34067 }
34068}
34069#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34070pub struct TokenNot {
34071 node: SyntaxNode,
34072}
34073impl Token for TokenNot {
34074 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
34075 TokenNotGreen(
34076 Arc::new(GreenNode {
34077 kind: SyntaxKind::TokenNot,
34078 details: GreenNodeDetails::Token(text),
34079 })
34080 .intern(db),
34081 )
34082 }
34083 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34084 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
34085 .clone()
34086 }
34087}
34088#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34089pub struct TokenNotPtr(pub SyntaxStablePtrId);
34090impl TypedStablePtr for TokenNotPtr {
34091 type SyntaxNode = TokenNot;
34092 fn untyped(&self) -> SyntaxStablePtrId {
34093 self.0
34094 }
34095 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenNot {
34096 TokenNot::from_syntax_node(db, self.0.lookup(db))
34097 }
34098}
34099impl From<TokenNotPtr> for SyntaxStablePtrId {
34100 fn from(ptr: TokenNotPtr) -> Self {
34101 ptr.untyped()
34102 }
34103}
34104#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34105pub struct TokenNotGreen(pub GreenId);
34106impl TokenNotGreen {
34107 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34108 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
34109 }
34110}
34111impl TypedSyntaxNode for TokenNot {
34112 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenNot);
34113 type StablePtr = TokenNotPtr;
34114 type Green = TokenNotGreen;
34115 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34116 TokenNotGreen(
34117 Arc::new(GreenNode {
34118 kind: SyntaxKind::TokenMissing,
34119 details: GreenNodeDetails::Token("".into()),
34120 })
34121 .intern(db),
34122 )
34123 }
34124 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34125 match node.0.green.lookup_intern(db).details {
34126 GreenNodeDetails::Token(_) => Self { node },
34127 GreenNodeDetails::Node { .. } => {
34128 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenNot)
34129 }
34130 }
34131 }
34132 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34133 match node.0.green.lookup_intern(db).details {
34134 GreenNodeDetails::Token(_) => Some(Self { node }),
34135 GreenNodeDetails::Node { .. } => None,
34136 }
34137 }
34138 fn as_syntax_node(&self) -> SyntaxNode {
34139 self.node.clone()
34140 }
34141 fn stable_ptr(&self) -> Self::StablePtr {
34142 TokenNotPtr(self.node.0.stable_ptr)
34143 }
34144}
34145impl From<&TokenNot> for SyntaxStablePtrId {
34146 fn from(node: &TokenNot) -> Self {
34147 node.stable_ptr().untyped()
34148 }
34149}
34150#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34151pub struct TerminalNot {
34152 node: SyntaxNode,
34153 children: Arc<[SyntaxNode]>,
34154}
34155impl Terminal for TerminalNot {
34156 const KIND: SyntaxKind = SyntaxKind::TerminalNot;
34157 type TokenType = TokenNot;
34158 fn new_green(
34159 db: &dyn SyntaxGroup,
34160 leading_trivia: TriviaGreen,
34161 token: <<TerminalNot as Terminal>::TokenType as TypedSyntaxNode>::Green,
34162 trailing_trivia: TriviaGreen,
34163 ) -> Self::Green {
34164 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
34165 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
34166 TerminalNotGreen(
34167 Arc::new(GreenNode {
34168 kind: SyntaxKind::TerminalNot,
34169 details: GreenNodeDetails::Node { children, width },
34170 })
34171 .intern(db),
34172 )
34173 }
34174 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34175 self.token(db).text(db)
34176 }
34177}
34178impl TerminalNot {
34179 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34180 Trivia::from_syntax_node(db, self.children[0].clone())
34181 }
34182 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenNot {
34183 TokenNot::from_syntax_node(db, self.children[1].clone())
34184 }
34185 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34186 Trivia::from_syntax_node(db, self.children[2].clone())
34187 }
34188}
34189#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34190pub struct TerminalNotPtr(pub SyntaxStablePtrId);
34191impl TerminalNotPtr {}
34192impl TypedStablePtr for TerminalNotPtr {
34193 type SyntaxNode = TerminalNot;
34194 fn untyped(&self) -> SyntaxStablePtrId {
34195 self.0
34196 }
34197 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalNot {
34198 TerminalNot::from_syntax_node(db, self.0.lookup(db))
34199 }
34200}
34201impl From<TerminalNotPtr> for SyntaxStablePtrId {
34202 fn from(ptr: TerminalNotPtr) -> Self {
34203 ptr.untyped()
34204 }
34205}
34206#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34207pub struct TerminalNotGreen(pub GreenId);
34208impl TypedSyntaxNode for TerminalNot {
34209 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalNot);
34210 type StablePtr = TerminalNotPtr;
34211 type Green = TerminalNotGreen;
34212 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34213 TerminalNotGreen(
34214 Arc::new(GreenNode {
34215 kind: SyntaxKind::TerminalNot,
34216 details: GreenNodeDetails::Node {
34217 children: vec![
34218 Trivia::missing(db).0,
34219 TokenNot::missing(db).0,
34220 Trivia::missing(db).0,
34221 ],
34222 width: TextWidth::default(),
34223 },
34224 })
34225 .intern(db),
34226 )
34227 }
34228 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34229 let kind = node.kind(db);
34230 assert_eq!(
34231 kind,
34232 SyntaxKind::TerminalNot,
34233 "Unexpected SyntaxKind {:?}. Expected {:?}.",
34234 kind,
34235 SyntaxKind::TerminalNot
34236 );
34237 let children = db.get_children(node.clone());
34238 Self { node, children }
34239 }
34240 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34241 let kind = node.kind(db);
34242 if kind == SyntaxKind::TerminalNot { Some(Self::from_syntax_node(db, node)) } else { None }
34243 }
34244 fn as_syntax_node(&self) -> SyntaxNode {
34245 self.node.clone()
34246 }
34247 fn stable_ptr(&self) -> Self::StablePtr {
34248 TerminalNotPtr(self.node.0.stable_ptr)
34249 }
34250}
34251impl From<&TerminalNot> for SyntaxStablePtrId {
34252 fn from(node: &TerminalNot) -> Self {
34253 node.stable_ptr().untyped()
34254 }
34255}
34256#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34257pub struct TokenBitNot {
34258 node: SyntaxNode,
34259}
34260impl Token for TokenBitNot {
34261 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
34262 TokenBitNotGreen(
34263 Arc::new(GreenNode {
34264 kind: SyntaxKind::TokenBitNot,
34265 details: GreenNodeDetails::Token(text),
34266 })
34267 .intern(db),
34268 )
34269 }
34270 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34271 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
34272 .clone()
34273 }
34274}
34275#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34276pub struct TokenBitNotPtr(pub SyntaxStablePtrId);
34277impl TypedStablePtr for TokenBitNotPtr {
34278 type SyntaxNode = TokenBitNot;
34279 fn untyped(&self) -> SyntaxStablePtrId {
34280 self.0
34281 }
34282 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenBitNot {
34283 TokenBitNot::from_syntax_node(db, self.0.lookup(db))
34284 }
34285}
34286impl From<TokenBitNotPtr> for SyntaxStablePtrId {
34287 fn from(ptr: TokenBitNotPtr) -> Self {
34288 ptr.untyped()
34289 }
34290}
34291#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34292pub struct TokenBitNotGreen(pub GreenId);
34293impl TokenBitNotGreen {
34294 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34295 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
34296 }
34297}
34298impl TypedSyntaxNode for TokenBitNot {
34299 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenBitNot);
34300 type StablePtr = TokenBitNotPtr;
34301 type Green = TokenBitNotGreen;
34302 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34303 TokenBitNotGreen(
34304 Arc::new(GreenNode {
34305 kind: SyntaxKind::TokenMissing,
34306 details: GreenNodeDetails::Token("".into()),
34307 })
34308 .intern(db),
34309 )
34310 }
34311 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34312 match node.0.green.lookup_intern(db).details {
34313 GreenNodeDetails::Token(_) => Self { node },
34314 GreenNodeDetails::Node { .. } => {
34315 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenBitNot)
34316 }
34317 }
34318 }
34319 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34320 match node.0.green.lookup_intern(db).details {
34321 GreenNodeDetails::Token(_) => Some(Self { node }),
34322 GreenNodeDetails::Node { .. } => None,
34323 }
34324 }
34325 fn as_syntax_node(&self) -> SyntaxNode {
34326 self.node.clone()
34327 }
34328 fn stable_ptr(&self) -> Self::StablePtr {
34329 TokenBitNotPtr(self.node.0.stable_ptr)
34330 }
34331}
34332impl From<&TokenBitNot> for SyntaxStablePtrId {
34333 fn from(node: &TokenBitNot) -> Self {
34334 node.stable_ptr().untyped()
34335 }
34336}
34337#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34338pub struct TerminalBitNot {
34339 node: SyntaxNode,
34340 children: Arc<[SyntaxNode]>,
34341}
34342impl Terminal for TerminalBitNot {
34343 const KIND: SyntaxKind = SyntaxKind::TerminalBitNot;
34344 type TokenType = TokenBitNot;
34345 fn new_green(
34346 db: &dyn SyntaxGroup,
34347 leading_trivia: TriviaGreen,
34348 token: <<TerminalBitNot as Terminal>::TokenType as TypedSyntaxNode>::Green,
34349 trailing_trivia: TriviaGreen,
34350 ) -> Self::Green {
34351 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
34352 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
34353 TerminalBitNotGreen(
34354 Arc::new(GreenNode {
34355 kind: SyntaxKind::TerminalBitNot,
34356 details: GreenNodeDetails::Node { children, width },
34357 })
34358 .intern(db),
34359 )
34360 }
34361 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34362 self.token(db).text(db)
34363 }
34364}
34365impl TerminalBitNot {
34366 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34367 Trivia::from_syntax_node(db, self.children[0].clone())
34368 }
34369 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenBitNot {
34370 TokenBitNot::from_syntax_node(db, self.children[1].clone())
34371 }
34372 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34373 Trivia::from_syntax_node(db, self.children[2].clone())
34374 }
34375}
34376#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34377pub struct TerminalBitNotPtr(pub SyntaxStablePtrId);
34378impl TerminalBitNotPtr {}
34379impl TypedStablePtr for TerminalBitNotPtr {
34380 type SyntaxNode = TerminalBitNot;
34381 fn untyped(&self) -> SyntaxStablePtrId {
34382 self.0
34383 }
34384 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalBitNot {
34385 TerminalBitNot::from_syntax_node(db, self.0.lookup(db))
34386 }
34387}
34388impl From<TerminalBitNotPtr> for SyntaxStablePtrId {
34389 fn from(ptr: TerminalBitNotPtr) -> Self {
34390 ptr.untyped()
34391 }
34392}
34393#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34394pub struct TerminalBitNotGreen(pub GreenId);
34395impl TypedSyntaxNode for TerminalBitNot {
34396 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalBitNot);
34397 type StablePtr = TerminalBitNotPtr;
34398 type Green = TerminalBitNotGreen;
34399 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34400 TerminalBitNotGreen(
34401 Arc::new(GreenNode {
34402 kind: SyntaxKind::TerminalBitNot,
34403 details: GreenNodeDetails::Node {
34404 children: vec![
34405 Trivia::missing(db).0,
34406 TokenBitNot::missing(db).0,
34407 Trivia::missing(db).0,
34408 ],
34409 width: TextWidth::default(),
34410 },
34411 })
34412 .intern(db),
34413 )
34414 }
34415 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34416 let kind = node.kind(db);
34417 assert_eq!(
34418 kind,
34419 SyntaxKind::TerminalBitNot,
34420 "Unexpected SyntaxKind {:?}. Expected {:?}.",
34421 kind,
34422 SyntaxKind::TerminalBitNot
34423 );
34424 let children = db.get_children(node.clone());
34425 Self { node, children }
34426 }
34427 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34428 let kind = node.kind(db);
34429 if kind == SyntaxKind::TerminalBitNot {
34430 Some(Self::from_syntax_node(db, node))
34431 } else {
34432 None
34433 }
34434 }
34435 fn as_syntax_node(&self) -> SyntaxNode {
34436 self.node.clone()
34437 }
34438 fn stable_ptr(&self) -> Self::StablePtr {
34439 TerminalBitNotPtr(self.node.0.stable_ptr)
34440 }
34441}
34442impl From<&TerminalBitNot> for SyntaxStablePtrId {
34443 fn from(node: &TerminalBitNot) -> Self {
34444 node.stable_ptr().untyped()
34445 }
34446}
34447#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34448pub struct TokenOr {
34449 node: SyntaxNode,
34450}
34451impl Token for TokenOr {
34452 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
34453 TokenOrGreen(
34454 Arc::new(GreenNode {
34455 kind: SyntaxKind::TokenOr,
34456 details: GreenNodeDetails::Token(text),
34457 })
34458 .intern(db),
34459 )
34460 }
34461 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34462 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
34463 .clone()
34464 }
34465}
34466#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34467pub struct TokenOrPtr(pub SyntaxStablePtrId);
34468impl TypedStablePtr for TokenOrPtr {
34469 type SyntaxNode = TokenOr;
34470 fn untyped(&self) -> SyntaxStablePtrId {
34471 self.0
34472 }
34473 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenOr {
34474 TokenOr::from_syntax_node(db, self.0.lookup(db))
34475 }
34476}
34477impl From<TokenOrPtr> for SyntaxStablePtrId {
34478 fn from(ptr: TokenOrPtr) -> Self {
34479 ptr.untyped()
34480 }
34481}
34482#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34483pub struct TokenOrGreen(pub GreenId);
34484impl TokenOrGreen {
34485 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34486 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
34487 }
34488}
34489impl TypedSyntaxNode for TokenOr {
34490 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenOr);
34491 type StablePtr = TokenOrPtr;
34492 type Green = TokenOrGreen;
34493 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34494 TokenOrGreen(
34495 Arc::new(GreenNode {
34496 kind: SyntaxKind::TokenMissing,
34497 details: GreenNodeDetails::Token("".into()),
34498 })
34499 .intern(db),
34500 )
34501 }
34502 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34503 match node.0.green.lookup_intern(db).details {
34504 GreenNodeDetails::Token(_) => Self { node },
34505 GreenNodeDetails::Node { .. } => {
34506 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenOr)
34507 }
34508 }
34509 }
34510 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34511 match node.0.green.lookup_intern(db).details {
34512 GreenNodeDetails::Token(_) => Some(Self { node }),
34513 GreenNodeDetails::Node { .. } => None,
34514 }
34515 }
34516 fn as_syntax_node(&self) -> SyntaxNode {
34517 self.node.clone()
34518 }
34519 fn stable_ptr(&self) -> Self::StablePtr {
34520 TokenOrPtr(self.node.0.stable_ptr)
34521 }
34522}
34523impl From<&TokenOr> for SyntaxStablePtrId {
34524 fn from(node: &TokenOr) -> Self {
34525 node.stable_ptr().untyped()
34526 }
34527}
34528#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34529pub struct TerminalOr {
34530 node: SyntaxNode,
34531 children: Arc<[SyntaxNode]>,
34532}
34533impl Terminal for TerminalOr {
34534 const KIND: SyntaxKind = SyntaxKind::TerminalOr;
34535 type TokenType = TokenOr;
34536 fn new_green(
34537 db: &dyn SyntaxGroup,
34538 leading_trivia: TriviaGreen,
34539 token: <<TerminalOr as Terminal>::TokenType as TypedSyntaxNode>::Green,
34540 trailing_trivia: TriviaGreen,
34541 ) -> Self::Green {
34542 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
34543 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
34544 TerminalOrGreen(
34545 Arc::new(GreenNode {
34546 kind: SyntaxKind::TerminalOr,
34547 details: GreenNodeDetails::Node { children, width },
34548 })
34549 .intern(db),
34550 )
34551 }
34552 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34553 self.token(db).text(db)
34554 }
34555}
34556impl TerminalOr {
34557 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34558 Trivia::from_syntax_node(db, self.children[0].clone())
34559 }
34560 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenOr {
34561 TokenOr::from_syntax_node(db, self.children[1].clone())
34562 }
34563 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34564 Trivia::from_syntax_node(db, self.children[2].clone())
34565 }
34566}
34567#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34568pub struct TerminalOrPtr(pub SyntaxStablePtrId);
34569impl TerminalOrPtr {}
34570impl TypedStablePtr for TerminalOrPtr {
34571 type SyntaxNode = TerminalOr;
34572 fn untyped(&self) -> SyntaxStablePtrId {
34573 self.0
34574 }
34575 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalOr {
34576 TerminalOr::from_syntax_node(db, self.0.lookup(db))
34577 }
34578}
34579impl From<TerminalOrPtr> for SyntaxStablePtrId {
34580 fn from(ptr: TerminalOrPtr) -> Self {
34581 ptr.untyped()
34582 }
34583}
34584#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34585pub struct TerminalOrGreen(pub GreenId);
34586impl TypedSyntaxNode for TerminalOr {
34587 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalOr);
34588 type StablePtr = TerminalOrPtr;
34589 type Green = TerminalOrGreen;
34590 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34591 TerminalOrGreen(
34592 Arc::new(GreenNode {
34593 kind: SyntaxKind::TerminalOr,
34594 details: GreenNodeDetails::Node {
34595 children: vec![
34596 Trivia::missing(db).0,
34597 TokenOr::missing(db).0,
34598 Trivia::missing(db).0,
34599 ],
34600 width: TextWidth::default(),
34601 },
34602 })
34603 .intern(db),
34604 )
34605 }
34606 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34607 let kind = node.kind(db);
34608 assert_eq!(
34609 kind,
34610 SyntaxKind::TerminalOr,
34611 "Unexpected SyntaxKind {:?}. Expected {:?}.",
34612 kind,
34613 SyntaxKind::TerminalOr
34614 );
34615 let children = db.get_children(node.clone());
34616 Self { node, children }
34617 }
34618 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34619 let kind = node.kind(db);
34620 if kind == SyntaxKind::TerminalOr { Some(Self::from_syntax_node(db, node)) } else { None }
34621 }
34622 fn as_syntax_node(&self) -> SyntaxNode {
34623 self.node.clone()
34624 }
34625 fn stable_ptr(&self) -> Self::StablePtr {
34626 TerminalOrPtr(self.node.0.stable_ptr)
34627 }
34628}
34629impl From<&TerminalOr> for SyntaxStablePtrId {
34630 fn from(node: &TerminalOr) -> Self {
34631 node.stable_ptr().untyped()
34632 }
34633}
34634#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34635pub struct TokenOrOr {
34636 node: SyntaxNode,
34637}
34638impl Token for TokenOrOr {
34639 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
34640 TokenOrOrGreen(
34641 Arc::new(GreenNode {
34642 kind: SyntaxKind::TokenOrOr,
34643 details: GreenNodeDetails::Token(text),
34644 })
34645 .intern(db),
34646 )
34647 }
34648 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34649 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
34650 .clone()
34651 }
34652}
34653#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34654pub struct TokenOrOrPtr(pub SyntaxStablePtrId);
34655impl TypedStablePtr for TokenOrOrPtr {
34656 type SyntaxNode = TokenOrOr;
34657 fn untyped(&self) -> SyntaxStablePtrId {
34658 self.0
34659 }
34660 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenOrOr {
34661 TokenOrOr::from_syntax_node(db, self.0.lookup(db))
34662 }
34663}
34664impl From<TokenOrOrPtr> for SyntaxStablePtrId {
34665 fn from(ptr: TokenOrOrPtr) -> Self {
34666 ptr.untyped()
34667 }
34668}
34669#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34670pub struct TokenOrOrGreen(pub GreenId);
34671impl TokenOrOrGreen {
34672 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34673 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
34674 }
34675}
34676impl TypedSyntaxNode for TokenOrOr {
34677 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenOrOr);
34678 type StablePtr = TokenOrOrPtr;
34679 type Green = TokenOrOrGreen;
34680 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34681 TokenOrOrGreen(
34682 Arc::new(GreenNode {
34683 kind: SyntaxKind::TokenMissing,
34684 details: GreenNodeDetails::Token("".into()),
34685 })
34686 .intern(db),
34687 )
34688 }
34689 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34690 match node.0.green.lookup_intern(db).details {
34691 GreenNodeDetails::Token(_) => Self { node },
34692 GreenNodeDetails::Node { .. } => {
34693 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenOrOr)
34694 }
34695 }
34696 }
34697 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34698 match node.0.green.lookup_intern(db).details {
34699 GreenNodeDetails::Token(_) => Some(Self { node }),
34700 GreenNodeDetails::Node { .. } => None,
34701 }
34702 }
34703 fn as_syntax_node(&self) -> SyntaxNode {
34704 self.node.clone()
34705 }
34706 fn stable_ptr(&self) -> Self::StablePtr {
34707 TokenOrOrPtr(self.node.0.stable_ptr)
34708 }
34709}
34710impl From<&TokenOrOr> for SyntaxStablePtrId {
34711 fn from(node: &TokenOrOr) -> Self {
34712 node.stable_ptr().untyped()
34713 }
34714}
34715#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34716pub struct TerminalOrOr {
34717 node: SyntaxNode,
34718 children: Arc<[SyntaxNode]>,
34719}
34720impl Terminal for TerminalOrOr {
34721 const KIND: SyntaxKind = SyntaxKind::TerminalOrOr;
34722 type TokenType = TokenOrOr;
34723 fn new_green(
34724 db: &dyn SyntaxGroup,
34725 leading_trivia: TriviaGreen,
34726 token: <<TerminalOrOr as Terminal>::TokenType as TypedSyntaxNode>::Green,
34727 trailing_trivia: TriviaGreen,
34728 ) -> Self::Green {
34729 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
34730 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
34731 TerminalOrOrGreen(
34732 Arc::new(GreenNode {
34733 kind: SyntaxKind::TerminalOrOr,
34734 details: GreenNodeDetails::Node { children, width },
34735 })
34736 .intern(db),
34737 )
34738 }
34739 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34740 self.token(db).text(db)
34741 }
34742}
34743impl TerminalOrOr {
34744 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34745 Trivia::from_syntax_node(db, self.children[0].clone())
34746 }
34747 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenOrOr {
34748 TokenOrOr::from_syntax_node(db, self.children[1].clone())
34749 }
34750 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34751 Trivia::from_syntax_node(db, self.children[2].clone())
34752 }
34753}
34754#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34755pub struct TerminalOrOrPtr(pub SyntaxStablePtrId);
34756impl TerminalOrOrPtr {}
34757impl TypedStablePtr for TerminalOrOrPtr {
34758 type SyntaxNode = TerminalOrOr;
34759 fn untyped(&self) -> SyntaxStablePtrId {
34760 self.0
34761 }
34762 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalOrOr {
34763 TerminalOrOr::from_syntax_node(db, self.0.lookup(db))
34764 }
34765}
34766impl From<TerminalOrOrPtr> for SyntaxStablePtrId {
34767 fn from(ptr: TerminalOrOrPtr) -> Self {
34768 ptr.untyped()
34769 }
34770}
34771#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34772pub struct TerminalOrOrGreen(pub GreenId);
34773impl TypedSyntaxNode for TerminalOrOr {
34774 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalOrOr);
34775 type StablePtr = TerminalOrOrPtr;
34776 type Green = TerminalOrOrGreen;
34777 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34778 TerminalOrOrGreen(
34779 Arc::new(GreenNode {
34780 kind: SyntaxKind::TerminalOrOr,
34781 details: GreenNodeDetails::Node {
34782 children: vec![
34783 Trivia::missing(db).0,
34784 TokenOrOr::missing(db).0,
34785 Trivia::missing(db).0,
34786 ],
34787 width: TextWidth::default(),
34788 },
34789 })
34790 .intern(db),
34791 )
34792 }
34793 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34794 let kind = node.kind(db);
34795 assert_eq!(
34796 kind,
34797 SyntaxKind::TerminalOrOr,
34798 "Unexpected SyntaxKind {:?}. Expected {:?}.",
34799 kind,
34800 SyntaxKind::TerminalOrOr
34801 );
34802 let children = db.get_children(node.clone());
34803 Self { node, children }
34804 }
34805 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34806 let kind = node.kind(db);
34807 if kind == SyntaxKind::TerminalOrOr { Some(Self::from_syntax_node(db, node)) } else { None }
34808 }
34809 fn as_syntax_node(&self) -> SyntaxNode {
34810 self.node.clone()
34811 }
34812 fn stable_ptr(&self) -> Self::StablePtr {
34813 TerminalOrOrPtr(self.node.0.stable_ptr)
34814 }
34815}
34816impl From<&TerminalOrOr> for SyntaxStablePtrId {
34817 fn from(node: &TerminalOrOr) -> Self {
34818 node.stable_ptr().untyped()
34819 }
34820}
34821#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34822pub struct TokenPlus {
34823 node: SyntaxNode,
34824}
34825impl Token for TokenPlus {
34826 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
34827 TokenPlusGreen(
34828 Arc::new(GreenNode {
34829 kind: SyntaxKind::TokenPlus,
34830 details: GreenNodeDetails::Token(text),
34831 })
34832 .intern(db),
34833 )
34834 }
34835 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34836 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
34837 .clone()
34838 }
34839}
34840#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34841pub struct TokenPlusPtr(pub SyntaxStablePtrId);
34842impl TypedStablePtr for TokenPlusPtr {
34843 type SyntaxNode = TokenPlus;
34844 fn untyped(&self) -> SyntaxStablePtrId {
34845 self.0
34846 }
34847 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenPlus {
34848 TokenPlus::from_syntax_node(db, self.0.lookup(db))
34849 }
34850}
34851impl From<TokenPlusPtr> for SyntaxStablePtrId {
34852 fn from(ptr: TokenPlusPtr) -> Self {
34853 ptr.untyped()
34854 }
34855}
34856#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34857pub struct TokenPlusGreen(pub GreenId);
34858impl TokenPlusGreen {
34859 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34860 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
34861 }
34862}
34863impl TypedSyntaxNode for TokenPlus {
34864 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenPlus);
34865 type StablePtr = TokenPlusPtr;
34866 type Green = TokenPlusGreen;
34867 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34868 TokenPlusGreen(
34869 Arc::new(GreenNode {
34870 kind: SyntaxKind::TokenMissing,
34871 details: GreenNodeDetails::Token("".into()),
34872 })
34873 .intern(db),
34874 )
34875 }
34876 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34877 match node.0.green.lookup_intern(db).details {
34878 GreenNodeDetails::Token(_) => Self { node },
34879 GreenNodeDetails::Node { .. } => {
34880 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenPlus)
34881 }
34882 }
34883 }
34884 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34885 match node.0.green.lookup_intern(db).details {
34886 GreenNodeDetails::Token(_) => Some(Self { node }),
34887 GreenNodeDetails::Node { .. } => None,
34888 }
34889 }
34890 fn as_syntax_node(&self) -> SyntaxNode {
34891 self.node.clone()
34892 }
34893 fn stable_ptr(&self) -> Self::StablePtr {
34894 TokenPlusPtr(self.node.0.stable_ptr)
34895 }
34896}
34897impl From<&TokenPlus> for SyntaxStablePtrId {
34898 fn from(node: &TokenPlus) -> Self {
34899 node.stable_ptr().untyped()
34900 }
34901}
34902#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34903pub struct TerminalPlus {
34904 node: SyntaxNode,
34905 children: Arc<[SyntaxNode]>,
34906}
34907impl Terminal for TerminalPlus {
34908 const KIND: SyntaxKind = SyntaxKind::TerminalPlus;
34909 type TokenType = TokenPlus;
34910 fn new_green(
34911 db: &dyn SyntaxGroup,
34912 leading_trivia: TriviaGreen,
34913 token: <<TerminalPlus as Terminal>::TokenType as TypedSyntaxNode>::Green,
34914 trailing_trivia: TriviaGreen,
34915 ) -> Self::Green {
34916 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
34917 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
34918 TerminalPlusGreen(
34919 Arc::new(GreenNode {
34920 kind: SyntaxKind::TerminalPlus,
34921 details: GreenNodeDetails::Node { children, width },
34922 })
34923 .intern(db),
34924 )
34925 }
34926 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34927 self.token(db).text(db)
34928 }
34929}
34930impl TerminalPlus {
34931 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34932 Trivia::from_syntax_node(db, self.children[0].clone())
34933 }
34934 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenPlus {
34935 TokenPlus::from_syntax_node(db, self.children[1].clone())
34936 }
34937 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34938 Trivia::from_syntax_node(db, self.children[2].clone())
34939 }
34940}
34941#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34942pub struct TerminalPlusPtr(pub SyntaxStablePtrId);
34943impl TerminalPlusPtr {}
34944impl TypedStablePtr for TerminalPlusPtr {
34945 type SyntaxNode = TerminalPlus;
34946 fn untyped(&self) -> SyntaxStablePtrId {
34947 self.0
34948 }
34949 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalPlus {
34950 TerminalPlus::from_syntax_node(db, self.0.lookup(db))
34951 }
34952}
34953impl From<TerminalPlusPtr> for SyntaxStablePtrId {
34954 fn from(ptr: TerminalPlusPtr) -> Self {
34955 ptr.untyped()
34956 }
34957}
34958#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34959pub struct TerminalPlusGreen(pub GreenId);
34960impl TypedSyntaxNode for TerminalPlus {
34961 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalPlus);
34962 type StablePtr = TerminalPlusPtr;
34963 type Green = TerminalPlusGreen;
34964 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34965 TerminalPlusGreen(
34966 Arc::new(GreenNode {
34967 kind: SyntaxKind::TerminalPlus,
34968 details: GreenNodeDetails::Node {
34969 children: vec![
34970 Trivia::missing(db).0,
34971 TokenPlus::missing(db).0,
34972 Trivia::missing(db).0,
34973 ],
34974 width: TextWidth::default(),
34975 },
34976 })
34977 .intern(db),
34978 )
34979 }
34980 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34981 let kind = node.kind(db);
34982 assert_eq!(
34983 kind,
34984 SyntaxKind::TerminalPlus,
34985 "Unexpected SyntaxKind {:?}. Expected {:?}.",
34986 kind,
34987 SyntaxKind::TerminalPlus
34988 );
34989 let children = db.get_children(node.clone());
34990 Self { node, children }
34991 }
34992 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34993 let kind = node.kind(db);
34994 if kind == SyntaxKind::TerminalPlus { Some(Self::from_syntax_node(db, node)) } else { None }
34995 }
34996 fn as_syntax_node(&self) -> SyntaxNode {
34997 self.node.clone()
34998 }
34999 fn stable_ptr(&self) -> Self::StablePtr {
35000 TerminalPlusPtr(self.node.0.stable_ptr)
35001 }
35002}
35003impl From<&TerminalPlus> for SyntaxStablePtrId {
35004 fn from(node: &TerminalPlus) -> Self {
35005 node.stable_ptr().untyped()
35006 }
35007}
35008#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35009pub struct TokenPlusEq {
35010 node: SyntaxNode,
35011}
35012impl Token for TokenPlusEq {
35013 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
35014 TokenPlusEqGreen(
35015 Arc::new(GreenNode {
35016 kind: SyntaxKind::TokenPlusEq,
35017 details: GreenNodeDetails::Token(text),
35018 })
35019 .intern(db),
35020 )
35021 }
35022 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35023 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
35024 .clone()
35025 }
35026}
35027#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35028pub struct TokenPlusEqPtr(pub SyntaxStablePtrId);
35029impl TypedStablePtr for TokenPlusEqPtr {
35030 type SyntaxNode = TokenPlusEq;
35031 fn untyped(&self) -> SyntaxStablePtrId {
35032 self.0
35033 }
35034 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenPlusEq {
35035 TokenPlusEq::from_syntax_node(db, self.0.lookup(db))
35036 }
35037}
35038impl From<TokenPlusEqPtr> for SyntaxStablePtrId {
35039 fn from(ptr: TokenPlusEqPtr) -> Self {
35040 ptr.untyped()
35041 }
35042}
35043#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35044pub struct TokenPlusEqGreen(pub GreenId);
35045impl TokenPlusEqGreen {
35046 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35047 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
35048 }
35049}
35050impl TypedSyntaxNode for TokenPlusEq {
35051 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenPlusEq);
35052 type StablePtr = TokenPlusEqPtr;
35053 type Green = TokenPlusEqGreen;
35054 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35055 TokenPlusEqGreen(
35056 Arc::new(GreenNode {
35057 kind: SyntaxKind::TokenMissing,
35058 details: GreenNodeDetails::Token("".into()),
35059 })
35060 .intern(db),
35061 )
35062 }
35063 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35064 match node.0.green.lookup_intern(db).details {
35065 GreenNodeDetails::Token(_) => Self { node },
35066 GreenNodeDetails::Node { .. } => {
35067 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenPlusEq)
35068 }
35069 }
35070 }
35071 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35072 match node.0.green.lookup_intern(db).details {
35073 GreenNodeDetails::Token(_) => Some(Self { node }),
35074 GreenNodeDetails::Node { .. } => None,
35075 }
35076 }
35077 fn as_syntax_node(&self) -> SyntaxNode {
35078 self.node.clone()
35079 }
35080 fn stable_ptr(&self) -> Self::StablePtr {
35081 TokenPlusEqPtr(self.node.0.stable_ptr)
35082 }
35083}
35084impl From<&TokenPlusEq> for SyntaxStablePtrId {
35085 fn from(node: &TokenPlusEq) -> Self {
35086 node.stable_ptr().untyped()
35087 }
35088}
35089#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35090pub struct TerminalPlusEq {
35091 node: SyntaxNode,
35092 children: Arc<[SyntaxNode]>,
35093}
35094impl Terminal for TerminalPlusEq {
35095 const KIND: SyntaxKind = SyntaxKind::TerminalPlusEq;
35096 type TokenType = TokenPlusEq;
35097 fn new_green(
35098 db: &dyn SyntaxGroup,
35099 leading_trivia: TriviaGreen,
35100 token: <<TerminalPlusEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
35101 trailing_trivia: TriviaGreen,
35102 ) -> Self::Green {
35103 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
35104 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
35105 TerminalPlusEqGreen(
35106 Arc::new(GreenNode {
35107 kind: SyntaxKind::TerminalPlusEq,
35108 details: GreenNodeDetails::Node { children, width },
35109 })
35110 .intern(db),
35111 )
35112 }
35113 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35114 self.token(db).text(db)
35115 }
35116}
35117impl TerminalPlusEq {
35118 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35119 Trivia::from_syntax_node(db, self.children[0].clone())
35120 }
35121 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenPlusEq {
35122 TokenPlusEq::from_syntax_node(db, self.children[1].clone())
35123 }
35124 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35125 Trivia::from_syntax_node(db, self.children[2].clone())
35126 }
35127}
35128#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35129pub struct TerminalPlusEqPtr(pub SyntaxStablePtrId);
35130impl TerminalPlusEqPtr {}
35131impl TypedStablePtr for TerminalPlusEqPtr {
35132 type SyntaxNode = TerminalPlusEq;
35133 fn untyped(&self) -> SyntaxStablePtrId {
35134 self.0
35135 }
35136 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalPlusEq {
35137 TerminalPlusEq::from_syntax_node(db, self.0.lookup(db))
35138 }
35139}
35140impl From<TerminalPlusEqPtr> for SyntaxStablePtrId {
35141 fn from(ptr: TerminalPlusEqPtr) -> Self {
35142 ptr.untyped()
35143 }
35144}
35145#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35146pub struct TerminalPlusEqGreen(pub GreenId);
35147impl TypedSyntaxNode for TerminalPlusEq {
35148 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalPlusEq);
35149 type StablePtr = TerminalPlusEqPtr;
35150 type Green = TerminalPlusEqGreen;
35151 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35152 TerminalPlusEqGreen(
35153 Arc::new(GreenNode {
35154 kind: SyntaxKind::TerminalPlusEq,
35155 details: GreenNodeDetails::Node {
35156 children: vec![
35157 Trivia::missing(db).0,
35158 TokenPlusEq::missing(db).0,
35159 Trivia::missing(db).0,
35160 ],
35161 width: TextWidth::default(),
35162 },
35163 })
35164 .intern(db),
35165 )
35166 }
35167 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35168 let kind = node.kind(db);
35169 assert_eq!(
35170 kind,
35171 SyntaxKind::TerminalPlusEq,
35172 "Unexpected SyntaxKind {:?}. Expected {:?}.",
35173 kind,
35174 SyntaxKind::TerminalPlusEq
35175 );
35176 let children = db.get_children(node.clone());
35177 Self { node, children }
35178 }
35179 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35180 let kind = node.kind(db);
35181 if kind == SyntaxKind::TerminalPlusEq {
35182 Some(Self::from_syntax_node(db, node))
35183 } else {
35184 None
35185 }
35186 }
35187 fn as_syntax_node(&self) -> SyntaxNode {
35188 self.node.clone()
35189 }
35190 fn stable_ptr(&self) -> Self::StablePtr {
35191 TerminalPlusEqPtr(self.node.0.stable_ptr)
35192 }
35193}
35194impl From<&TerminalPlusEq> for SyntaxStablePtrId {
35195 fn from(node: &TerminalPlusEq) -> Self {
35196 node.stable_ptr().untyped()
35197 }
35198}
35199#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35200pub struct TokenQuestionMark {
35201 node: SyntaxNode,
35202}
35203impl Token for TokenQuestionMark {
35204 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
35205 TokenQuestionMarkGreen(
35206 Arc::new(GreenNode {
35207 kind: SyntaxKind::TokenQuestionMark,
35208 details: GreenNodeDetails::Token(text),
35209 })
35210 .intern(db),
35211 )
35212 }
35213 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35214 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
35215 .clone()
35216 }
35217}
35218#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35219pub struct TokenQuestionMarkPtr(pub SyntaxStablePtrId);
35220impl TypedStablePtr for TokenQuestionMarkPtr {
35221 type SyntaxNode = TokenQuestionMark;
35222 fn untyped(&self) -> SyntaxStablePtrId {
35223 self.0
35224 }
35225 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenQuestionMark {
35226 TokenQuestionMark::from_syntax_node(db, self.0.lookup(db))
35227 }
35228}
35229impl From<TokenQuestionMarkPtr> for SyntaxStablePtrId {
35230 fn from(ptr: TokenQuestionMarkPtr) -> Self {
35231 ptr.untyped()
35232 }
35233}
35234#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35235pub struct TokenQuestionMarkGreen(pub GreenId);
35236impl TokenQuestionMarkGreen {
35237 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35238 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
35239 }
35240}
35241impl TypedSyntaxNode for TokenQuestionMark {
35242 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenQuestionMark);
35243 type StablePtr = TokenQuestionMarkPtr;
35244 type Green = TokenQuestionMarkGreen;
35245 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35246 TokenQuestionMarkGreen(
35247 Arc::new(GreenNode {
35248 kind: SyntaxKind::TokenMissing,
35249 details: GreenNodeDetails::Token("".into()),
35250 })
35251 .intern(db),
35252 )
35253 }
35254 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35255 match node.0.green.lookup_intern(db).details {
35256 GreenNodeDetails::Token(_) => Self { node },
35257 GreenNodeDetails::Node { .. } => {
35258 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenQuestionMark)
35259 }
35260 }
35261 }
35262 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35263 match node.0.green.lookup_intern(db).details {
35264 GreenNodeDetails::Token(_) => Some(Self { node }),
35265 GreenNodeDetails::Node { .. } => None,
35266 }
35267 }
35268 fn as_syntax_node(&self) -> SyntaxNode {
35269 self.node.clone()
35270 }
35271 fn stable_ptr(&self) -> Self::StablePtr {
35272 TokenQuestionMarkPtr(self.node.0.stable_ptr)
35273 }
35274}
35275impl From<&TokenQuestionMark> for SyntaxStablePtrId {
35276 fn from(node: &TokenQuestionMark) -> Self {
35277 node.stable_ptr().untyped()
35278 }
35279}
35280#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35281pub struct TerminalQuestionMark {
35282 node: SyntaxNode,
35283 children: Arc<[SyntaxNode]>,
35284}
35285impl Terminal for TerminalQuestionMark {
35286 const KIND: SyntaxKind = SyntaxKind::TerminalQuestionMark;
35287 type TokenType = TokenQuestionMark;
35288 fn new_green(
35289 db: &dyn SyntaxGroup,
35290 leading_trivia: TriviaGreen,
35291 token: <<TerminalQuestionMark as Terminal>::TokenType as TypedSyntaxNode>::Green,
35292 trailing_trivia: TriviaGreen,
35293 ) -> Self::Green {
35294 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
35295 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
35296 TerminalQuestionMarkGreen(
35297 Arc::new(GreenNode {
35298 kind: SyntaxKind::TerminalQuestionMark,
35299 details: GreenNodeDetails::Node { children, width },
35300 })
35301 .intern(db),
35302 )
35303 }
35304 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35305 self.token(db).text(db)
35306 }
35307}
35308impl TerminalQuestionMark {
35309 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35310 Trivia::from_syntax_node(db, self.children[0].clone())
35311 }
35312 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenQuestionMark {
35313 TokenQuestionMark::from_syntax_node(db, self.children[1].clone())
35314 }
35315 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35316 Trivia::from_syntax_node(db, self.children[2].clone())
35317 }
35318}
35319#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35320pub struct TerminalQuestionMarkPtr(pub SyntaxStablePtrId);
35321impl TerminalQuestionMarkPtr {}
35322impl TypedStablePtr for TerminalQuestionMarkPtr {
35323 type SyntaxNode = TerminalQuestionMark;
35324 fn untyped(&self) -> SyntaxStablePtrId {
35325 self.0
35326 }
35327 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalQuestionMark {
35328 TerminalQuestionMark::from_syntax_node(db, self.0.lookup(db))
35329 }
35330}
35331impl From<TerminalQuestionMarkPtr> for SyntaxStablePtrId {
35332 fn from(ptr: TerminalQuestionMarkPtr) -> Self {
35333 ptr.untyped()
35334 }
35335}
35336#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35337pub struct TerminalQuestionMarkGreen(pub GreenId);
35338impl TypedSyntaxNode for TerminalQuestionMark {
35339 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalQuestionMark);
35340 type StablePtr = TerminalQuestionMarkPtr;
35341 type Green = TerminalQuestionMarkGreen;
35342 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35343 TerminalQuestionMarkGreen(
35344 Arc::new(GreenNode {
35345 kind: SyntaxKind::TerminalQuestionMark,
35346 details: GreenNodeDetails::Node {
35347 children: vec![
35348 Trivia::missing(db).0,
35349 TokenQuestionMark::missing(db).0,
35350 Trivia::missing(db).0,
35351 ],
35352 width: TextWidth::default(),
35353 },
35354 })
35355 .intern(db),
35356 )
35357 }
35358 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35359 let kind = node.kind(db);
35360 assert_eq!(
35361 kind,
35362 SyntaxKind::TerminalQuestionMark,
35363 "Unexpected SyntaxKind {:?}. Expected {:?}.",
35364 kind,
35365 SyntaxKind::TerminalQuestionMark
35366 );
35367 let children = db.get_children(node.clone());
35368 Self { node, children }
35369 }
35370 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35371 let kind = node.kind(db);
35372 if kind == SyntaxKind::TerminalQuestionMark {
35373 Some(Self::from_syntax_node(db, node))
35374 } else {
35375 None
35376 }
35377 }
35378 fn as_syntax_node(&self) -> SyntaxNode {
35379 self.node.clone()
35380 }
35381 fn stable_ptr(&self) -> Self::StablePtr {
35382 TerminalQuestionMarkPtr(self.node.0.stable_ptr)
35383 }
35384}
35385impl From<&TerminalQuestionMark> for SyntaxStablePtrId {
35386 fn from(node: &TerminalQuestionMark) -> Self {
35387 node.stable_ptr().untyped()
35388 }
35389}
35390#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35391pub struct TokenRBrace {
35392 node: SyntaxNode,
35393}
35394impl Token for TokenRBrace {
35395 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
35396 TokenRBraceGreen(
35397 Arc::new(GreenNode {
35398 kind: SyntaxKind::TokenRBrace,
35399 details: GreenNodeDetails::Token(text),
35400 })
35401 .intern(db),
35402 )
35403 }
35404 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35405 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
35406 .clone()
35407 }
35408}
35409#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35410pub struct TokenRBracePtr(pub SyntaxStablePtrId);
35411impl TypedStablePtr for TokenRBracePtr {
35412 type SyntaxNode = TokenRBrace;
35413 fn untyped(&self) -> SyntaxStablePtrId {
35414 self.0
35415 }
35416 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenRBrace {
35417 TokenRBrace::from_syntax_node(db, self.0.lookup(db))
35418 }
35419}
35420impl From<TokenRBracePtr> for SyntaxStablePtrId {
35421 fn from(ptr: TokenRBracePtr) -> Self {
35422 ptr.untyped()
35423 }
35424}
35425#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35426pub struct TokenRBraceGreen(pub GreenId);
35427impl TokenRBraceGreen {
35428 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35429 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
35430 }
35431}
35432impl TypedSyntaxNode for TokenRBrace {
35433 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenRBrace);
35434 type StablePtr = TokenRBracePtr;
35435 type Green = TokenRBraceGreen;
35436 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35437 TokenRBraceGreen(
35438 Arc::new(GreenNode {
35439 kind: SyntaxKind::TokenMissing,
35440 details: GreenNodeDetails::Token("".into()),
35441 })
35442 .intern(db),
35443 )
35444 }
35445 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35446 match node.0.green.lookup_intern(db).details {
35447 GreenNodeDetails::Token(_) => Self { node },
35448 GreenNodeDetails::Node { .. } => {
35449 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenRBrace)
35450 }
35451 }
35452 }
35453 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35454 match node.0.green.lookup_intern(db).details {
35455 GreenNodeDetails::Token(_) => Some(Self { node }),
35456 GreenNodeDetails::Node { .. } => None,
35457 }
35458 }
35459 fn as_syntax_node(&self) -> SyntaxNode {
35460 self.node.clone()
35461 }
35462 fn stable_ptr(&self) -> Self::StablePtr {
35463 TokenRBracePtr(self.node.0.stable_ptr)
35464 }
35465}
35466impl From<&TokenRBrace> for SyntaxStablePtrId {
35467 fn from(node: &TokenRBrace) -> Self {
35468 node.stable_ptr().untyped()
35469 }
35470}
35471#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35472pub struct TerminalRBrace {
35473 node: SyntaxNode,
35474 children: Arc<[SyntaxNode]>,
35475}
35476impl Terminal for TerminalRBrace {
35477 const KIND: SyntaxKind = SyntaxKind::TerminalRBrace;
35478 type TokenType = TokenRBrace;
35479 fn new_green(
35480 db: &dyn SyntaxGroup,
35481 leading_trivia: TriviaGreen,
35482 token: <<TerminalRBrace as Terminal>::TokenType as TypedSyntaxNode>::Green,
35483 trailing_trivia: TriviaGreen,
35484 ) -> Self::Green {
35485 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
35486 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
35487 TerminalRBraceGreen(
35488 Arc::new(GreenNode {
35489 kind: SyntaxKind::TerminalRBrace,
35490 details: GreenNodeDetails::Node { children, width },
35491 })
35492 .intern(db),
35493 )
35494 }
35495 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35496 self.token(db).text(db)
35497 }
35498}
35499impl TerminalRBrace {
35500 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35501 Trivia::from_syntax_node(db, self.children[0].clone())
35502 }
35503 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenRBrace {
35504 TokenRBrace::from_syntax_node(db, self.children[1].clone())
35505 }
35506 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35507 Trivia::from_syntax_node(db, self.children[2].clone())
35508 }
35509}
35510#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35511pub struct TerminalRBracePtr(pub SyntaxStablePtrId);
35512impl TerminalRBracePtr {}
35513impl TypedStablePtr for TerminalRBracePtr {
35514 type SyntaxNode = TerminalRBrace;
35515 fn untyped(&self) -> SyntaxStablePtrId {
35516 self.0
35517 }
35518 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
35519 TerminalRBrace::from_syntax_node(db, self.0.lookup(db))
35520 }
35521}
35522impl From<TerminalRBracePtr> for SyntaxStablePtrId {
35523 fn from(ptr: TerminalRBracePtr) -> Self {
35524 ptr.untyped()
35525 }
35526}
35527#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35528pub struct TerminalRBraceGreen(pub GreenId);
35529impl TypedSyntaxNode for TerminalRBrace {
35530 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalRBrace);
35531 type StablePtr = TerminalRBracePtr;
35532 type Green = TerminalRBraceGreen;
35533 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35534 TerminalRBraceGreen(
35535 Arc::new(GreenNode {
35536 kind: SyntaxKind::TerminalRBrace,
35537 details: GreenNodeDetails::Node {
35538 children: vec![
35539 Trivia::missing(db).0,
35540 TokenRBrace::missing(db).0,
35541 Trivia::missing(db).0,
35542 ],
35543 width: TextWidth::default(),
35544 },
35545 })
35546 .intern(db),
35547 )
35548 }
35549 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35550 let kind = node.kind(db);
35551 assert_eq!(
35552 kind,
35553 SyntaxKind::TerminalRBrace,
35554 "Unexpected SyntaxKind {:?}. Expected {:?}.",
35555 kind,
35556 SyntaxKind::TerminalRBrace
35557 );
35558 let children = db.get_children(node.clone());
35559 Self { node, children }
35560 }
35561 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35562 let kind = node.kind(db);
35563 if kind == SyntaxKind::TerminalRBrace {
35564 Some(Self::from_syntax_node(db, node))
35565 } else {
35566 None
35567 }
35568 }
35569 fn as_syntax_node(&self) -> SyntaxNode {
35570 self.node.clone()
35571 }
35572 fn stable_ptr(&self) -> Self::StablePtr {
35573 TerminalRBracePtr(self.node.0.stable_ptr)
35574 }
35575}
35576impl From<&TerminalRBrace> for SyntaxStablePtrId {
35577 fn from(node: &TerminalRBrace) -> Self {
35578 node.stable_ptr().untyped()
35579 }
35580}
35581#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35582pub struct TokenRBrack {
35583 node: SyntaxNode,
35584}
35585impl Token for TokenRBrack {
35586 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
35587 TokenRBrackGreen(
35588 Arc::new(GreenNode {
35589 kind: SyntaxKind::TokenRBrack,
35590 details: GreenNodeDetails::Token(text),
35591 })
35592 .intern(db),
35593 )
35594 }
35595 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35596 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
35597 .clone()
35598 }
35599}
35600#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35601pub struct TokenRBrackPtr(pub SyntaxStablePtrId);
35602impl TypedStablePtr for TokenRBrackPtr {
35603 type SyntaxNode = TokenRBrack;
35604 fn untyped(&self) -> SyntaxStablePtrId {
35605 self.0
35606 }
35607 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenRBrack {
35608 TokenRBrack::from_syntax_node(db, self.0.lookup(db))
35609 }
35610}
35611impl From<TokenRBrackPtr> for SyntaxStablePtrId {
35612 fn from(ptr: TokenRBrackPtr) -> Self {
35613 ptr.untyped()
35614 }
35615}
35616#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35617pub struct TokenRBrackGreen(pub GreenId);
35618impl TokenRBrackGreen {
35619 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35620 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
35621 }
35622}
35623impl TypedSyntaxNode for TokenRBrack {
35624 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenRBrack);
35625 type StablePtr = TokenRBrackPtr;
35626 type Green = TokenRBrackGreen;
35627 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35628 TokenRBrackGreen(
35629 Arc::new(GreenNode {
35630 kind: SyntaxKind::TokenMissing,
35631 details: GreenNodeDetails::Token("".into()),
35632 })
35633 .intern(db),
35634 )
35635 }
35636 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35637 match node.0.green.lookup_intern(db).details {
35638 GreenNodeDetails::Token(_) => Self { node },
35639 GreenNodeDetails::Node { .. } => {
35640 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenRBrack)
35641 }
35642 }
35643 }
35644 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35645 match node.0.green.lookup_intern(db).details {
35646 GreenNodeDetails::Token(_) => Some(Self { node }),
35647 GreenNodeDetails::Node { .. } => None,
35648 }
35649 }
35650 fn as_syntax_node(&self) -> SyntaxNode {
35651 self.node.clone()
35652 }
35653 fn stable_ptr(&self) -> Self::StablePtr {
35654 TokenRBrackPtr(self.node.0.stable_ptr)
35655 }
35656}
35657impl From<&TokenRBrack> for SyntaxStablePtrId {
35658 fn from(node: &TokenRBrack) -> Self {
35659 node.stable_ptr().untyped()
35660 }
35661}
35662#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35663pub struct TerminalRBrack {
35664 node: SyntaxNode,
35665 children: Arc<[SyntaxNode]>,
35666}
35667impl Terminal for TerminalRBrack {
35668 const KIND: SyntaxKind = SyntaxKind::TerminalRBrack;
35669 type TokenType = TokenRBrack;
35670 fn new_green(
35671 db: &dyn SyntaxGroup,
35672 leading_trivia: TriviaGreen,
35673 token: <<TerminalRBrack as Terminal>::TokenType as TypedSyntaxNode>::Green,
35674 trailing_trivia: TriviaGreen,
35675 ) -> Self::Green {
35676 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
35677 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
35678 TerminalRBrackGreen(
35679 Arc::new(GreenNode {
35680 kind: SyntaxKind::TerminalRBrack,
35681 details: GreenNodeDetails::Node { children, width },
35682 })
35683 .intern(db),
35684 )
35685 }
35686 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35687 self.token(db).text(db)
35688 }
35689}
35690impl TerminalRBrack {
35691 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35692 Trivia::from_syntax_node(db, self.children[0].clone())
35693 }
35694 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenRBrack {
35695 TokenRBrack::from_syntax_node(db, self.children[1].clone())
35696 }
35697 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35698 Trivia::from_syntax_node(db, self.children[2].clone())
35699 }
35700}
35701#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35702pub struct TerminalRBrackPtr(pub SyntaxStablePtrId);
35703impl TerminalRBrackPtr {}
35704impl TypedStablePtr for TerminalRBrackPtr {
35705 type SyntaxNode = TerminalRBrack;
35706 fn untyped(&self) -> SyntaxStablePtrId {
35707 self.0
35708 }
35709 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
35710 TerminalRBrack::from_syntax_node(db, self.0.lookup(db))
35711 }
35712}
35713impl From<TerminalRBrackPtr> for SyntaxStablePtrId {
35714 fn from(ptr: TerminalRBrackPtr) -> Self {
35715 ptr.untyped()
35716 }
35717}
35718#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35719pub struct TerminalRBrackGreen(pub GreenId);
35720impl TypedSyntaxNode for TerminalRBrack {
35721 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalRBrack);
35722 type StablePtr = TerminalRBrackPtr;
35723 type Green = TerminalRBrackGreen;
35724 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35725 TerminalRBrackGreen(
35726 Arc::new(GreenNode {
35727 kind: SyntaxKind::TerminalRBrack,
35728 details: GreenNodeDetails::Node {
35729 children: vec![
35730 Trivia::missing(db).0,
35731 TokenRBrack::missing(db).0,
35732 Trivia::missing(db).0,
35733 ],
35734 width: TextWidth::default(),
35735 },
35736 })
35737 .intern(db),
35738 )
35739 }
35740 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35741 let kind = node.kind(db);
35742 assert_eq!(
35743 kind,
35744 SyntaxKind::TerminalRBrack,
35745 "Unexpected SyntaxKind {:?}. Expected {:?}.",
35746 kind,
35747 SyntaxKind::TerminalRBrack
35748 );
35749 let children = db.get_children(node.clone());
35750 Self { node, children }
35751 }
35752 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35753 let kind = node.kind(db);
35754 if kind == SyntaxKind::TerminalRBrack {
35755 Some(Self::from_syntax_node(db, node))
35756 } else {
35757 None
35758 }
35759 }
35760 fn as_syntax_node(&self) -> SyntaxNode {
35761 self.node.clone()
35762 }
35763 fn stable_ptr(&self) -> Self::StablePtr {
35764 TerminalRBrackPtr(self.node.0.stable_ptr)
35765 }
35766}
35767impl From<&TerminalRBrack> for SyntaxStablePtrId {
35768 fn from(node: &TerminalRBrack) -> Self {
35769 node.stable_ptr().untyped()
35770 }
35771}
35772#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35773pub struct TokenRParen {
35774 node: SyntaxNode,
35775}
35776impl Token for TokenRParen {
35777 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
35778 TokenRParenGreen(
35779 Arc::new(GreenNode {
35780 kind: SyntaxKind::TokenRParen,
35781 details: GreenNodeDetails::Token(text),
35782 })
35783 .intern(db),
35784 )
35785 }
35786 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35787 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
35788 .clone()
35789 }
35790}
35791#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35792pub struct TokenRParenPtr(pub SyntaxStablePtrId);
35793impl TypedStablePtr for TokenRParenPtr {
35794 type SyntaxNode = TokenRParen;
35795 fn untyped(&self) -> SyntaxStablePtrId {
35796 self.0
35797 }
35798 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenRParen {
35799 TokenRParen::from_syntax_node(db, self.0.lookup(db))
35800 }
35801}
35802impl From<TokenRParenPtr> for SyntaxStablePtrId {
35803 fn from(ptr: TokenRParenPtr) -> Self {
35804 ptr.untyped()
35805 }
35806}
35807#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35808pub struct TokenRParenGreen(pub GreenId);
35809impl TokenRParenGreen {
35810 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35811 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
35812 }
35813}
35814impl TypedSyntaxNode for TokenRParen {
35815 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenRParen);
35816 type StablePtr = TokenRParenPtr;
35817 type Green = TokenRParenGreen;
35818 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35819 TokenRParenGreen(
35820 Arc::new(GreenNode {
35821 kind: SyntaxKind::TokenMissing,
35822 details: GreenNodeDetails::Token("".into()),
35823 })
35824 .intern(db),
35825 )
35826 }
35827 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35828 match node.0.green.lookup_intern(db).details {
35829 GreenNodeDetails::Token(_) => Self { node },
35830 GreenNodeDetails::Node { .. } => {
35831 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenRParen)
35832 }
35833 }
35834 }
35835 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35836 match node.0.green.lookup_intern(db).details {
35837 GreenNodeDetails::Token(_) => Some(Self { node }),
35838 GreenNodeDetails::Node { .. } => None,
35839 }
35840 }
35841 fn as_syntax_node(&self) -> SyntaxNode {
35842 self.node.clone()
35843 }
35844 fn stable_ptr(&self) -> Self::StablePtr {
35845 TokenRParenPtr(self.node.0.stable_ptr)
35846 }
35847}
35848impl From<&TokenRParen> for SyntaxStablePtrId {
35849 fn from(node: &TokenRParen) -> Self {
35850 node.stable_ptr().untyped()
35851 }
35852}
35853#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35854pub struct TerminalRParen {
35855 node: SyntaxNode,
35856 children: Arc<[SyntaxNode]>,
35857}
35858impl Terminal for TerminalRParen {
35859 const KIND: SyntaxKind = SyntaxKind::TerminalRParen;
35860 type TokenType = TokenRParen;
35861 fn new_green(
35862 db: &dyn SyntaxGroup,
35863 leading_trivia: TriviaGreen,
35864 token: <<TerminalRParen as Terminal>::TokenType as TypedSyntaxNode>::Green,
35865 trailing_trivia: TriviaGreen,
35866 ) -> Self::Green {
35867 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
35868 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
35869 TerminalRParenGreen(
35870 Arc::new(GreenNode {
35871 kind: SyntaxKind::TerminalRParen,
35872 details: GreenNodeDetails::Node { children, width },
35873 })
35874 .intern(db),
35875 )
35876 }
35877 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35878 self.token(db).text(db)
35879 }
35880}
35881impl TerminalRParen {
35882 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35883 Trivia::from_syntax_node(db, self.children[0].clone())
35884 }
35885 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenRParen {
35886 TokenRParen::from_syntax_node(db, self.children[1].clone())
35887 }
35888 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35889 Trivia::from_syntax_node(db, self.children[2].clone())
35890 }
35891}
35892#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35893pub struct TerminalRParenPtr(pub SyntaxStablePtrId);
35894impl TerminalRParenPtr {}
35895impl TypedStablePtr for TerminalRParenPtr {
35896 type SyntaxNode = TerminalRParen;
35897 fn untyped(&self) -> SyntaxStablePtrId {
35898 self.0
35899 }
35900 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
35901 TerminalRParen::from_syntax_node(db, self.0.lookup(db))
35902 }
35903}
35904impl From<TerminalRParenPtr> for SyntaxStablePtrId {
35905 fn from(ptr: TerminalRParenPtr) -> Self {
35906 ptr.untyped()
35907 }
35908}
35909#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35910pub struct TerminalRParenGreen(pub GreenId);
35911impl TypedSyntaxNode for TerminalRParen {
35912 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalRParen);
35913 type StablePtr = TerminalRParenPtr;
35914 type Green = TerminalRParenGreen;
35915 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35916 TerminalRParenGreen(
35917 Arc::new(GreenNode {
35918 kind: SyntaxKind::TerminalRParen,
35919 details: GreenNodeDetails::Node {
35920 children: vec![
35921 Trivia::missing(db).0,
35922 TokenRParen::missing(db).0,
35923 Trivia::missing(db).0,
35924 ],
35925 width: TextWidth::default(),
35926 },
35927 })
35928 .intern(db),
35929 )
35930 }
35931 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35932 let kind = node.kind(db);
35933 assert_eq!(
35934 kind,
35935 SyntaxKind::TerminalRParen,
35936 "Unexpected SyntaxKind {:?}. Expected {:?}.",
35937 kind,
35938 SyntaxKind::TerminalRParen
35939 );
35940 let children = db.get_children(node.clone());
35941 Self { node, children }
35942 }
35943 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35944 let kind = node.kind(db);
35945 if kind == SyntaxKind::TerminalRParen {
35946 Some(Self::from_syntax_node(db, node))
35947 } else {
35948 None
35949 }
35950 }
35951 fn as_syntax_node(&self) -> SyntaxNode {
35952 self.node.clone()
35953 }
35954 fn stable_ptr(&self) -> Self::StablePtr {
35955 TerminalRParenPtr(self.node.0.stable_ptr)
35956 }
35957}
35958impl From<&TerminalRParen> for SyntaxStablePtrId {
35959 fn from(node: &TerminalRParen) -> Self {
35960 node.stable_ptr().untyped()
35961 }
35962}
35963#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35964pub struct TokenSemicolon {
35965 node: SyntaxNode,
35966}
35967impl Token for TokenSemicolon {
35968 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
35969 TokenSemicolonGreen(
35970 Arc::new(GreenNode {
35971 kind: SyntaxKind::TokenSemicolon,
35972 details: GreenNodeDetails::Token(text),
35973 })
35974 .intern(db),
35975 )
35976 }
35977 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35978 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
35979 .clone()
35980 }
35981}
35982#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35983pub struct TokenSemicolonPtr(pub SyntaxStablePtrId);
35984impl TypedStablePtr for TokenSemicolonPtr {
35985 type SyntaxNode = TokenSemicolon;
35986 fn untyped(&self) -> SyntaxStablePtrId {
35987 self.0
35988 }
35989 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenSemicolon {
35990 TokenSemicolon::from_syntax_node(db, self.0.lookup(db))
35991 }
35992}
35993impl From<TokenSemicolonPtr> for SyntaxStablePtrId {
35994 fn from(ptr: TokenSemicolonPtr) -> Self {
35995 ptr.untyped()
35996 }
35997}
35998#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35999pub struct TokenSemicolonGreen(pub GreenId);
36000impl TokenSemicolonGreen {
36001 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36002 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
36003 }
36004}
36005impl TypedSyntaxNode for TokenSemicolon {
36006 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenSemicolon);
36007 type StablePtr = TokenSemicolonPtr;
36008 type Green = TokenSemicolonGreen;
36009 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36010 TokenSemicolonGreen(
36011 Arc::new(GreenNode {
36012 kind: SyntaxKind::TokenMissing,
36013 details: GreenNodeDetails::Token("".into()),
36014 })
36015 .intern(db),
36016 )
36017 }
36018 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36019 match node.0.green.lookup_intern(db).details {
36020 GreenNodeDetails::Token(_) => Self { node },
36021 GreenNodeDetails::Node { .. } => {
36022 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenSemicolon)
36023 }
36024 }
36025 }
36026 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36027 match node.0.green.lookup_intern(db).details {
36028 GreenNodeDetails::Token(_) => Some(Self { node }),
36029 GreenNodeDetails::Node { .. } => None,
36030 }
36031 }
36032 fn as_syntax_node(&self) -> SyntaxNode {
36033 self.node.clone()
36034 }
36035 fn stable_ptr(&self) -> Self::StablePtr {
36036 TokenSemicolonPtr(self.node.0.stable_ptr)
36037 }
36038}
36039impl From<&TokenSemicolon> for SyntaxStablePtrId {
36040 fn from(node: &TokenSemicolon) -> Self {
36041 node.stable_ptr().untyped()
36042 }
36043}
36044#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36045pub struct TerminalSemicolon {
36046 node: SyntaxNode,
36047 children: Arc<[SyntaxNode]>,
36048}
36049impl Terminal for TerminalSemicolon {
36050 const KIND: SyntaxKind = SyntaxKind::TerminalSemicolon;
36051 type TokenType = TokenSemicolon;
36052 fn new_green(
36053 db: &dyn SyntaxGroup,
36054 leading_trivia: TriviaGreen,
36055 token: <<TerminalSemicolon as Terminal>::TokenType as TypedSyntaxNode>::Green,
36056 trailing_trivia: TriviaGreen,
36057 ) -> Self::Green {
36058 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
36059 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
36060 TerminalSemicolonGreen(
36061 Arc::new(GreenNode {
36062 kind: SyntaxKind::TerminalSemicolon,
36063 details: GreenNodeDetails::Node { children, width },
36064 })
36065 .intern(db),
36066 )
36067 }
36068 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36069 self.token(db).text(db)
36070 }
36071}
36072impl TerminalSemicolon {
36073 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36074 Trivia::from_syntax_node(db, self.children[0].clone())
36075 }
36076 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenSemicolon {
36077 TokenSemicolon::from_syntax_node(db, self.children[1].clone())
36078 }
36079 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36080 Trivia::from_syntax_node(db, self.children[2].clone())
36081 }
36082}
36083#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36084pub struct TerminalSemicolonPtr(pub SyntaxStablePtrId);
36085impl TerminalSemicolonPtr {}
36086impl TypedStablePtr for TerminalSemicolonPtr {
36087 type SyntaxNode = TerminalSemicolon;
36088 fn untyped(&self) -> SyntaxStablePtrId {
36089 self.0
36090 }
36091 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
36092 TerminalSemicolon::from_syntax_node(db, self.0.lookup(db))
36093 }
36094}
36095impl From<TerminalSemicolonPtr> for SyntaxStablePtrId {
36096 fn from(ptr: TerminalSemicolonPtr) -> Self {
36097 ptr.untyped()
36098 }
36099}
36100#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36101pub struct TerminalSemicolonGreen(pub GreenId);
36102impl TypedSyntaxNode for TerminalSemicolon {
36103 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalSemicolon);
36104 type StablePtr = TerminalSemicolonPtr;
36105 type Green = TerminalSemicolonGreen;
36106 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36107 TerminalSemicolonGreen(
36108 Arc::new(GreenNode {
36109 kind: SyntaxKind::TerminalSemicolon,
36110 details: GreenNodeDetails::Node {
36111 children: vec![
36112 Trivia::missing(db).0,
36113 TokenSemicolon::missing(db).0,
36114 Trivia::missing(db).0,
36115 ],
36116 width: TextWidth::default(),
36117 },
36118 })
36119 .intern(db),
36120 )
36121 }
36122 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36123 let kind = node.kind(db);
36124 assert_eq!(
36125 kind,
36126 SyntaxKind::TerminalSemicolon,
36127 "Unexpected SyntaxKind {:?}. Expected {:?}.",
36128 kind,
36129 SyntaxKind::TerminalSemicolon
36130 );
36131 let children = db.get_children(node.clone());
36132 Self { node, children }
36133 }
36134 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36135 let kind = node.kind(db);
36136 if kind == SyntaxKind::TerminalSemicolon {
36137 Some(Self::from_syntax_node(db, node))
36138 } else {
36139 None
36140 }
36141 }
36142 fn as_syntax_node(&self) -> SyntaxNode {
36143 self.node.clone()
36144 }
36145 fn stable_ptr(&self) -> Self::StablePtr {
36146 TerminalSemicolonPtr(self.node.0.stable_ptr)
36147 }
36148}
36149impl From<&TerminalSemicolon> for SyntaxStablePtrId {
36150 fn from(node: &TerminalSemicolon) -> Self {
36151 node.stable_ptr().untyped()
36152 }
36153}
36154#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36155pub struct TokenUnderscore {
36156 node: SyntaxNode,
36157}
36158impl Token for TokenUnderscore {
36159 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
36160 TokenUnderscoreGreen(
36161 Arc::new(GreenNode {
36162 kind: SyntaxKind::TokenUnderscore,
36163 details: GreenNodeDetails::Token(text),
36164 })
36165 .intern(db),
36166 )
36167 }
36168 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36169 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
36170 .clone()
36171 }
36172}
36173#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36174pub struct TokenUnderscorePtr(pub SyntaxStablePtrId);
36175impl TypedStablePtr for TokenUnderscorePtr {
36176 type SyntaxNode = TokenUnderscore;
36177 fn untyped(&self) -> SyntaxStablePtrId {
36178 self.0
36179 }
36180 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenUnderscore {
36181 TokenUnderscore::from_syntax_node(db, self.0.lookup(db))
36182 }
36183}
36184impl From<TokenUnderscorePtr> for SyntaxStablePtrId {
36185 fn from(ptr: TokenUnderscorePtr) -> Self {
36186 ptr.untyped()
36187 }
36188}
36189#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36190pub struct TokenUnderscoreGreen(pub GreenId);
36191impl TokenUnderscoreGreen {
36192 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36193 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
36194 }
36195}
36196impl TypedSyntaxNode for TokenUnderscore {
36197 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenUnderscore);
36198 type StablePtr = TokenUnderscorePtr;
36199 type Green = TokenUnderscoreGreen;
36200 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36201 TokenUnderscoreGreen(
36202 Arc::new(GreenNode {
36203 kind: SyntaxKind::TokenMissing,
36204 details: GreenNodeDetails::Token("".into()),
36205 })
36206 .intern(db),
36207 )
36208 }
36209 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36210 match node.0.green.lookup_intern(db).details {
36211 GreenNodeDetails::Token(_) => Self { node },
36212 GreenNodeDetails::Node { .. } => {
36213 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenUnderscore)
36214 }
36215 }
36216 }
36217 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36218 match node.0.green.lookup_intern(db).details {
36219 GreenNodeDetails::Token(_) => Some(Self { node }),
36220 GreenNodeDetails::Node { .. } => None,
36221 }
36222 }
36223 fn as_syntax_node(&self) -> SyntaxNode {
36224 self.node.clone()
36225 }
36226 fn stable_ptr(&self) -> Self::StablePtr {
36227 TokenUnderscorePtr(self.node.0.stable_ptr)
36228 }
36229}
36230impl From<&TokenUnderscore> for SyntaxStablePtrId {
36231 fn from(node: &TokenUnderscore) -> Self {
36232 node.stable_ptr().untyped()
36233 }
36234}
36235#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36236pub struct TerminalUnderscore {
36237 node: SyntaxNode,
36238 children: Arc<[SyntaxNode]>,
36239}
36240impl Terminal for TerminalUnderscore {
36241 const KIND: SyntaxKind = SyntaxKind::TerminalUnderscore;
36242 type TokenType = TokenUnderscore;
36243 fn new_green(
36244 db: &dyn SyntaxGroup,
36245 leading_trivia: TriviaGreen,
36246 token: <<TerminalUnderscore as Terminal>::TokenType as TypedSyntaxNode>::Green,
36247 trailing_trivia: TriviaGreen,
36248 ) -> Self::Green {
36249 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
36250 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
36251 TerminalUnderscoreGreen(
36252 Arc::new(GreenNode {
36253 kind: SyntaxKind::TerminalUnderscore,
36254 details: GreenNodeDetails::Node { children, width },
36255 })
36256 .intern(db),
36257 )
36258 }
36259 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36260 self.token(db).text(db)
36261 }
36262}
36263impl TerminalUnderscore {
36264 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36265 Trivia::from_syntax_node(db, self.children[0].clone())
36266 }
36267 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenUnderscore {
36268 TokenUnderscore::from_syntax_node(db, self.children[1].clone())
36269 }
36270 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36271 Trivia::from_syntax_node(db, self.children[2].clone())
36272 }
36273}
36274#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36275pub struct TerminalUnderscorePtr(pub SyntaxStablePtrId);
36276impl TerminalUnderscorePtr {}
36277impl TypedStablePtr for TerminalUnderscorePtr {
36278 type SyntaxNode = TerminalUnderscore;
36279 fn untyped(&self) -> SyntaxStablePtrId {
36280 self.0
36281 }
36282 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalUnderscore {
36283 TerminalUnderscore::from_syntax_node(db, self.0.lookup(db))
36284 }
36285}
36286impl From<TerminalUnderscorePtr> for SyntaxStablePtrId {
36287 fn from(ptr: TerminalUnderscorePtr) -> Self {
36288 ptr.untyped()
36289 }
36290}
36291#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36292pub struct TerminalUnderscoreGreen(pub GreenId);
36293impl TypedSyntaxNode for TerminalUnderscore {
36294 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalUnderscore);
36295 type StablePtr = TerminalUnderscorePtr;
36296 type Green = TerminalUnderscoreGreen;
36297 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36298 TerminalUnderscoreGreen(
36299 Arc::new(GreenNode {
36300 kind: SyntaxKind::TerminalUnderscore,
36301 details: GreenNodeDetails::Node {
36302 children: vec![
36303 Trivia::missing(db).0,
36304 TokenUnderscore::missing(db).0,
36305 Trivia::missing(db).0,
36306 ],
36307 width: TextWidth::default(),
36308 },
36309 })
36310 .intern(db),
36311 )
36312 }
36313 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36314 let kind = node.kind(db);
36315 assert_eq!(
36316 kind,
36317 SyntaxKind::TerminalUnderscore,
36318 "Unexpected SyntaxKind {:?}. Expected {:?}.",
36319 kind,
36320 SyntaxKind::TerminalUnderscore
36321 );
36322 let children = db.get_children(node.clone());
36323 Self { node, children }
36324 }
36325 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36326 let kind = node.kind(db);
36327 if kind == SyntaxKind::TerminalUnderscore {
36328 Some(Self::from_syntax_node(db, node))
36329 } else {
36330 None
36331 }
36332 }
36333 fn as_syntax_node(&self) -> SyntaxNode {
36334 self.node.clone()
36335 }
36336 fn stable_ptr(&self) -> Self::StablePtr {
36337 TerminalUnderscorePtr(self.node.0.stable_ptr)
36338 }
36339}
36340impl From<&TerminalUnderscore> for SyntaxStablePtrId {
36341 fn from(node: &TerminalUnderscore) -> Self {
36342 node.stable_ptr().untyped()
36343 }
36344}
36345#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36346pub struct TokenXor {
36347 node: SyntaxNode,
36348}
36349impl Token for TokenXor {
36350 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
36351 TokenXorGreen(
36352 Arc::new(GreenNode {
36353 kind: SyntaxKind::TokenXor,
36354 details: GreenNodeDetails::Token(text),
36355 })
36356 .intern(db),
36357 )
36358 }
36359 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36360 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
36361 .clone()
36362 }
36363}
36364#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36365pub struct TokenXorPtr(pub SyntaxStablePtrId);
36366impl TypedStablePtr for TokenXorPtr {
36367 type SyntaxNode = TokenXor;
36368 fn untyped(&self) -> SyntaxStablePtrId {
36369 self.0
36370 }
36371 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenXor {
36372 TokenXor::from_syntax_node(db, self.0.lookup(db))
36373 }
36374}
36375impl From<TokenXorPtr> for SyntaxStablePtrId {
36376 fn from(ptr: TokenXorPtr) -> Self {
36377 ptr.untyped()
36378 }
36379}
36380#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36381pub struct TokenXorGreen(pub GreenId);
36382impl TokenXorGreen {
36383 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36384 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
36385 }
36386}
36387impl TypedSyntaxNode for TokenXor {
36388 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenXor);
36389 type StablePtr = TokenXorPtr;
36390 type Green = TokenXorGreen;
36391 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36392 TokenXorGreen(
36393 Arc::new(GreenNode {
36394 kind: SyntaxKind::TokenMissing,
36395 details: GreenNodeDetails::Token("".into()),
36396 })
36397 .intern(db),
36398 )
36399 }
36400 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36401 match node.0.green.lookup_intern(db).details {
36402 GreenNodeDetails::Token(_) => Self { node },
36403 GreenNodeDetails::Node { .. } => {
36404 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenXor)
36405 }
36406 }
36407 }
36408 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36409 match node.0.green.lookup_intern(db).details {
36410 GreenNodeDetails::Token(_) => Some(Self { node }),
36411 GreenNodeDetails::Node { .. } => None,
36412 }
36413 }
36414 fn as_syntax_node(&self) -> SyntaxNode {
36415 self.node.clone()
36416 }
36417 fn stable_ptr(&self) -> Self::StablePtr {
36418 TokenXorPtr(self.node.0.stable_ptr)
36419 }
36420}
36421impl From<&TokenXor> for SyntaxStablePtrId {
36422 fn from(node: &TokenXor) -> Self {
36423 node.stable_ptr().untyped()
36424 }
36425}
36426#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36427pub struct TerminalXor {
36428 node: SyntaxNode,
36429 children: Arc<[SyntaxNode]>,
36430}
36431impl Terminal for TerminalXor {
36432 const KIND: SyntaxKind = SyntaxKind::TerminalXor;
36433 type TokenType = TokenXor;
36434 fn new_green(
36435 db: &dyn SyntaxGroup,
36436 leading_trivia: TriviaGreen,
36437 token: <<TerminalXor as Terminal>::TokenType as TypedSyntaxNode>::Green,
36438 trailing_trivia: TriviaGreen,
36439 ) -> Self::Green {
36440 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
36441 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
36442 TerminalXorGreen(
36443 Arc::new(GreenNode {
36444 kind: SyntaxKind::TerminalXor,
36445 details: GreenNodeDetails::Node { children, width },
36446 })
36447 .intern(db),
36448 )
36449 }
36450 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36451 self.token(db).text(db)
36452 }
36453}
36454impl TerminalXor {
36455 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36456 Trivia::from_syntax_node(db, self.children[0].clone())
36457 }
36458 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenXor {
36459 TokenXor::from_syntax_node(db, self.children[1].clone())
36460 }
36461 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36462 Trivia::from_syntax_node(db, self.children[2].clone())
36463 }
36464}
36465#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36466pub struct TerminalXorPtr(pub SyntaxStablePtrId);
36467impl TerminalXorPtr {}
36468impl TypedStablePtr for TerminalXorPtr {
36469 type SyntaxNode = TerminalXor;
36470 fn untyped(&self) -> SyntaxStablePtrId {
36471 self.0
36472 }
36473 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalXor {
36474 TerminalXor::from_syntax_node(db, self.0.lookup(db))
36475 }
36476}
36477impl From<TerminalXorPtr> for SyntaxStablePtrId {
36478 fn from(ptr: TerminalXorPtr) -> Self {
36479 ptr.untyped()
36480 }
36481}
36482#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36483pub struct TerminalXorGreen(pub GreenId);
36484impl TypedSyntaxNode for TerminalXor {
36485 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalXor);
36486 type StablePtr = TerminalXorPtr;
36487 type Green = TerminalXorGreen;
36488 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36489 TerminalXorGreen(
36490 Arc::new(GreenNode {
36491 kind: SyntaxKind::TerminalXor,
36492 details: GreenNodeDetails::Node {
36493 children: vec![
36494 Trivia::missing(db).0,
36495 TokenXor::missing(db).0,
36496 Trivia::missing(db).0,
36497 ],
36498 width: TextWidth::default(),
36499 },
36500 })
36501 .intern(db),
36502 )
36503 }
36504 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36505 let kind = node.kind(db);
36506 assert_eq!(
36507 kind,
36508 SyntaxKind::TerminalXor,
36509 "Unexpected SyntaxKind {:?}. Expected {:?}.",
36510 kind,
36511 SyntaxKind::TerminalXor
36512 );
36513 let children = db.get_children(node.clone());
36514 Self { node, children }
36515 }
36516 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36517 let kind = node.kind(db);
36518 if kind == SyntaxKind::TerminalXor { Some(Self::from_syntax_node(db, node)) } else { None }
36519 }
36520 fn as_syntax_node(&self) -> SyntaxNode {
36521 self.node.clone()
36522 }
36523 fn stable_ptr(&self) -> Self::StablePtr {
36524 TerminalXorPtr(self.node.0.stable_ptr)
36525 }
36526}
36527impl From<&TerminalXor> for SyntaxStablePtrId {
36528 fn from(node: &TerminalXor) -> Self {
36529 node.stable_ptr().untyped()
36530 }
36531}
36532#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36533pub struct SyntaxFile {
36534 node: SyntaxNode,
36535 children: Arc<[SyntaxNode]>,
36536}
36537impl SyntaxFile {
36538 pub const INDEX_ITEMS: usize = 0;
36539 pub const INDEX_EOF: usize = 1;
36540 pub fn new_green(
36541 db: &dyn SyntaxGroup,
36542 items: ModuleItemListGreen,
36543 eof: TerminalEndOfFileGreen,
36544 ) -> SyntaxFileGreen {
36545 let children: Vec<GreenId> = vec![items.0, eof.0];
36546 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
36547 SyntaxFileGreen(
36548 Arc::new(GreenNode {
36549 kind: SyntaxKind::SyntaxFile,
36550 details: GreenNodeDetails::Node { children, width },
36551 })
36552 .intern(db),
36553 )
36554 }
36555}
36556impl SyntaxFile {
36557 pub fn items(&self, db: &dyn SyntaxGroup) -> ModuleItemList {
36558 ModuleItemList::from_syntax_node(db, self.children[0].clone())
36559 }
36560 pub fn eof(&self, db: &dyn SyntaxGroup) -> TerminalEndOfFile {
36561 TerminalEndOfFile::from_syntax_node(db, self.children[1].clone())
36562 }
36563}
36564#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36565pub struct SyntaxFilePtr(pub SyntaxStablePtrId);
36566impl SyntaxFilePtr {}
36567impl TypedStablePtr for SyntaxFilePtr {
36568 type SyntaxNode = SyntaxFile;
36569 fn untyped(&self) -> SyntaxStablePtrId {
36570 self.0
36571 }
36572 fn lookup(&self, db: &dyn SyntaxGroup) -> SyntaxFile {
36573 SyntaxFile::from_syntax_node(db, self.0.lookup(db))
36574 }
36575}
36576impl From<SyntaxFilePtr> for SyntaxStablePtrId {
36577 fn from(ptr: SyntaxFilePtr) -> Self {
36578 ptr.untyped()
36579 }
36580}
36581#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36582pub struct SyntaxFileGreen(pub GreenId);
36583impl TypedSyntaxNode for SyntaxFile {
36584 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::SyntaxFile);
36585 type StablePtr = SyntaxFilePtr;
36586 type Green = SyntaxFileGreen;
36587 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36588 SyntaxFileGreen(
36589 Arc::new(GreenNode {
36590 kind: SyntaxKind::SyntaxFile,
36591 details: GreenNodeDetails::Node {
36592 children: vec![ModuleItemList::missing(db).0, TerminalEndOfFile::missing(db).0],
36593 width: TextWidth::default(),
36594 },
36595 })
36596 .intern(db),
36597 )
36598 }
36599 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36600 let kind = node.kind(db);
36601 assert_eq!(
36602 kind,
36603 SyntaxKind::SyntaxFile,
36604 "Unexpected SyntaxKind {:?}. Expected {:?}.",
36605 kind,
36606 SyntaxKind::SyntaxFile
36607 );
36608 let children = db.get_children(node.clone());
36609 Self { node, children }
36610 }
36611 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36612 let kind = node.kind(db);
36613 if kind == SyntaxKind::SyntaxFile { Some(Self::from_syntax_node(db, node)) } else { None }
36614 }
36615 fn as_syntax_node(&self) -> SyntaxNode {
36616 self.node.clone()
36617 }
36618 fn stable_ptr(&self) -> Self::StablePtr {
36619 SyntaxFilePtr(self.node.0.stable_ptr)
36620 }
36621}
36622impl From<&SyntaxFile> for SyntaxStablePtrId {
36623 fn from(node: &SyntaxFile) -> Self {
36624 node.stable_ptr().untyped()
36625 }
36626}
36627#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36628pub struct TokenEmpty {
36629 node: SyntaxNode,
36630}
36631impl Token for TokenEmpty {
36632 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
36633 TokenEmptyGreen(
36634 Arc::new(GreenNode {
36635 kind: SyntaxKind::TokenEmpty,
36636 details: GreenNodeDetails::Token(text),
36637 })
36638 .intern(db),
36639 )
36640 }
36641 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36642 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
36643 .clone()
36644 }
36645}
36646#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36647pub struct TokenEmptyPtr(pub SyntaxStablePtrId);
36648impl TypedStablePtr for TokenEmptyPtr {
36649 type SyntaxNode = TokenEmpty;
36650 fn untyped(&self) -> SyntaxStablePtrId {
36651 self.0
36652 }
36653 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenEmpty {
36654 TokenEmpty::from_syntax_node(db, self.0.lookup(db))
36655 }
36656}
36657impl From<TokenEmptyPtr> for SyntaxStablePtrId {
36658 fn from(ptr: TokenEmptyPtr) -> Self {
36659 ptr.untyped()
36660 }
36661}
36662#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36663pub struct TokenEmptyGreen(pub GreenId);
36664impl TokenEmptyGreen {
36665 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36666 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
36667 }
36668}
36669impl TypedSyntaxNode for TokenEmpty {
36670 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenEmpty);
36671 type StablePtr = TokenEmptyPtr;
36672 type Green = TokenEmptyGreen;
36673 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36674 TokenEmptyGreen(
36675 Arc::new(GreenNode {
36676 kind: SyntaxKind::TokenMissing,
36677 details: GreenNodeDetails::Token("".into()),
36678 })
36679 .intern(db),
36680 )
36681 }
36682 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36683 match node.0.green.lookup_intern(db).details {
36684 GreenNodeDetails::Token(_) => Self { node },
36685 GreenNodeDetails::Node { .. } => {
36686 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenEmpty)
36687 }
36688 }
36689 }
36690 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36691 match node.0.green.lookup_intern(db).details {
36692 GreenNodeDetails::Token(_) => Some(Self { node }),
36693 GreenNodeDetails::Node { .. } => None,
36694 }
36695 }
36696 fn as_syntax_node(&self) -> SyntaxNode {
36697 self.node.clone()
36698 }
36699 fn stable_ptr(&self) -> Self::StablePtr {
36700 TokenEmptyPtr(self.node.0.stable_ptr)
36701 }
36702}
36703impl From<&TokenEmpty> for SyntaxStablePtrId {
36704 fn from(node: &TokenEmpty) -> Self {
36705 node.stable_ptr().untyped()
36706 }
36707}
36708#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36709pub struct TerminalEmpty {
36710 node: SyntaxNode,
36711 children: Arc<[SyntaxNode]>,
36712}
36713impl Terminal for TerminalEmpty {
36714 const KIND: SyntaxKind = SyntaxKind::TerminalEmpty;
36715 type TokenType = TokenEmpty;
36716 fn new_green(
36717 db: &dyn SyntaxGroup,
36718 leading_trivia: TriviaGreen,
36719 token: <<TerminalEmpty as Terminal>::TokenType as TypedSyntaxNode>::Green,
36720 trailing_trivia: TriviaGreen,
36721 ) -> Self::Green {
36722 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
36723 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
36724 TerminalEmptyGreen(
36725 Arc::new(GreenNode {
36726 kind: SyntaxKind::TerminalEmpty,
36727 details: GreenNodeDetails::Node { children, width },
36728 })
36729 .intern(db),
36730 )
36731 }
36732 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36733 self.token(db).text(db)
36734 }
36735}
36736impl TerminalEmpty {
36737 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36738 Trivia::from_syntax_node(db, self.children[0].clone())
36739 }
36740 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenEmpty {
36741 TokenEmpty::from_syntax_node(db, self.children[1].clone())
36742 }
36743 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36744 Trivia::from_syntax_node(db, self.children[2].clone())
36745 }
36746}
36747#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36748pub struct TerminalEmptyPtr(pub SyntaxStablePtrId);
36749impl TerminalEmptyPtr {}
36750impl TypedStablePtr for TerminalEmptyPtr {
36751 type SyntaxNode = TerminalEmpty;
36752 fn untyped(&self) -> SyntaxStablePtrId {
36753 self.0
36754 }
36755 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalEmpty {
36756 TerminalEmpty::from_syntax_node(db, self.0.lookup(db))
36757 }
36758}
36759impl From<TerminalEmptyPtr> for SyntaxStablePtrId {
36760 fn from(ptr: TerminalEmptyPtr) -> Self {
36761 ptr.untyped()
36762 }
36763}
36764#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36765pub struct TerminalEmptyGreen(pub GreenId);
36766impl TypedSyntaxNode for TerminalEmpty {
36767 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalEmpty);
36768 type StablePtr = TerminalEmptyPtr;
36769 type Green = TerminalEmptyGreen;
36770 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36771 TerminalEmptyGreen(
36772 Arc::new(GreenNode {
36773 kind: SyntaxKind::TerminalEmpty,
36774 details: GreenNodeDetails::Node {
36775 children: vec![
36776 Trivia::missing(db).0,
36777 TokenEmpty::missing(db).0,
36778 Trivia::missing(db).0,
36779 ],
36780 width: TextWidth::default(),
36781 },
36782 })
36783 .intern(db),
36784 )
36785 }
36786 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36787 let kind = node.kind(db);
36788 assert_eq!(
36789 kind,
36790 SyntaxKind::TerminalEmpty,
36791 "Unexpected SyntaxKind {:?}. Expected {:?}.",
36792 kind,
36793 SyntaxKind::TerminalEmpty
36794 );
36795 let children = db.get_children(node.clone());
36796 Self { node, children }
36797 }
36798 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36799 let kind = node.kind(db);
36800 if kind == SyntaxKind::TerminalEmpty {
36801 Some(Self::from_syntax_node(db, node))
36802 } else {
36803 None
36804 }
36805 }
36806 fn as_syntax_node(&self) -> SyntaxNode {
36807 self.node.clone()
36808 }
36809 fn stable_ptr(&self) -> Self::StablePtr {
36810 TerminalEmptyPtr(self.node.0.stable_ptr)
36811 }
36812}
36813impl From<&TerminalEmpty> for SyntaxStablePtrId {
36814 fn from(node: &TerminalEmpty) -> Self {
36815 node.stable_ptr().untyped()
36816 }
36817}
36818#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36819pub struct TokenSingleLineComment {
36820 node: SyntaxNode,
36821}
36822impl Token for TokenSingleLineComment {
36823 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
36824 TokenSingleLineCommentGreen(
36825 Arc::new(GreenNode {
36826 kind: SyntaxKind::TokenSingleLineComment,
36827 details: GreenNodeDetails::Token(text),
36828 })
36829 .intern(db),
36830 )
36831 }
36832 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36833 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
36834 .clone()
36835 }
36836}
36837#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36838pub struct TokenSingleLineCommentPtr(pub SyntaxStablePtrId);
36839impl TypedStablePtr for TokenSingleLineCommentPtr {
36840 type SyntaxNode = TokenSingleLineComment;
36841 fn untyped(&self) -> SyntaxStablePtrId {
36842 self.0
36843 }
36844 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenSingleLineComment {
36845 TokenSingleLineComment::from_syntax_node(db, self.0.lookup(db))
36846 }
36847}
36848impl From<TokenSingleLineCommentPtr> for SyntaxStablePtrId {
36849 fn from(ptr: TokenSingleLineCommentPtr) -> Self {
36850 ptr.untyped()
36851 }
36852}
36853#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36854pub struct TokenSingleLineCommentGreen(pub GreenId);
36855impl TokenSingleLineCommentGreen {
36856 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36857 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
36858 }
36859}
36860impl TypedSyntaxNode for TokenSingleLineComment {
36861 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenSingleLineComment);
36862 type StablePtr = TokenSingleLineCommentPtr;
36863 type Green = TokenSingleLineCommentGreen;
36864 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36865 TokenSingleLineCommentGreen(
36866 Arc::new(GreenNode {
36867 kind: SyntaxKind::TokenMissing,
36868 details: GreenNodeDetails::Token("".into()),
36869 })
36870 .intern(db),
36871 )
36872 }
36873 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36874 match node.0.green.lookup_intern(db).details {
36875 GreenNodeDetails::Token(_) => Self { node },
36876 GreenNodeDetails::Node { .. } => panic!(
36877 "Expected a token {:?}, not an internal node",
36878 SyntaxKind::TokenSingleLineComment
36879 ),
36880 }
36881 }
36882 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36883 match node.0.green.lookup_intern(db).details {
36884 GreenNodeDetails::Token(_) => Some(Self { node }),
36885 GreenNodeDetails::Node { .. } => None,
36886 }
36887 }
36888 fn as_syntax_node(&self) -> SyntaxNode {
36889 self.node.clone()
36890 }
36891 fn stable_ptr(&self) -> Self::StablePtr {
36892 TokenSingleLineCommentPtr(self.node.0.stable_ptr)
36893 }
36894}
36895impl From<&TokenSingleLineComment> for SyntaxStablePtrId {
36896 fn from(node: &TokenSingleLineComment) -> Self {
36897 node.stable_ptr().untyped()
36898 }
36899}
36900#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36901pub struct TokenSingleLineInnerComment {
36902 node: SyntaxNode,
36903}
36904impl Token for TokenSingleLineInnerComment {
36905 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
36906 TokenSingleLineInnerCommentGreen(
36907 Arc::new(GreenNode {
36908 kind: SyntaxKind::TokenSingleLineInnerComment,
36909 details: GreenNodeDetails::Token(text),
36910 })
36911 .intern(db),
36912 )
36913 }
36914 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36915 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
36916 .clone()
36917 }
36918}
36919#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36920pub struct TokenSingleLineInnerCommentPtr(pub SyntaxStablePtrId);
36921impl TypedStablePtr for TokenSingleLineInnerCommentPtr {
36922 type SyntaxNode = TokenSingleLineInnerComment;
36923 fn untyped(&self) -> SyntaxStablePtrId {
36924 self.0
36925 }
36926 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenSingleLineInnerComment {
36927 TokenSingleLineInnerComment::from_syntax_node(db, self.0.lookup(db))
36928 }
36929}
36930impl From<TokenSingleLineInnerCommentPtr> for SyntaxStablePtrId {
36931 fn from(ptr: TokenSingleLineInnerCommentPtr) -> Self {
36932 ptr.untyped()
36933 }
36934}
36935#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36936pub struct TokenSingleLineInnerCommentGreen(pub GreenId);
36937impl TokenSingleLineInnerCommentGreen {
36938 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36939 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
36940 }
36941}
36942impl TypedSyntaxNode for TokenSingleLineInnerComment {
36943 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenSingleLineInnerComment);
36944 type StablePtr = TokenSingleLineInnerCommentPtr;
36945 type Green = TokenSingleLineInnerCommentGreen;
36946 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36947 TokenSingleLineInnerCommentGreen(
36948 Arc::new(GreenNode {
36949 kind: SyntaxKind::TokenMissing,
36950 details: GreenNodeDetails::Token("".into()),
36951 })
36952 .intern(db),
36953 )
36954 }
36955 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36956 match node.0.green.lookup_intern(db).details {
36957 GreenNodeDetails::Token(_) => Self { node },
36958 GreenNodeDetails::Node { .. } => panic!(
36959 "Expected a token {:?}, not an internal node",
36960 SyntaxKind::TokenSingleLineInnerComment
36961 ),
36962 }
36963 }
36964 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36965 match node.0.green.lookup_intern(db).details {
36966 GreenNodeDetails::Token(_) => Some(Self { node }),
36967 GreenNodeDetails::Node { .. } => None,
36968 }
36969 }
36970 fn as_syntax_node(&self) -> SyntaxNode {
36971 self.node.clone()
36972 }
36973 fn stable_ptr(&self) -> Self::StablePtr {
36974 TokenSingleLineInnerCommentPtr(self.node.0.stable_ptr)
36975 }
36976}
36977impl From<&TokenSingleLineInnerComment> for SyntaxStablePtrId {
36978 fn from(node: &TokenSingleLineInnerComment) -> Self {
36979 node.stable_ptr().untyped()
36980 }
36981}
36982#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36983pub struct TokenSingleLineDocComment {
36984 node: SyntaxNode,
36985}
36986impl Token for TokenSingleLineDocComment {
36987 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
36988 TokenSingleLineDocCommentGreen(
36989 Arc::new(GreenNode {
36990 kind: SyntaxKind::TokenSingleLineDocComment,
36991 details: GreenNodeDetails::Token(text),
36992 })
36993 .intern(db),
36994 )
36995 }
36996 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36997 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
36998 .clone()
36999 }
37000}
37001#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37002pub struct TokenSingleLineDocCommentPtr(pub SyntaxStablePtrId);
37003impl TypedStablePtr for TokenSingleLineDocCommentPtr {
37004 type SyntaxNode = TokenSingleLineDocComment;
37005 fn untyped(&self) -> SyntaxStablePtrId {
37006 self.0
37007 }
37008 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenSingleLineDocComment {
37009 TokenSingleLineDocComment::from_syntax_node(db, self.0.lookup(db))
37010 }
37011}
37012impl From<TokenSingleLineDocCommentPtr> for SyntaxStablePtrId {
37013 fn from(ptr: TokenSingleLineDocCommentPtr) -> Self {
37014 ptr.untyped()
37015 }
37016}
37017#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37018pub struct TokenSingleLineDocCommentGreen(pub GreenId);
37019impl TokenSingleLineDocCommentGreen {
37020 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37021 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
37022 }
37023}
37024impl TypedSyntaxNode for TokenSingleLineDocComment {
37025 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenSingleLineDocComment);
37026 type StablePtr = TokenSingleLineDocCommentPtr;
37027 type Green = TokenSingleLineDocCommentGreen;
37028 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
37029 TokenSingleLineDocCommentGreen(
37030 Arc::new(GreenNode {
37031 kind: SyntaxKind::TokenMissing,
37032 details: GreenNodeDetails::Token("".into()),
37033 })
37034 .intern(db),
37035 )
37036 }
37037 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
37038 match node.0.green.lookup_intern(db).details {
37039 GreenNodeDetails::Token(_) => Self { node },
37040 GreenNodeDetails::Node { .. } => panic!(
37041 "Expected a token {:?}, not an internal node",
37042 SyntaxKind::TokenSingleLineDocComment
37043 ),
37044 }
37045 }
37046 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
37047 match node.0.green.lookup_intern(db).details {
37048 GreenNodeDetails::Token(_) => Some(Self { node }),
37049 GreenNodeDetails::Node { .. } => None,
37050 }
37051 }
37052 fn as_syntax_node(&self) -> SyntaxNode {
37053 self.node.clone()
37054 }
37055 fn stable_ptr(&self) -> Self::StablePtr {
37056 TokenSingleLineDocCommentPtr(self.node.0.stable_ptr)
37057 }
37058}
37059impl From<&TokenSingleLineDocComment> for SyntaxStablePtrId {
37060 fn from(node: &TokenSingleLineDocComment) -> Self {
37061 node.stable_ptr().untyped()
37062 }
37063}
37064#[derive(Clone, Debug, Eq, Hash, PartialEq)]
37065pub struct TokenWhitespace {
37066 node: SyntaxNode,
37067}
37068impl Token for TokenWhitespace {
37069 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
37070 TokenWhitespaceGreen(
37071 Arc::new(GreenNode {
37072 kind: SyntaxKind::TokenWhitespace,
37073 details: GreenNodeDetails::Token(text),
37074 })
37075 .intern(db),
37076 )
37077 }
37078 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37079 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
37080 .clone()
37081 }
37082}
37083#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37084pub struct TokenWhitespacePtr(pub SyntaxStablePtrId);
37085impl TypedStablePtr for TokenWhitespacePtr {
37086 type SyntaxNode = TokenWhitespace;
37087 fn untyped(&self) -> SyntaxStablePtrId {
37088 self.0
37089 }
37090 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenWhitespace {
37091 TokenWhitespace::from_syntax_node(db, self.0.lookup(db))
37092 }
37093}
37094impl From<TokenWhitespacePtr> for SyntaxStablePtrId {
37095 fn from(ptr: TokenWhitespacePtr) -> Self {
37096 ptr.untyped()
37097 }
37098}
37099#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37100pub struct TokenWhitespaceGreen(pub GreenId);
37101impl TokenWhitespaceGreen {
37102 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37103 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
37104 }
37105}
37106impl TypedSyntaxNode for TokenWhitespace {
37107 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenWhitespace);
37108 type StablePtr = TokenWhitespacePtr;
37109 type Green = TokenWhitespaceGreen;
37110 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
37111 TokenWhitespaceGreen(
37112 Arc::new(GreenNode {
37113 kind: SyntaxKind::TokenMissing,
37114 details: GreenNodeDetails::Token("".into()),
37115 })
37116 .intern(db),
37117 )
37118 }
37119 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
37120 match node.0.green.lookup_intern(db).details {
37121 GreenNodeDetails::Token(_) => Self { node },
37122 GreenNodeDetails::Node { .. } => {
37123 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenWhitespace)
37124 }
37125 }
37126 }
37127 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
37128 match node.0.green.lookup_intern(db).details {
37129 GreenNodeDetails::Token(_) => Some(Self { node }),
37130 GreenNodeDetails::Node { .. } => None,
37131 }
37132 }
37133 fn as_syntax_node(&self) -> SyntaxNode {
37134 self.node.clone()
37135 }
37136 fn stable_ptr(&self) -> Self::StablePtr {
37137 TokenWhitespacePtr(self.node.0.stable_ptr)
37138 }
37139}
37140impl From<&TokenWhitespace> for SyntaxStablePtrId {
37141 fn from(node: &TokenWhitespace) -> Self {
37142 node.stable_ptr().untyped()
37143 }
37144}
37145#[derive(Clone, Debug, Eq, Hash, PartialEq)]
37146pub struct TokenNewline {
37147 node: SyntaxNode,
37148}
37149impl Token for TokenNewline {
37150 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
37151 TokenNewlineGreen(
37152 Arc::new(GreenNode {
37153 kind: SyntaxKind::TokenNewline,
37154 details: GreenNodeDetails::Token(text),
37155 })
37156 .intern(db),
37157 )
37158 }
37159 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37160 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
37161 .clone()
37162 }
37163}
37164#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37165pub struct TokenNewlinePtr(pub SyntaxStablePtrId);
37166impl TypedStablePtr for TokenNewlinePtr {
37167 type SyntaxNode = TokenNewline;
37168 fn untyped(&self) -> SyntaxStablePtrId {
37169 self.0
37170 }
37171 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenNewline {
37172 TokenNewline::from_syntax_node(db, self.0.lookup(db))
37173 }
37174}
37175impl From<TokenNewlinePtr> for SyntaxStablePtrId {
37176 fn from(ptr: TokenNewlinePtr) -> Self {
37177 ptr.untyped()
37178 }
37179}
37180#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37181pub struct TokenNewlineGreen(pub GreenId);
37182impl TokenNewlineGreen {
37183 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37184 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
37185 }
37186}
37187impl TypedSyntaxNode for TokenNewline {
37188 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenNewline);
37189 type StablePtr = TokenNewlinePtr;
37190 type Green = TokenNewlineGreen;
37191 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
37192 TokenNewlineGreen(
37193 Arc::new(GreenNode {
37194 kind: SyntaxKind::TokenMissing,
37195 details: GreenNodeDetails::Token("".into()),
37196 })
37197 .intern(db),
37198 )
37199 }
37200 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
37201 match node.0.green.lookup_intern(db).details {
37202 GreenNodeDetails::Token(_) => Self { node },
37203 GreenNodeDetails::Node { .. } => {
37204 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenNewline)
37205 }
37206 }
37207 }
37208 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
37209 match node.0.green.lookup_intern(db).details {
37210 GreenNodeDetails::Token(_) => Some(Self { node }),
37211 GreenNodeDetails::Node { .. } => None,
37212 }
37213 }
37214 fn as_syntax_node(&self) -> SyntaxNode {
37215 self.node.clone()
37216 }
37217 fn stable_ptr(&self) -> Self::StablePtr {
37218 TokenNewlinePtr(self.node.0.stable_ptr)
37219 }
37220}
37221impl From<&TokenNewline> for SyntaxStablePtrId {
37222 fn from(node: &TokenNewline) -> Self {
37223 node.stable_ptr().untyped()
37224 }
37225}
37226#[derive(Clone, Debug, Eq, Hash, PartialEq)]
37227pub struct TokenMissing {
37228 node: SyntaxNode,
37229}
37230impl Token for TokenMissing {
37231 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
37232 TokenMissingGreen(
37233 Arc::new(GreenNode {
37234 kind: SyntaxKind::TokenMissing,
37235 details: GreenNodeDetails::Token(text),
37236 })
37237 .intern(db),
37238 )
37239 }
37240 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37241 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
37242 .clone()
37243 }
37244}
37245#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37246pub struct TokenMissingPtr(pub SyntaxStablePtrId);
37247impl TypedStablePtr for TokenMissingPtr {
37248 type SyntaxNode = TokenMissing;
37249 fn untyped(&self) -> SyntaxStablePtrId {
37250 self.0
37251 }
37252 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMissing {
37253 TokenMissing::from_syntax_node(db, self.0.lookup(db))
37254 }
37255}
37256impl From<TokenMissingPtr> for SyntaxStablePtrId {
37257 fn from(ptr: TokenMissingPtr) -> Self {
37258 ptr.untyped()
37259 }
37260}
37261#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37262pub struct TokenMissingGreen(pub GreenId);
37263impl TokenMissingGreen {
37264 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37265 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
37266 }
37267}
37268impl TypedSyntaxNode for TokenMissing {
37269 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMissing);
37270 type StablePtr = TokenMissingPtr;
37271 type Green = TokenMissingGreen;
37272 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
37273 TokenMissingGreen(
37274 Arc::new(GreenNode {
37275 kind: SyntaxKind::TokenMissing,
37276 details: GreenNodeDetails::Token("".into()),
37277 })
37278 .intern(db),
37279 )
37280 }
37281 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
37282 match node.0.green.lookup_intern(db).details {
37283 GreenNodeDetails::Token(_) => Self { node },
37284 GreenNodeDetails::Node { .. } => {
37285 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMissing)
37286 }
37287 }
37288 }
37289 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
37290 match node.0.green.lookup_intern(db).details {
37291 GreenNodeDetails::Token(_) => Some(Self { node }),
37292 GreenNodeDetails::Node { .. } => None,
37293 }
37294 }
37295 fn as_syntax_node(&self) -> SyntaxNode {
37296 self.node.clone()
37297 }
37298 fn stable_ptr(&self) -> Self::StablePtr {
37299 TokenMissingPtr(self.node.0.stable_ptr)
37300 }
37301}
37302impl From<&TokenMissing> for SyntaxStablePtrId {
37303 fn from(node: &TokenMissing) -> Self {
37304 node.stable_ptr().untyped()
37305 }
37306}
37307#[derive(Clone, Debug, Eq, Hash, PartialEq)]
37308pub struct TokenSkipped {
37309 node: SyntaxNode,
37310}
37311impl Token for TokenSkipped {
37312 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
37313 TokenSkippedGreen(
37314 Arc::new(GreenNode {
37315 kind: SyntaxKind::TokenSkipped,
37316 details: GreenNodeDetails::Token(text),
37317 })
37318 .intern(db),
37319 )
37320 }
37321 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37322 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
37323 .clone()
37324 }
37325}
37326#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37327pub struct TokenSkippedPtr(pub SyntaxStablePtrId);
37328impl TypedStablePtr for TokenSkippedPtr {
37329 type SyntaxNode = TokenSkipped;
37330 fn untyped(&self) -> SyntaxStablePtrId {
37331 self.0
37332 }
37333 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenSkipped {
37334 TokenSkipped::from_syntax_node(db, self.0.lookup(db))
37335 }
37336}
37337impl From<TokenSkippedPtr> for SyntaxStablePtrId {
37338 fn from(ptr: TokenSkippedPtr) -> Self {
37339 ptr.untyped()
37340 }
37341}
37342#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37343pub struct TokenSkippedGreen(pub GreenId);
37344impl TokenSkippedGreen {
37345 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37346 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
37347 }
37348}
37349impl TypedSyntaxNode for TokenSkipped {
37350 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenSkipped);
37351 type StablePtr = TokenSkippedPtr;
37352 type Green = TokenSkippedGreen;
37353 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
37354 TokenSkippedGreen(
37355 Arc::new(GreenNode {
37356 kind: SyntaxKind::TokenMissing,
37357 details: GreenNodeDetails::Token("".into()),
37358 })
37359 .intern(db),
37360 )
37361 }
37362 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
37363 match node.0.green.lookup_intern(db).details {
37364 GreenNodeDetails::Token(_) => Self { node },
37365 GreenNodeDetails::Node { .. } => {
37366 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenSkipped)
37367 }
37368 }
37369 }
37370 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
37371 match node.0.green.lookup_intern(db).details {
37372 GreenNodeDetails::Token(_) => Some(Self { node }),
37373 GreenNodeDetails::Node { .. } => None,
37374 }
37375 }
37376 fn as_syntax_node(&self) -> SyntaxNode {
37377 self.node.clone()
37378 }
37379 fn stable_ptr(&self) -> Self::StablePtr {
37380 TokenSkippedPtr(self.node.0.stable_ptr)
37381 }
37382}
37383impl From<&TokenSkipped> for SyntaxStablePtrId {
37384 fn from(node: &TokenSkipped) -> Self {
37385 node.stable_ptr().untyped()
37386 }
37387}
37388#[derive(Clone, Debug, Eq, Hash, PartialEq)]
37389pub enum TokenNode {
37390 TerminalIdentifier(TerminalIdentifier),
37391 TerminalLiteralNumber(TerminalLiteralNumber),
37392 TerminalShortString(TerminalShortString),
37393 TerminalString(TerminalString),
37394 TerminalAs(TerminalAs),
37395 TerminalConst(TerminalConst),
37396 TerminalElse(TerminalElse),
37397 TerminalEnum(TerminalEnum),
37398 TerminalExtern(TerminalExtern),
37399 TerminalFalse(TerminalFalse),
37400 TerminalFunction(TerminalFunction),
37401 TerminalIf(TerminalIf),
37402 TerminalWhile(TerminalWhile),
37403 TerminalFor(TerminalFor),
37404 TerminalLoop(TerminalLoop),
37405 TerminalImpl(TerminalImpl),
37406 TerminalImplicits(TerminalImplicits),
37407 TerminalLet(TerminalLet),
37408 TerminalMatch(TerminalMatch),
37409 TerminalModule(TerminalModule),
37410 TerminalMut(TerminalMut),
37411 TerminalNoPanic(TerminalNoPanic),
37412 TerminalOf(TerminalOf),
37413 TerminalRef(TerminalRef),
37414 TerminalContinue(TerminalContinue),
37415 TerminalReturn(TerminalReturn),
37416 TerminalBreak(TerminalBreak),
37417 TerminalStruct(TerminalStruct),
37418 TerminalTrait(TerminalTrait),
37419 TerminalTrue(TerminalTrue),
37420 TerminalType(TerminalType),
37421 TerminalUse(TerminalUse),
37422 TerminalPub(TerminalPub),
37423 TerminalAnd(TerminalAnd),
37424 TerminalAndAnd(TerminalAndAnd),
37425 TerminalArrow(TerminalArrow),
37426 TerminalAt(TerminalAt),
37427 TerminalBadCharacters(TerminalBadCharacters),
37428 TerminalColon(TerminalColon),
37429 TerminalColonColon(TerminalColonColon),
37430 TerminalComma(TerminalComma),
37431 TerminalDiv(TerminalDiv),
37432 TerminalDivEq(TerminalDivEq),
37433 TerminalDot(TerminalDot),
37434 TerminalDotDot(TerminalDotDot),
37435 TerminalDotDotEq(TerminalDotDotEq),
37436 TerminalEndOfFile(TerminalEndOfFile),
37437 TerminalEq(TerminalEq),
37438 TerminalEqEq(TerminalEqEq),
37439 TerminalGE(TerminalGE),
37440 TerminalGT(TerminalGT),
37441 TerminalHash(TerminalHash),
37442 TerminalLBrace(TerminalLBrace),
37443 TerminalLBrack(TerminalLBrack),
37444 TerminalLE(TerminalLE),
37445 TerminalLParen(TerminalLParen),
37446 TerminalLT(TerminalLT),
37447 TerminalMatchArrow(TerminalMatchArrow),
37448 TerminalMinus(TerminalMinus),
37449 TerminalMinusEq(TerminalMinusEq),
37450 TerminalMod(TerminalMod),
37451 TerminalModEq(TerminalModEq),
37452 TerminalMul(TerminalMul),
37453 TerminalMulEq(TerminalMulEq),
37454 TerminalNeq(TerminalNeq),
37455 TerminalNot(TerminalNot),
37456 TerminalBitNot(TerminalBitNot),
37457 TerminalOr(TerminalOr),
37458 TerminalOrOr(TerminalOrOr),
37459 TerminalPlus(TerminalPlus),
37460 TerminalPlusEq(TerminalPlusEq),
37461 TerminalQuestionMark(TerminalQuestionMark),
37462 TerminalRBrace(TerminalRBrace),
37463 TerminalRBrack(TerminalRBrack),
37464 TerminalRParen(TerminalRParen),
37465 TerminalSemicolon(TerminalSemicolon),
37466 TerminalUnderscore(TerminalUnderscore),
37467 TerminalXor(TerminalXor),
37468 TerminalEmpty(TerminalEmpty),
37469}
37470#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37471pub struct TokenNodePtr(pub SyntaxStablePtrId);
37472impl TypedStablePtr for TokenNodePtr {
37473 type SyntaxNode = TokenNode;
37474 fn untyped(&self) -> SyntaxStablePtrId {
37475 self.0
37476 }
37477 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenNode {
37478 TokenNode::from_syntax_node(db, self.0.lookup(db))
37479 }
37480}
37481impl From<TokenNodePtr> for SyntaxStablePtrId {
37482 fn from(ptr: TokenNodePtr) -> Self {
37483 ptr.untyped()
37484 }
37485}
37486impl From<TerminalIdentifierPtr> for TokenNodePtr {
37487 fn from(value: TerminalIdentifierPtr) -> Self {
37488 Self(value.0)
37489 }
37490}
37491impl From<TerminalLiteralNumberPtr> for TokenNodePtr {
37492 fn from(value: TerminalLiteralNumberPtr) -> Self {
37493 Self(value.0)
37494 }
37495}
37496impl From<TerminalShortStringPtr> for TokenNodePtr {
37497 fn from(value: TerminalShortStringPtr) -> Self {
37498 Self(value.0)
37499 }
37500}
37501impl From<TerminalStringPtr> for TokenNodePtr {
37502 fn from(value: TerminalStringPtr) -> Self {
37503 Self(value.0)
37504 }
37505}
37506impl From<TerminalAsPtr> for TokenNodePtr {
37507 fn from(value: TerminalAsPtr) -> Self {
37508 Self(value.0)
37509 }
37510}
37511impl From<TerminalConstPtr> for TokenNodePtr {
37512 fn from(value: TerminalConstPtr) -> Self {
37513 Self(value.0)
37514 }
37515}
37516impl From<TerminalElsePtr> for TokenNodePtr {
37517 fn from(value: TerminalElsePtr) -> Self {
37518 Self(value.0)
37519 }
37520}
37521impl From<TerminalEnumPtr> for TokenNodePtr {
37522 fn from(value: TerminalEnumPtr) -> Self {
37523 Self(value.0)
37524 }
37525}
37526impl From<TerminalExternPtr> for TokenNodePtr {
37527 fn from(value: TerminalExternPtr) -> Self {
37528 Self(value.0)
37529 }
37530}
37531impl From<TerminalFalsePtr> for TokenNodePtr {
37532 fn from(value: TerminalFalsePtr) -> Self {
37533 Self(value.0)
37534 }
37535}
37536impl From<TerminalFunctionPtr> for TokenNodePtr {
37537 fn from(value: TerminalFunctionPtr) -> Self {
37538 Self(value.0)
37539 }
37540}
37541impl From<TerminalIfPtr> for TokenNodePtr {
37542 fn from(value: TerminalIfPtr) -> Self {
37543 Self(value.0)
37544 }
37545}
37546impl From<TerminalWhilePtr> for TokenNodePtr {
37547 fn from(value: TerminalWhilePtr) -> Self {
37548 Self(value.0)
37549 }
37550}
37551impl From<TerminalForPtr> for TokenNodePtr {
37552 fn from(value: TerminalForPtr) -> Self {
37553 Self(value.0)
37554 }
37555}
37556impl From<TerminalLoopPtr> for TokenNodePtr {
37557 fn from(value: TerminalLoopPtr) -> Self {
37558 Self(value.0)
37559 }
37560}
37561impl From<TerminalImplPtr> for TokenNodePtr {
37562 fn from(value: TerminalImplPtr) -> Self {
37563 Self(value.0)
37564 }
37565}
37566impl From<TerminalImplicitsPtr> for TokenNodePtr {
37567 fn from(value: TerminalImplicitsPtr) -> Self {
37568 Self(value.0)
37569 }
37570}
37571impl From<TerminalLetPtr> for TokenNodePtr {
37572 fn from(value: TerminalLetPtr) -> Self {
37573 Self(value.0)
37574 }
37575}
37576impl From<TerminalMatchPtr> for TokenNodePtr {
37577 fn from(value: TerminalMatchPtr) -> Self {
37578 Self(value.0)
37579 }
37580}
37581impl From<TerminalModulePtr> for TokenNodePtr {
37582 fn from(value: TerminalModulePtr) -> Self {
37583 Self(value.0)
37584 }
37585}
37586impl From<TerminalMutPtr> for TokenNodePtr {
37587 fn from(value: TerminalMutPtr) -> Self {
37588 Self(value.0)
37589 }
37590}
37591impl From<TerminalNoPanicPtr> for TokenNodePtr {
37592 fn from(value: TerminalNoPanicPtr) -> Self {
37593 Self(value.0)
37594 }
37595}
37596impl From<TerminalOfPtr> for TokenNodePtr {
37597 fn from(value: TerminalOfPtr) -> Self {
37598 Self(value.0)
37599 }
37600}
37601impl From<TerminalRefPtr> for TokenNodePtr {
37602 fn from(value: TerminalRefPtr) -> Self {
37603 Self(value.0)
37604 }
37605}
37606impl From<TerminalContinuePtr> for TokenNodePtr {
37607 fn from(value: TerminalContinuePtr) -> Self {
37608 Self(value.0)
37609 }
37610}
37611impl From<TerminalReturnPtr> for TokenNodePtr {
37612 fn from(value: TerminalReturnPtr) -> Self {
37613 Self(value.0)
37614 }
37615}
37616impl From<TerminalBreakPtr> for TokenNodePtr {
37617 fn from(value: TerminalBreakPtr) -> Self {
37618 Self(value.0)
37619 }
37620}
37621impl From<TerminalStructPtr> for TokenNodePtr {
37622 fn from(value: TerminalStructPtr) -> Self {
37623 Self(value.0)
37624 }
37625}
37626impl From<TerminalTraitPtr> for TokenNodePtr {
37627 fn from(value: TerminalTraitPtr) -> Self {
37628 Self(value.0)
37629 }
37630}
37631impl From<TerminalTruePtr> for TokenNodePtr {
37632 fn from(value: TerminalTruePtr) -> Self {
37633 Self(value.0)
37634 }
37635}
37636impl From<TerminalTypePtr> for TokenNodePtr {
37637 fn from(value: TerminalTypePtr) -> Self {
37638 Self(value.0)
37639 }
37640}
37641impl From<TerminalUsePtr> for TokenNodePtr {
37642 fn from(value: TerminalUsePtr) -> Self {
37643 Self(value.0)
37644 }
37645}
37646impl From<TerminalPubPtr> for TokenNodePtr {
37647 fn from(value: TerminalPubPtr) -> Self {
37648 Self(value.0)
37649 }
37650}
37651impl From<TerminalAndPtr> for TokenNodePtr {
37652 fn from(value: TerminalAndPtr) -> Self {
37653 Self(value.0)
37654 }
37655}
37656impl From<TerminalAndAndPtr> for TokenNodePtr {
37657 fn from(value: TerminalAndAndPtr) -> Self {
37658 Self(value.0)
37659 }
37660}
37661impl From<TerminalArrowPtr> for TokenNodePtr {
37662 fn from(value: TerminalArrowPtr) -> Self {
37663 Self(value.0)
37664 }
37665}
37666impl From<TerminalAtPtr> for TokenNodePtr {
37667 fn from(value: TerminalAtPtr) -> Self {
37668 Self(value.0)
37669 }
37670}
37671impl From<TerminalBadCharactersPtr> for TokenNodePtr {
37672 fn from(value: TerminalBadCharactersPtr) -> Self {
37673 Self(value.0)
37674 }
37675}
37676impl From<TerminalColonPtr> for TokenNodePtr {
37677 fn from(value: TerminalColonPtr) -> Self {
37678 Self(value.0)
37679 }
37680}
37681impl From<TerminalColonColonPtr> for TokenNodePtr {
37682 fn from(value: TerminalColonColonPtr) -> Self {
37683 Self(value.0)
37684 }
37685}
37686impl From<TerminalCommaPtr> for TokenNodePtr {
37687 fn from(value: TerminalCommaPtr) -> Self {
37688 Self(value.0)
37689 }
37690}
37691impl From<TerminalDivPtr> for TokenNodePtr {
37692 fn from(value: TerminalDivPtr) -> Self {
37693 Self(value.0)
37694 }
37695}
37696impl From<TerminalDivEqPtr> for TokenNodePtr {
37697 fn from(value: TerminalDivEqPtr) -> Self {
37698 Self(value.0)
37699 }
37700}
37701impl From<TerminalDotPtr> for TokenNodePtr {
37702 fn from(value: TerminalDotPtr) -> Self {
37703 Self(value.0)
37704 }
37705}
37706impl From<TerminalDotDotPtr> for TokenNodePtr {
37707 fn from(value: TerminalDotDotPtr) -> Self {
37708 Self(value.0)
37709 }
37710}
37711impl From<TerminalDotDotEqPtr> for TokenNodePtr {
37712 fn from(value: TerminalDotDotEqPtr) -> Self {
37713 Self(value.0)
37714 }
37715}
37716impl From<TerminalEndOfFilePtr> for TokenNodePtr {
37717 fn from(value: TerminalEndOfFilePtr) -> Self {
37718 Self(value.0)
37719 }
37720}
37721impl From<TerminalEqPtr> for TokenNodePtr {
37722 fn from(value: TerminalEqPtr) -> Self {
37723 Self(value.0)
37724 }
37725}
37726impl From<TerminalEqEqPtr> for TokenNodePtr {
37727 fn from(value: TerminalEqEqPtr) -> Self {
37728 Self(value.0)
37729 }
37730}
37731impl From<TerminalGEPtr> for TokenNodePtr {
37732 fn from(value: TerminalGEPtr) -> Self {
37733 Self(value.0)
37734 }
37735}
37736impl From<TerminalGTPtr> for TokenNodePtr {
37737 fn from(value: TerminalGTPtr) -> Self {
37738 Self(value.0)
37739 }
37740}
37741impl From<TerminalHashPtr> for TokenNodePtr {
37742 fn from(value: TerminalHashPtr) -> Self {
37743 Self(value.0)
37744 }
37745}
37746impl From<TerminalLBracePtr> for TokenNodePtr {
37747 fn from(value: TerminalLBracePtr) -> Self {
37748 Self(value.0)
37749 }
37750}
37751impl From<TerminalLBrackPtr> for TokenNodePtr {
37752 fn from(value: TerminalLBrackPtr) -> Self {
37753 Self(value.0)
37754 }
37755}
37756impl From<TerminalLEPtr> for TokenNodePtr {
37757 fn from(value: TerminalLEPtr) -> Self {
37758 Self(value.0)
37759 }
37760}
37761impl From<TerminalLParenPtr> for TokenNodePtr {
37762 fn from(value: TerminalLParenPtr) -> Self {
37763 Self(value.0)
37764 }
37765}
37766impl From<TerminalLTPtr> for TokenNodePtr {
37767 fn from(value: TerminalLTPtr) -> Self {
37768 Self(value.0)
37769 }
37770}
37771impl From<TerminalMatchArrowPtr> for TokenNodePtr {
37772 fn from(value: TerminalMatchArrowPtr) -> Self {
37773 Self(value.0)
37774 }
37775}
37776impl From<TerminalMinusPtr> for TokenNodePtr {
37777 fn from(value: TerminalMinusPtr) -> Self {
37778 Self(value.0)
37779 }
37780}
37781impl From<TerminalMinusEqPtr> for TokenNodePtr {
37782 fn from(value: TerminalMinusEqPtr) -> Self {
37783 Self(value.0)
37784 }
37785}
37786impl From<TerminalModPtr> for TokenNodePtr {
37787 fn from(value: TerminalModPtr) -> Self {
37788 Self(value.0)
37789 }
37790}
37791impl From<TerminalModEqPtr> for TokenNodePtr {
37792 fn from(value: TerminalModEqPtr) -> Self {
37793 Self(value.0)
37794 }
37795}
37796impl From<TerminalMulPtr> for TokenNodePtr {
37797 fn from(value: TerminalMulPtr) -> Self {
37798 Self(value.0)
37799 }
37800}
37801impl From<TerminalMulEqPtr> for TokenNodePtr {
37802 fn from(value: TerminalMulEqPtr) -> Self {
37803 Self(value.0)
37804 }
37805}
37806impl From<TerminalNeqPtr> for TokenNodePtr {
37807 fn from(value: TerminalNeqPtr) -> Self {
37808 Self(value.0)
37809 }
37810}
37811impl From<TerminalNotPtr> for TokenNodePtr {
37812 fn from(value: TerminalNotPtr) -> Self {
37813 Self(value.0)
37814 }
37815}
37816impl From<TerminalBitNotPtr> for TokenNodePtr {
37817 fn from(value: TerminalBitNotPtr) -> Self {
37818 Self(value.0)
37819 }
37820}
37821impl From<TerminalOrPtr> for TokenNodePtr {
37822 fn from(value: TerminalOrPtr) -> Self {
37823 Self(value.0)
37824 }
37825}
37826impl From<TerminalOrOrPtr> for TokenNodePtr {
37827 fn from(value: TerminalOrOrPtr) -> Self {
37828 Self(value.0)
37829 }
37830}
37831impl From<TerminalPlusPtr> for TokenNodePtr {
37832 fn from(value: TerminalPlusPtr) -> Self {
37833 Self(value.0)
37834 }
37835}
37836impl From<TerminalPlusEqPtr> for TokenNodePtr {
37837 fn from(value: TerminalPlusEqPtr) -> Self {
37838 Self(value.0)
37839 }
37840}
37841impl From<TerminalQuestionMarkPtr> for TokenNodePtr {
37842 fn from(value: TerminalQuestionMarkPtr) -> Self {
37843 Self(value.0)
37844 }
37845}
37846impl From<TerminalRBracePtr> for TokenNodePtr {
37847 fn from(value: TerminalRBracePtr) -> Self {
37848 Self(value.0)
37849 }
37850}
37851impl From<TerminalRBrackPtr> for TokenNodePtr {
37852 fn from(value: TerminalRBrackPtr) -> Self {
37853 Self(value.0)
37854 }
37855}
37856impl From<TerminalRParenPtr> for TokenNodePtr {
37857 fn from(value: TerminalRParenPtr) -> Self {
37858 Self(value.0)
37859 }
37860}
37861impl From<TerminalSemicolonPtr> for TokenNodePtr {
37862 fn from(value: TerminalSemicolonPtr) -> Self {
37863 Self(value.0)
37864 }
37865}
37866impl From<TerminalUnderscorePtr> for TokenNodePtr {
37867 fn from(value: TerminalUnderscorePtr) -> Self {
37868 Self(value.0)
37869 }
37870}
37871impl From<TerminalXorPtr> for TokenNodePtr {
37872 fn from(value: TerminalXorPtr) -> Self {
37873 Self(value.0)
37874 }
37875}
37876impl From<TerminalEmptyPtr> for TokenNodePtr {
37877 fn from(value: TerminalEmptyPtr) -> Self {
37878 Self(value.0)
37879 }
37880}
37881impl From<TerminalIdentifierGreen> for TokenNodeGreen {
37882 fn from(value: TerminalIdentifierGreen) -> Self {
37883 Self(value.0)
37884 }
37885}
37886impl From<TerminalLiteralNumberGreen> for TokenNodeGreen {
37887 fn from(value: TerminalLiteralNumberGreen) -> Self {
37888 Self(value.0)
37889 }
37890}
37891impl From<TerminalShortStringGreen> for TokenNodeGreen {
37892 fn from(value: TerminalShortStringGreen) -> Self {
37893 Self(value.0)
37894 }
37895}
37896impl From<TerminalStringGreen> for TokenNodeGreen {
37897 fn from(value: TerminalStringGreen) -> Self {
37898 Self(value.0)
37899 }
37900}
37901impl From<TerminalAsGreen> for TokenNodeGreen {
37902 fn from(value: TerminalAsGreen) -> Self {
37903 Self(value.0)
37904 }
37905}
37906impl From<TerminalConstGreen> for TokenNodeGreen {
37907 fn from(value: TerminalConstGreen) -> Self {
37908 Self(value.0)
37909 }
37910}
37911impl From<TerminalElseGreen> for TokenNodeGreen {
37912 fn from(value: TerminalElseGreen) -> Self {
37913 Self(value.0)
37914 }
37915}
37916impl From<TerminalEnumGreen> for TokenNodeGreen {
37917 fn from(value: TerminalEnumGreen) -> Self {
37918 Self(value.0)
37919 }
37920}
37921impl From<TerminalExternGreen> for TokenNodeGreen {
37922 fn from(value: TerminalExternGreen) -> Self {
37923 Self(value.0)
37924 }
37925}
37926impl From<TerminalFalseGreen> for TokenNodeGreen {
37927 fn from(value: TerminalFalseGreen) -> Self {
37928 Self(value.0)
37929 }
37930}
37931impl From<TerminalFunctionGreen> for TokenNodeGreen {
37932 fn from(value: TerminalFunctionGreen) -> Self {
37933 Self(value.0)
37934 }
37935}
37936impl From<TerminalIfGreen> for TokenNodeGreen {
37937 fn from(value: TerminalIfGreen) -> Self {
37938 Self(value.0)
37939 }
37940}
37941impl From<TerminalWhileGreen> for TokenNodeGreen {
37942 fn from(value: TerminalWhileGreen) -> Self {
37943 Self(value.0)
37944 }
37945}
37946impl From<TerminalForGreen> for TokenNodeGreen {
37947 fn from(value: TerminalForGreen) -> Self {
37948 Self(value.0)
37949 }
37950}
37951impl From<TerminalLoopGreen> for TokenNodeGreen {
37952 fn from(value: TerminalLoopGreen) -> Self {
37953 Self(value.0)
37954 }
37955}
37956impl From<TerminalImplGreen> for TokenNodeGreen {
37957 fn from(value: TerminalImplGreen) -> Self {
37958 Self(value.0)
37959 }
37960}
37961impl From<TerminalImplicitsGreen> for TokenNodeGreen {
37962 fn from(value: TerminalImplicitsGreen) -> Self {
37963 Self(value.0)
37964 }
37965}
37966impl From<TerminalLetGreen> for TokenNodeGreen {
37967 fn from(value: TerminalLetGreen) -> Self {
37968 Self(value.0)
37969 }
37970}
37971impl From<TerminalMatchGreen> for TokenNodeGreen {
37972 fn from(value: TerminalMatchGreen) -> Self {
37973 Self(value.0)
37974 }
37975}
37976impl From<TerminalModuleGreen> for TokenNodeGreen {
37977 fn from(value: TerminalModuleGreen) -> Self {
37978 Self(value.0)
37979 }
37980}
37981impl From<TerminalMutGreen> for TokenNodeGreen {
37982 fn from(value: TerminalMutGreen) -> Self {
37983 Self(value.0)
37984 }
37985}
37986impl From<TerminalNoPanicGreen> for TokenNodeGreen {
37987 fn from(value: TerminalNoPanicGreen) -> Self {
37988 Self(value.0)
37989 }
37990}
37991impl From<TerminalOfGreen> for TokenNodeGreen {
37992 fn from(value: TerminalOfGreen) -> Self {
37993 Self(value.0)
37994 }
37995}
37996impl From<TerminalRefGreen> for TokenNodeGreen {
37997 fn from(value: TerminalRefGreen) -> Self {
37998 Self(value.0)
37999 }
38000}
38001impl From<TerminalContinueGreen> for TokenNodeGreen {
38002 fn from(value: TerminalContinueGreen) -> Self {
38003 Self(value.0)
38004 }
38005}
38006impl From<TerminalReturnGreen> for TokenNodeGreen {
38007 fn from(value: TerminalReturnGreen) -> Self {
38008 Self(value.0)
38009 }
38010}
38011impl From<TerminalBreakGreen> for TokenNodeGreen {
38012 fn from(value: TerminalBreakGreen) -> Self {
38013 Self(value.0)
38014 }
38015}
38016impl From<TerminalStructGreen> for TokenNodeGreen {
38017 fn from(value: TerminalStructGreen) -> Self {
38018 Self(value.0)
38019 }
38020}
38021impl From<TerminalTraitGreen> for TokenNodeGreen {
38022 fn from(value: TerminalTraitGreen) -> Self {
38023 Self(value.0)
38024 }
38025}
38026impl From<TerminalTrueGreen> for TokenNodeGreen {
38027 fn from(value: TerminalTrueGreen) -> Self {
38028 Self(value.0)
38029 }
38030}
38031impl From<TerminalTypeGreen> for TokenNodeGreen {
38032 fn from(value: TerminalTypeGreen) -> Self {
38033 Self(value.0)
38034 }
38035}
38036impl From<TerminalUseGreen> for TokenNodeGreen {
38037 fn from(value: TerminalUseGreen) -> Self {
38038 Self(value.0)
38039 }
38040}
38041impl From<TerminalPubGreen> for TokenNodeGreen {
38042 fn from(value: TerminalPubGreen) -> Self {
38043 Self(value.0)
38044 }
38045}
38046impl From<TerminalAndGreen> for TokenNodeGreen {
38047 fn from(value: TerminalAndGreen) -> Self {
38048 Self(value.0)
38049 }
38050}
38051impl From<TerminalAndAndGreen> for TokenNodeGreen {
38052 fn from(value: TerminalAndAndGreen) -> Self {
38053 Self(value.0)
38054 }
38055}
38056impl From<TerminalArrowGreen> for TokenNodeGreen {
38057 fn from(value: TerminalArrowGreen) -> Self {
38058 Self(value.0)
38059 }
38060}
38061impl From<TerminalAtGreen> for TokenNodeGreen {
38062 fn from(value: TerminalAtGreen) -> Self {
38063 Self(value.0)
38064 }
38065}
38066impl From<TerminalBadCharactersGreen> for TokenNodeGreen {
38067 fn from(value: TerminalBadCharactersGreen) -> Self {
38068 Self(value.0)
38069 }
38070}
38071impl From<TerminalColonGreen> for TokenNodeGreen {
38072 fn from(value: TerminalColonGreen) -> Self {
38073 Self(value.0)
38074 }
38075}
38076impl From<TerminalColonColonGreen> for TokenNodeGreen {
38077 fn from(value: TerminalColonColonGreen) -> Self {
38078 Self(value.0)
38079 }
38080}
38081impl From<TerminalCommaGreen> for TokenNodeGreen {
38082 fn from(value: TerminalCommaGreen) -> Self {
38083 Self(value.0)
38084 }
38085}
38086impl From<TerminalDivGreen> for TokenNodeGreen {
38087 fn from(value: TerminalDivGreen) -> Self {
38088 Self(value.0)
38089 }
38090}
38091impl From<TerminalDivEqGreen> for TokenNodeGreen {
38092 fn from(value: TerminalDivEqGreen) -> Self {
38093 Self(value.0)
38094 }
38095}
38096impl From<TerminalDotGreen> for TokenNodeGreen {
38097 fn from(value: TerminalDotGreen) -> Self {
38098 Self(value.0)
38099 }
38100}
38101impl From<TerminalDotDotGreen> for TokenNodeGreen {
38102 fn from(value: TerminalDotDotGreen) -> Self {
38103 Self(value.0)
38104 }
38105}
38106impl From<TerminalDotDotEqGreen> for TokenNodeGreen {
38107 fn from(value: TerminalDotDotEqGreen) -> Self {
38108 Self(value.0)
38109 }
38110}
38111impl From<TerminalEndOfFileGreen> for TokenNodeGreen {
38112 fn from(value: TerminalEndOfFileGreen) -> Self {
38113 Self(value.0)
38114 }
38115}
38116impl From<TerminalEqGreen> for TokenNodeGreen {
38117 fn from(value: TerminalEqGreen) -> Self {
38118 Self(value.0)
38119 }
38120}
38121impl From<TerminalEqEqGreen> for TokenNodeGreen {
38122 fn from(value: TerminalEqEqGreen) -> Self {
38123 Self(value.0)
38124 }
38125}
38126impl From<TerminalGEGreen> for TokenNodeGreen {
38127 fn from(value: TerminalGEGreen) -> Self {
38128 Self(value.0)
38129 }
38130}
38131impl From<TerminalGTGreen> for TokenNodeGreen {
38132 fn from(value: TerminalGTGreen) -> Self {
38133 Self(value.0)
38134 }
38135}
38136impl From<TerminalHashGreen> for TokenNodeGreen {
38137 fn from(value: TerminalHashGreen) -> Self {
38138 Self(value.0)
38139 }
38140}
38141impl From<TerminalLBraceGreen> for TokenNodeGreen {
38142 fn from(value: TerminalLBraceGreen) -> Self {
38143 Self(value.0)
38144 }
38145}
38146impl From<TerminalLBrackGreen> for TokenNodeGreen {
38147 fn from(value: TerminalLBrackGreen) -> Self {
38148 Self(value.0)
38149 }
38150}
38151impl From<TerminalLEGreen> for TokenNodeGreen {
38152 fn from(value: TerminalLEGreen) -> Self {
38153 Self(value.0)
38154 }
38155}
38156impl From<TerminalLParenGreen> for TokenNodeGreen {
38157 fn from(value: TerminalLParenGreen) -> Self {
38158 Self(value.0)
38159 }
38160}
38161impl From<TerminalLTGreen> for TokenNodeGreen {
38162 fn from(value: TerminalLTGreen) -> Self {
38163 Self(value.0)
38164 }
38165}
38166impl From<TerminalMatchArrowGreen> for TokenNodeGreen {
38167 fn from(value: TerminalMatchArrowGreen) -> Self {
38168 Self(value.0)
38169 }
38170}
38171impl From<TerminalMinusGreen> for TokenNodeGreen {
38172 fn from(value: TerminalMinusGreen) -> Self {
38173 Self(value.0)
38174 }
38175}
38176impl From<TerminalMinusEqGreen> for TokenNodeGreen {
38177 fn from(value: TerminalMinusEqGreen) -> Self {
38178 Self(value.0)
38179 }
38180}
38181impl From<TerminalModGreen> for TokenNodeGreen {
38182 fn from(value: TerminalModGreen) -> Self {
38183 Self(value.0)
38184 }
38185}
38186impl From<TerminalModEqGreen> for TokenNodeGreen {
38187 fn from(value: TerminalModEqGreen) -> Self {
38188 Self(value.0)
38189 }
38190}
38191impl From<TerminalMulGreen> for TokenNodeGreen {
38192 fn from(value: TerminalMulGreen) -> Self {
38193 Self(value.0)
38194 }
38195}
38196impl From<TerminalMulEqGreen> for TokenNodeGreen {
38197 fn from(value: TerminalMulEqGreen) -> Self {
38198 Self(value.0)
38199 }
38200}
38201impl From<TerminalNeqGreen> for TokenNodeGreen {
38202 fn from(value: TerminalNeqGreen) -> Self {
38203 Self(value.0)
38204 }
38205}
38206impl From<TerminalNotGreen> for TokenNodeGreen {
38207 fn from(value: TerminalNotGreen) -> Self {
38208 Self(value.0)
38209 }
38210}
38211impl From<TerminalBitNotGreen> for TokenNodeGreen {
38212 fn from(value: TerminalBitNotGreen) -> Self {
38213 Self(value.0)
38214 }
38215}
38216impl From<TerminalOrGreen> for TokenNodeGreen {
38217 fn from(value: TerminalOrGreen) -> Self {
38218 Self(value.0)
38219 }
38220}
38221impl From<TerminalOrOrGreen> for TokenNodeGreen {
38222 fn from(value: TerminalOrOrGreen) -> Self {
38223 Self(value.0)
38224 }
38225}
38226impl From<TerminalPlusGreen> for TokenNodeGreen {
38227 fn from(value: TerminalPlusGreen) -> Self {
38228 Self(value.0)
38229 }
38230}
38231impl From<TerminalPlusEqGreen> for TokenNodeGreen {
38232 fn from(value: TerminalPlusEqGreen) -> Self {
38233 Self(value.0)
38234 }
38235}
38236impl From<TerminalQuestionMarkGreen> for TokenNodeGreen {
38237 fn from(value: TerminalQuestionMarkGreen) -> Self {
38238 Self(value.0)
38239 }
38240}
38241impl From<TerminalRBraceGreen> for TokenNodeGreen {
38242 fn from(value: TerminalRBraceGreen) -> Self {
38243 Self(value.0)
38244 }
38245}
38246impl From<TerminalRBrackGreen> for TokenNodeGreen {
38247 fn from(value: TerminalRBrackGreen) -> Self {
38248 Self(value.0)
38249 }
38250}
38251impl From<TerminalRParenGreen> for TokenNodeGreen {
38252 fn from(value: TerminalRParenGreen) -> Self {
38253 Self(value.0)
38254 }
38255}
38256impl From<TerminalSemicolonGreen> for TokenNodeGreen {
38257 fn from(value: TerminalSemicolonGreen) -> Self {
38258 Self(value.0)
38259 }
38260}
38261impl From<TerminalUnderscoreGreen> for TokenNodeGreen {
38262 fn from(value: TerminalUnderscoreGreen) -> Self {
38263 Self(value.0)
38264 }
38265}
38266impl From<TerminalXorGreen> for TokenNodeGreen {
38267 fn from(value: TerminalXorGreen) -> Self {
38268 Self(value.0)
38269 }
38270}
38271impl From<TerminalEmptyGreen> for TokenNodeGreen {
38272 fn from(value: TerminalEmptyGreen) -> Self {
38273 Self(value.0)
38274 }
38275}
38276#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38277pub struct TokenNodeGreen(pub GreenId);
38278impl TypedSyntaxNode for TokenNode {
38279 const OPTIONAL_KIND: Option<SyntaxKind> = None;
38280 type StablePtr = TokenNodePtr;
38281 type Green = TokenNodeGreen;
38282 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
38283 panic!("No missing variant.");
38284 }
38285 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
38286 let kind = node.kind(db);
38287 match kind {
38288 SyntaxKind::TerminalIdentifier => {
38289 TokenNode::TerminalIdentifier(TerminalIdentifier::from_syntax_node(db, node))
38290 }
38291 SyntaxKind::TerminalLiteralNumber => {
38292 TokenNode::TerminalLiteralNumber(TerminalLiteralNumber::from_syntax_node(db, node))
38293 }
38294 SyntaxKind::TerminalShortString => {
38295 TokenNode::TerminalShortString(TerminalShortString::from_syntax_node(db, node))
38296 }
38297 SyntaxKind::TerminalString => {
38298 TokenNode::TerminalString(TerminalString::from_syntax_node(db, node))
38299 }
38300 SyntaxKind::TerminalAs => TokenNode::TerminalAs(TerminalAs::from_syntax_node(db, node)),
38301 SyntaxKind::TerminalConst => {
38302 TokenNode::TerminalConst(TerminalConst::from_syntax_node(db, node))
38303 }
38304 SyntaxKind::TerminalElse => {
38305 TokenNode::TerminalElse(TerminalElse::from_syntax_node(db, node))
38306 }
38307 SyntaxKind::TerminalEnum => {
38308 TokenNode::TerminalEnum(TerminalEnum::from_syntax_node(db, node))
38309 }
38310 SyntaxKind::TerminalExtern => {
38311 TokenNode::TerminalExtern(TerminalExtern::from_syntax_node(db, node))
38312 }
38313 SyntaxKind::TerminalFalse => {
38314 TokenNode::TerminalFalse(TerminalFalse::from_syntax_node(db, node))
38315 }
38316 SyntaxKind::TerminalFunction => {
38317 TokenNode::TerminalFunction(TerminalFunction::from_syntax_node(db, node))
38318 }
38319 SyntaxKind::TerminalIf => TokenNode::TerminalIf(TerminalIf::from_syntax_node(db, node)),
38320 SyntaxKind::TerminalWhile => {
38321 TokenNode::TerminalWhile(TerminalWhile::from_syntax_node(db, node))
38322 }
38323 SyntaxKind::TerminalFor => {
38324 TokenNode::TerminalFor(TerminalFor::from_syntax_node(db, node))
38325 }
38326 SyntaxKind::TerminalLoop => {
38327 TokenNode::TerminalLoop(TerminalLoop::from_syntax_node(db, node))
38328 }
38329 SyntaxKind::TerminalImpl => {
38330 TokenNode::TerminalImpl(TerminalImpl::from_syntax_node(db, node))
38331 }
38332 SyntaxKind::TerminalImplicits => {
38333 TokenNode::TerminalImplicits(TerminalImplicits::from_syntax_node(db, node))
38334 }
38335 SyntaxKind::TerminalLet => {
38336 TokenNode::TerminalLet(TerminalLet::from_syntax_node(db, node))
38337 }
38338 SyntaxKind::TerminalMatch => {
38339 TokenNode::TerminalMatch(TerminalMatch::from_syntax_node(db, node))
38340 }
38341 SyntaxKind::TerminalModule => {
38342 TokenNode::TerminalModule(TerminalModule::from_syntax_node(db, node))
38343 }
38344 SyntaxKind::TerminalMut => {
38345 TokenNode::TerminalMut(TerminalMut::from_syntax_node(db, node))
38346 }
38347 SyntaxKind::TerminalNoPanic => {
38348 TokenNode::TerminalNoPanic(TerminalNoPanic::from_syntax_node(db, node))
38349 }
38350 SyntaxKind::TerminalOf => TokenNode::TerminalOf(TerminalOf::from_syntax_node(db, node)),
38351 SyntaxKind::TerminalRef => {
38352 TokenNode::TerminalRef(TerminalRef::from_syntax_node(db, node))
38353 }
38354 SyntaxKind::TerminalContinue => {
38355 TokenNode::TerminalContinue(TerminalContinue::from_syntax_node(db, node))
38356 }
38357 SyntaxKind::TerminalReturn => {
38358 TokenNode::TerminalReturn(TerminalReturn::from_syntax_node(db, node))
38359 }
38360 SyntaxKind::TerminalBreak => {
38361 TokenNode::TerminalBreak(TerminalBreak::from_syntax_node(db, node))
38362 }
38363 SyntaxKind::TerminalStruct => {
38364 TokenNode::TerminalStruct(TerminalStruct::from_syntax_node(db, node))
38365 }
38366 SyntaxKind::TerminalTrait => {
38367 TokenNode::TerminalTrait(TerminalTrait::from_syntax_node(db, node))
38368 }
38369 SyntaxKind::TerminalTrue => {
38370 TokenNode::TerminalTrue(TerminalTrue::from_syntax_node(db, node))
38371 }
38372 SyntaxKind::TerminalType => {
38373 TokenNode::TerminalType(TerminalType::from_syntax_node(db, node))
38374 }
38375 SyntaxKind::TerminalUse => {
38376 TokenNode::TerminalUse(TerminalUse::from_syntax_node(db, node))
38377 }
38378 SyntaxKind::TerminalPub => {
38379 TokenNode::TerminalPub(TerminalPub::from_syntax_node(db, node))
38380 }
38381 SyntaxKind::TerminalAnd => {
38382 TokenNode::TerminalAnd(TerminalAnd::from_syntax_node(db, node))
38383 }
38384 SyntaxKind::TerminalAndAnd => {
38385 TokenNode::TerminalAndAnd(TerminalAndAnd::from_syntax_node(db, node))
38386 }
38387 SyntaxKind::TerminalArrow => {
38388 TokenNode::TerminalArrow(TerminalArrow::from_syntax_node(db, node))
38389 }
38390 SyntaxKind::TerminalAt => TokenNode::TerminalAt(TerminalAt::from_syntax_node(db, node)),
38391 SyntaxKind::TerminalBadCharacters => {
38392 TokenNode::TerminalBadCharacters(TerminalBadCharacters::from_syntax_node(db, node))
38393 }
38394 SyntaxKind::TerminalColon => {
38395 TokenNode::TerminalColon(TerminalColon::from_syntax_node(db, node))
38396 }
38397 SyntaxKind::TerminalColonColon => {
38398 TokenNode::TerminalColonColon(TerminalColonColon::from_syntax_node(db, node))
38399 }
38400 SyntaxKind::TerminalComma => {
38401 TokenNode::TerminalComma(TerminalComma::from_syntax_node(db, node))
38402 }
38403 SyntaxKind::TerminalDiv => {
38404 TokenNode::TerminalDiv(TerminalDiv::from_syntax_node(db, node))
38405 }
38406 SyntaxKind::TerminalDivEq => {
38407 TokenNode::TerminalDivEq(TerminalDivEq::from_syntax_node(db, node))
38408 }
38409 SyntaxKind::TerminalDot => {
38410 TokenNode::TerminalDot(TerminalDot::from_syntax_node(db, node))
38411 }
38412 SyntaxKind::TerminalDotDot => {
38413 TokenNode::TerminalDotDot(TerminalDotDot::from_syntax_node(db, node))
38414 }
38415 SyntaxKind::TerminalDotDotEq => {
38416 TokenNode::TerminalDotDotEq(TerminalDotDotEq::from_syntax_node(db, node))
38417 }
38418 SyntaxKind::TerminalEndOfFile => {
38419 TokenNode::TerminalEndOfFile(TerminalEndOfFile::from_syntax_node(db, node))
38420 }
38421 SyntaxKind::TerminalEq => TokenNode::TerminalEq(TerminalEq::from_syntax_node(db, node)),
38422 SyntaxKind::TerminalEqEq => {
38423 TokenNode::TerminalEqEq(TerminalEqEq::from_syntax_node(db, node))
38424 }
38425 SyntaxKind::TerminalGE => TokenNode::TerminalGE(TerminalGE::from_syntax_node(db, node)),
38426 SyntaxKind::TerminalGT => TokenNode::TerminalGT(TerminalGT::from_syntax_node(db, node)),
38427 SyntaxKind::TerminalHash => {
38428 TokenNode::TerminalHash(TerminalHash::from_syntax_node(db, node))
38429 }
38430 SyntaxKind::TerminalLBrace => {
38431 TokenNode::TerminalLBrace(TerminalLBrace::from_syntax_node(db, node))
38432 }
38433 SyntaxKind::TerminalLBrack => {
38434 TokenNode::TerminalLBrack(TerminalLBrack::from_syntax_node(db, node))
38435 }
38436 SyntaxKind::TerminalLE => TokenNode::TerminalLE(TerminalLE::from_syntax_node(db, node)),
38437 SyntaxKind::TerminalLParen => {
38438 TokenNode::TerminalLParen(TerminalLParen::from_syntax_node(db, node))
38439 }
38440 SyntaxKind::TerminalLT => TokenNode::TerminalLT(TerminalLT::from_syntax_node(db, node)),
38441 SyntaxKind::TerminalMatchArrow => {
38442 TokenNode::TerminalMatchArrow(TerminalMatchArrow::from_syntax_node(db, node))
38443 }
38444 SyntaxKind::TerminalMinus => {
38445 TokenNode::TerminalMinus(TerminalMinus::from_syntax_node(db, node))
38446 }
38447 SyntaxKind::TerminalMinusEq => {
38448 TokenNode::TerminalMinusEq(TerminalMinusEq::from_syntax_node(db, node))
38449 }
38450 SyntaxKind::TerminalMod => {
38451 TokenNode::TerminalMod(TerminalMod::from_syntax_node(db, node))
38452 }
38453 SyntaxKind::TerminalModEq => {
38454 TokenNode::TerminalModEq(TerminalModEq::from_syntax_node(db, node))
38455 }
38456 SyntaxKind::TerminalMul => {
38457 TokenNode::TerminalMul(TerminalMul::from_syntax_node(db, node))
38458 }
38459 SyntaxKind::TerminalMulEq => {
38460 TokenNode::TerminalMulEq(TerminalMulEq::from_syntax_node(db, node))
38461 }
38462 SyntaxKind::TerminalNeq => {
38463 TokenNode::TerminalNeq(TerminalNeq::from_syntax_node(db, node))
38464 }
38465 SyntaxKind::TerminalNot => {
38466 TokenNode::TerminalNot(TerminalNot::from_syntax_node(db, node))
38467 }
38468 SyntaxKind::TerminalBitNot => {
38469 TokenNode::TerminalBitNot(TerminalBitNot::from_syntax_node(db, node))
38470 }
38471 SyntaxKind::TerminalOr => TokenNode::TerminalOr(TerminalOr::from_syntax_node(db, node)),
38472 SyntaxKind::TerminalOrOr => {
38473 TokenNode::TerminalOrOr(TerminalOrOr::from_syntax_node(db, node))
38474 }
38475 SyntaxKind::TerminalPlus => {
38476 TokenNode::TerminalPlus(TerminalPlus::from_syntax_node(db, node))
38477 }
38478 SyntaxKind::TerminalPlusEq => {
38479 TokenNode::TerminalPlusEq(TerminalPlusEq::from_syntax_node(db, node))
38480 }
38481 SyntaxKind::TerminalQuestionMark => {
38482 TokenNode::TerminalQuestionMark(TerminalQuestionMark::from_syntax_node(db, node))
38483 }
38484 SyntaxKind::TerminalRBrace => {
38485 TokenNode::TerminalRBrace(TerminalRBrace::from_syntax_node(db, node))
38486 }
38487 SyntaxKind::TerminalRBrack => {
38488 TokenNode::TerminalRBrack(TerminalRBrack::from_syntax_node(db, node))
38489 }
38490 SyntaxKind::TerminalRParen => {
38491 TokenNode::TerminalRParen(TerminalRParen::from_syntax_node(db, node))
38492 }
38493 SyntaxKind::TerminalSemicolon => {
38494 TokenNode::TerminalSemicolon(TerminalSemicolon::from_syntax_node(db, node))
38495 }
38496 SyntaxKind::TerminalUnderscore => {
38497 TokenNode::TerminalUnderscore(TerminalUnderscore::from_syntax_node(db, node))
38498 }
38499 SyntaxKind::TerminalXor => {
38500 TokenNode::TerminalXor(TerminalXor::from_syntax_node(db, node))
38501 }
38502 SyntaxKind::TerminalEmpty => {
38503 TokenNode::TerminalEmpty(TerminalEmpty::from_syntax_node(db, node))
38504 }
38505 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "TokenNode"),
38506 }
38507 }
38508 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
38509 let kind = node.kind(db);
38510 match kind {
38511 SyntaxKind::TerminalIdentifier => {
38512 Some(TokenNode::TerminalIdentifier(TerminalIdentifier::from_syntax_node(db, node)))
38513 }
38514 SyntaxKind::TerminalLiteralNumber => Some(TokenNode::TerminalLiteralNumber(
38515 TerminalLiteralNumber::from_syntax_node(db, node),
38516 )),
38517 SyntaxKind::TerminalShortString => Some(TokenNode::TerminalShortString(
38518 TerminalShortString::from_syntax_node(db, node),
38519 )),
38520 SyntaxKind::TerminalString => {
38521 Some(TokenNode::TerminalString(TerminalString::from_syntax_node(db, node)))
38522 }
38523 SyntaxKind::TerminalAs => {
38524 Some(TokenNode::TerminalAs(TerminalAs::from_syntax_node(db, node)))
38525 }
38526 SyntaxKind::TerminalConst => {
38527 Some(TokenNode::TerminalConst(TerminalConst::from_syntax_node(db, node)))
38528 }
38529 SyntaxKind::TerminalElse => {
38530 Some(TokenNode::TerminalElse(TerminalElse::from_syntax_node(db, node)))
38531 }
38532 SyntaxKind::TerminalEnum => {
38533 Some(TokenNode::TerminalEnum(TerminalEnum::from_syntax_node(db, node)))
38534 }
38535 SyntaxKind::TerminalExtern => {
38536 Some(TokenNode::TerminalExtern(TerminalExtern::from_syntax_node(db, node)))
38537 }
38538 SyntaxKind::TerminalFalse => {
38539 Some(TokenNode::TerminalFalse(TerminalFalse::from_syntax_node(db, node)))
38540 }
38541 SyntaxKind::TerminalFunction => {
38542 Some(TokenNode::TerminalFunction(TerminalFunction::from_syntax_node(db, node)))
38543 }
38544 SyntaxKind::TerminalIf => {
38545 Some(TokenNode::TerminalIf(TerminalIf::from_syntax_node(db, node)))
38546 }
38547 SyntaxKind::TerminalWhile => {
38548 Some(TokenNode::TerminalWhile(TerminalWhile::from_syntax_node(db, node)))
38549 }
38550 SyntaxKind::TerminalFor => {
38551 Some(TokenNode::TerminalFor(TerminalFor::from_syntax_node(db, node)))
38552 }
38553 SyntaxKind::TerminalLoop => {
38554 Some(TokenNode::TerminalLoop(TerminalLoop::from_syntax_node(db, node)))
38555 }
38556 SyntaxKind::TerminalImpl => {
38557 Some(TokenNode::TerminalImpl(TerminalImpl::from_syntax_node(db, node)))
38558 }
38559 SyntaxKind::TerminalImplicits => {
38560 Some(TokenNode::TerminalImplicits(TerminalImplicits::from_syntax_node(db, node)))
38561 }
38562 SyntaxKind::TerminalLet => {
38563 Some(TokenNode::TerminalLet(TerminalLet::from_syntax_node(db, node)))
38564 }
38565 SyntaxKind::TerminalMatch => {
38566 Some(TokenNode::TerminalMatch(TerminalMatch::from_syntax_node(db, node)))
38567 }
38568 SyntaxKind::TerminalModule => {
38569 Some(TokenNode::TerminalModule(TerminalModule::from_syntax_node(db, node)))
38570 }
38571 SyntaxKind::TerminalMut => {
38572 Some(TokenNode::TerminalMut(TerminalMut::from_syntax_node(db, node)))
38573 }
38574 SyntaxKind::TerminalNoPanic => {
38575 Some(TokenNode::TerminalNoPanic(TerminalNoPanic::from_syntax_node(db, node)))
38576 }
38577 SyntaxKind::TerminalOf => {
38578 Some(TokenNode::TerminalOf(TerminalOf::from_syntax_node(db, node)))
38579 }
38580 SyntaxKind::TerminalRef => {
38581 Some(TokenNode::TerminalRef(TerminalRef::from_syntax_node(db, node)))
38582 }
38583 SyntaxKind::TerminalContinue => {
38584 Some(TokenNode::TerminalContinue(TerminalContinue::from_syntax_node(db, node)))
38585 }
38586 SyntaxKind::TerminalReturn => {
38587 Some(TokenNode::TerminalReturn(TerminalReturn::from_syntax_node(db, node)))
38588 }
38589 SyntaxKind::TerminalBreak => {
38590 Some(TokenNode::TerminalBreak(TerminalBreak::from_syntax_node(db, node)))
38591 }
38592 SyntaxKind::TerminalStruct => {
38593 Some(TokenNode::TerminalStruct(TerminalStruct::from_syntax_node(db, node)))
38594 }
38595 SyntaxKind::TerminalTrait => {
38596 Some(TokenNode::TerminalTrait(TerminalTrait::from_syntax_node(db, node)))
38597 }
38598 SyntaxKind::TerminalTrue => {
38599 Some(TokenNode::TerminalTrue(TerminalTrue::from_syntax_node(db, node)))
38600 }
38601 SyntaxKind::TerminalType => {
38602 Some(TokenNode::TerminalType(TerminalType::from_syntax_node(db, node)))
38603 }
38604 SyntaxKind::TerminalUse => {
38605 Some(TokenNode::TerminalUse(TerminalUse::from_syntax_node(db, node)))
38606 }
38607 SyntaxKind::TerminalPub => {
38608 Some(TokenNode::TerminalPub(TerminalPub::from_syntax_node(db, node)))
38609 }
38610 SyntaxKind::TerminalAnd => {
38611 Some(TokenNode::TerminalAnd(TerminalAnd::from_syntax_node(db, node)))
38612 }
38613 SyntaxKind::TerminalAndAnd => {
38614 Some(TokenNode::TerminalAndAnd(TerminalAndAnd::from_syntax_node(db, node)))
38615 }
38616 SyntaxKind::TerminalArrow => {
38617 Some(TokenNode::TerminalArrow(TerminalArrow::from_syntax_node(db, node)))
38618 }
38619 SyntaxKind::TerminalAt => {
38620 Some(TokenNode::TerminalAt(TerminalAt::from_syntax_node(db, node)))
38621 }
38622 SyntaxKind::TerminalBadCharacters => Some(TokenNode::TerminalBadCharacters(
38623 TerminalBadCharacters::from_syntax_node(db, node),
38624 )),
38625 SyntaxKind::TerminalColon => {
38626 Some(TokenNode::TerminalColon(TerminalColon::from_syntax_node(db, node)))
38627 }
38628 SyntaxKind::TerminalColonColon => {
38629 Some(TokenNode::TerminalColonColon(TerminalColonColon::from_syntax_node(db, node)))
38630 }
38631 SyntaxKind::TerminalComma => {
38632 Some(TokenNode::TerminalComma(TerminalComma::from_syntax_node(db, node)))
38633 }
38634 SyntaxKind::TerminalDiv => {
38635 Some(TokenNode::TerminalDiv(TerminalDiv::from_syntax_node(db, node)))
38636 }
38637 SyntaxKind::TerminalDivEq => {
38638 Some(TokenNode::TerminalDivEq(TerminalDivEq::from_syntax_node(db, node)))
38639 }
38640 SyntaxKind::TerminalDot => {
38641 Some(TokenNode::TerminalDot(TerminalDot::from_syntax_node(db, node)))
38642 }
38643 SyntaxKind::TerminalDotDot => {
38644 Some(TokenNode::TerminalDotDot(TerminalDotDot::from_syntax_node(db, node)))
38645 }
38646 SyntaxKind::TerminalDotDotEq => {
38647 Some(TokenNode::TerminalDotDotEq(TerminalDotDotEq::from_syntax_node(db, node)))
38648 }
38649 SyntaxKind::TerminalEndOfFile => {
38650 Some(TokenNode::TerminalEndOfFile(TerminalEndOfFile::from_syntax_node(db, node)))
38651 }
38652 SyntaxKind::TerminalEq => {
38653 Some(TokenNode::TerminalEq(TerminalEq::from_syntax_node(db, node)))
38654 }
38655 SyntaxKind::TerminalEqEq => {
38656 Some(TokenNode::TerminalEqEq(TerminalEqEq::from_syntax_node(db, node)))
38657 }
38658 SyntaxKind::TerminalGE => {
38659 Some(TokenNode::TerminalGE(TerminalGE::from_syntax_node(db, node)))
38660 }
38661 SyntaxKind::TerminalGT => {
38662 Some(TokenNode::TerminalGT(TerminalGT::from_syntax_node(db, node)))
38663 }
38664 SyntaxKind::TerminalHash => {
38665 Some(TokenNode::TerminalHash(TerminalHash::from_syntax_node(db, node)))
38666 }
38667 SyntaxKind::TerminalLBrace => {
38668 Some(TokenNode::TerminalLBrace(TerminalLBrace::from_syntax_node(db, node)))
38669 }
38670 SyntaxKind::TerminalLBrack => {
38671 Some(TokenNode::TerminalLBrack(TerminalLBrack::from_syntax_node(db, node)))
38672 }
38673 SyntaxKind::TerminalLE => {
38674 Some(TokenNode::TerminalLE(TerminalLE::from_syntax_node(db, node)))
38675 }
38676 SyntaxKind::TerminalLParen => {
38677 Some(TokenNode::TerminalLParen(TerminalLParen::from_syntax_node(db, node)))
38678 }
38679 SyntaxKind::TerminalLT => {
38680 Some(TokenNode::TerminalLT(TerminalLT::from_syntax_node(db, node)))
38681 }
38682 SyntaxKind::TerminalMatchArrow => {
38683 Some(TokenNode::TerminalMatchArrow(TerminalMatchArrow::from_syntax_node(db, node)))
38684 }
38685 SyntaxKind::TerminalMinus => {
38686 Some(TokenNode::TerminalMinus(TerminalMinus::from_syntax_node(db, node)))
38687 }
38688 SyntaxKind::TerminalMinusEq => {
38689 Some(TokenNode::TerminalMinusEq(TerminalMinusEq::from_syntax_node(db, node)))
38690 }
38691 SyntaxKind::TerminalMod => {
38692 Some(TokenNode::TerminalMod(TerminalMod::from_syntax_node(db, node)))
38693 }
38694 SyntaxKind::TerminalModEq => {
38695 Some(TokenNode::TerminalModEq(TerminalModEq::from_syntax_node(db, node)))
38696 }
38697 SyntaxKind::TerminalMul => {
38698 Some(TokenNode::TerminalMul(TerminalMul::from_syntax_node(db, node)))
38699 }
38700 SyntaxKind::TerminalMulEq => {
38701 Some(TokenNode::TerminalMulEq(TerminalMulEq::from_syntax_node(db, node)))
38702 }
38703 SyntaxKind::TerminalNeq => {
38704 Some(TokenNode::TerminalNeq(TerminalNeq::from_syntax_node(db, node)))
38705 }
38706 SyntaxKind::TerminalNot => {
38707 Some(TokenNode::TerminalNot(TerminalNot::from_syntax_node(db, node)))
38708 }
38709 SyntaxKind::TerminalBitNot => {
38710 Some(TokenNode::TerminalBitNot(TerminalBitNot::from_syntax_node(db, node)))
38711 }
38712 SyntaxKind::TerminalOr => {
38713 Some(TokenNode::TerminalOr(TerminalOr::from_syntax_node(db, node)))
38714 }
38715 SyntaxKind::TerminalOrOr => {
38716 Some(TokenNode::TerminalOrOr(TerminalOrOr::from_syntax_node(db, node)))
38717 }
38718 SyntaxKind::TerminalPlus => {
38719 Some(TokenNode::TerminalPlus(TerminalPlus::from_syntax_node(db, node)))
38720 }
38721 SyntaxKind::TerminalPlusEq => {
38722 Some(TokenNode::TerminalPlusEq(TerminalPlusEq::from_syntax_node(db, node)))
38723 }
38724 SyntaxKind::TerminalQuestionMark => Some(TokenNode::TerminalQuestionMark(
38725 TerminalQuestionMark::from_syntax_node(db, node),
38726 )),
38727 SyntaxKind::TerminalRBrace => {
38728 Some(TokenNode::TerminalRBrace(TerminalRBrace::from_syntax_node(db, node)))
38729 }
38730 SyntaxKind::TerminalRBrack => {
38731 Some(TokenNode::TerminalRBrack(TerminalRBrack::from_syntax_node(db, node)))
38732 }
38733 SyntaxKind::TerminalRParen => {
38734 Some(TokenNode::TerminalRParen(TerminalRParen::from_syntax_node(db, node)))
38735 }
38736 SyntaxKind::TerminalSemicolon => {
38737 Some(TokenNode::TerminalSemicolon(TerminalSemicolon::from_syntax_node(db, node)))
38738 }
38739 SyntaxKind::TerminalUnderscore => {
38740 Some(TokenNode::TerminalUnderscore(TerminalUnderscore::from_syntax_node(db, node)))
38741 }
38742 SyntaxKind::TerminalXor => {
38743 Some(TokenNode::TerminalXor(TerminalXor::from_syntax_node(db, node)))
38744 }
38745 SyntaxKind::TerminalEmpty => {
38746 Some(TokenNode::TerminalEmpty(TerminalEmpty::from_syntax_node(db, node)))
38747 }
38748 _ => None,
38749 }
38750 }
38751 fn as_syntax_node(&self) -> SyntaxNode {
38752 match self {
38753 TokenNode::TerminalIdentifier(x) => x.as_syntax_node(),
38754 TokenNode::TerminalLiteralNumber(x) => x.as_syntax_node(),
38755 TokenNode::TerminalShortString(x) => x.as_syntax_node(),
38756 TokenNode::TerminalString(x) => x.as_syntax_node(),
38757 TokenNode::TerminalAs(x) => x.as_syntax_node(),
38758 TokenNode::TerminalConst(x) => x.as_syntax_node(),
38759 TokenNode::TerminalElse(x) => x.as_syntax_node(),
38760 TokenNode::TerminalEnum(x) => x.as_syntax_node(),
38761 TokenNode::TerminalExtern(x) => x.as_syntax_node(),
38762 TokenNode::TerminalFalse(x) => x.as_syntax_node(),
38763 TokenNode::TerminalFunction(x) => x.as_syntax_node(),
38764 TokenNode::TerminalIf(x) => x.as_syntax_node(),
38765 TokenNode::TerminalWhile(x) => x.as_syntax_node(),
38766 TokenNode::TerminalFor(x) => x.as_syntax_node(),
38767 TokenNode::TerminalLoop(x) => x.as_syntax_node(),
38768 TokenNode::TerminalImpl(x) => x.as_syntax_node(),
38769 TokenNode::TerminalImplicits(x) => x.as_syntax_node(),
38770 TokenNode::TerminalLet(x) => x.as_syntax_node(),
38771 TokenNode::TerminalMatch(x) => x.as_syntax_node(),
38772 TokenNode::TerminalModule(x) => x.as_syntax_node(),
38773 TokenNode::TerminalMut(x) => x.as_syntax_node(),
38774 TokenNode::TerminalNoPanic(x) => x.as_syntax_node(),
38775 TokenNode::TerminalOf(x) => x.as_syntax_node(),
38776 TokenNode::TerminalRef(x) => x.as_syntax_node(),
38777 TokenNode::TerminalContinue(x) => x.as_syntax_node(),
38778 TokenNode::TerminalReturn(x) => x.as_syntax_node(),
38779 TokenNode::TerminalBreak(x) => x.as_syntax_node(),
38780 TokenNode::TerminalStruct(x) => x.as_syntax_node(),
38781 TokenNode::TerminalTrait(x) => x.as_syntax_node(),
38782 TokenNode::TerminalTrue(x) => x.as_syntax_node(),
38783 TokenNode::TerminalType(x) => x.as_syntax_node(),
38784 TokenNode::TerminalUse(x) => x.as_syntax_node(),
38785 TokenNode::TerminalPub(x) => x.as_syntax_node(),
38786 TokenNode::TerminalAnd(x) => x.as_syntax_node(),
38787 TokenNode::TerminalAndAnd(x) => x.as_syntax_node(),
38788 TokenNode::TerminalArrow(x) => x.as_syntax_node(),
38789 TokenNode::TerminalAt(x) => x.as_syntax_node(),
38790 TokenNode::TerminalBadCharacters(x) => x.as_syntax_node(),
38791 TokenNode::TerminalColon(x) => x.as_syntax_node(),
38792 TokenNode::TerminalColonColon(x) => x.as_syntax_node(),
38793 TokenNode::TerminalComma(x) => x.as_syntax_node(),
38794 TokenNode::TerminalDiv(x) => x.as_syntax_node(),
38795 TokenNode::TerminalDivEq(x) => x.as_syntax_node(),
38796 TokenNode::TerminalDot(x) => x.as_syntax_node(),
38797 TokenNode::TerminalDotDot(x) => x.as_syntax_node(),
38798 TokenNode::TerminalDotDotEq(x) => x.as_syntax_node(),
38799 TokenNode::TerminalEndOfFile(x) => x.as_syntax_node(),
38800 TokenNode::TerminalEq(x) => x.as_syntax_node(),
38801 TokenNode::TerminalEqEq(x) => x.as_syntax_node(),
38802 TokenNode::TerminalGE(x) => x.as_syntax_node(),
38803 TokenNode::TerminalGT(x) => x.as_syntax_node(),
38804 TokenNode::TerminalHash(x) => x.as_syntax_node(),
38805 TokenNode::TerminalLBrace(x) => x.as_syntax_node(),
38806 TokenNode::TerminalLBrack(x) => x.as_syntax_node(),
38807 TokenNode::TerminalLE(x) => x.as_syntax_node(),
38808 TokenNode::TerminalLParen(x) => x.as_syntax_node(),
38809 TokenNode::TerminalLT(x) => x.as_syntax_node(),
38810 TokenNode::TerminalMatchArrow(x) => x.as_syntax_node(),
38811 TokenNode::TerminalMinus(x) => x.as_syntax_node(),
38812 TokenNode::TerminalMinusEq(x) => x.as_syntax_node(),
38813 TokenNode::TerminalMod(x) => x.as_syntax_node(),
38814 TokenNode::TerminalModEq(x) => x.as_syntax_node(),
38815 TokenNode::TerminalMul(x) => x.as_syntax_node(),
38816 TokenNode::TerminalMulEq(x) => x.as_syntax_node(),
38817 TokenNode::TerminalNeq(x) => x.as_syntax_node(),
38818 TokenNode::TerminalNot(x) => x.as_syntax_node(),
38819 TokenNode::TerminalBitNot(x) => x.as_syntax_node(),
38820 TokenNode::TerminalOr(x) => x.as_syntax_node(),
38821 TokenNode::TerminalOrOr(x) => x.as_syntax_node(),
38822 TokenNode::TerminalPlus(x) => x.as_syntax_node(),
38823 TokenNode::TerminalPlusEq(x) => x.as_syntax_node(),
38824 TokenNode::TerminalQuestionMark(x) => x.as_syntax_node(),
38825 TokenNode::TerminalRBrace(x) => x.as_syntax_node(),
38826 TokenNode::TerminalRBrack(x) => x.as_syntax_node(),
38827 TokenNode::TerminalRParen(x) => x.as_syntax_node(),
38828 TokenNode::TerminalSemicolon(x) => x.as_syntax_node(),
38829 TokenNode::TerminalUnderscore(x) => x.as_syntax_node(),
38830 TokenNode::TerminalXor(x) => x.as_syntax_node(),
38831 TokenNode::TerminalEmpty(x) => x.as_syntax_node(),
38832 }
38833 }
38834 fn stable_ptr(&self) -> Self::StablePtr {
38835 TokenNodePtr(self.as_syntax_node().0.stable_ptr)
38836 }
38837}
38838impl From<&TokenNode> for SyntaxStablePtrId {
38839 fn from(node: &TokenNode) -> Self {
38840 node.stable_ptr().untyped()
38841 }
38842}
38843impl TokenNode {
38844 pub fn is_variant(kind: SyntaxKind) -> bool {
38846 matches!(
38847 kind,
38848 SyntaxKind::TerminalIdentifier
38849 | SyntaxKind::TerminalLiteralNumber
38850 | SyntaxKind::TerminalShortString
38851 | SyntaxKind::TerminalString
38852 | SyntaxKind::TerminalAs
38853 | SyntaxKind::TerminalConst
38854 | SyntaxKind::TerminalElse
38855 | SyntaxKind::TerminalEnum
38856 | SyntaxKind::TerminalExtern
38857 | SyntaxKind::TerminalFalse
38858 | SyntaxKind::TerminalFunction
38859 | SyntaxKind::TerminalIf
38860 | SyntaxKind::TerminalWhile
38861 | SyntaxKind::TerminalFor
38862 | SyntaxKind::TerminalLoop
38863 | SyntaxKind::TerminalImpl
38864 | SyntaxKind::TerminalImplicits
38865 | SyntaxKind::TerminalLet
38866 | SyntaxKind::TerminalMatch
38867 | SyntaxKind::TerminalModule
38868 | SyntaxKind::TerminalMut
38869 | SyntaxKind::TerminalNoPanic
38870 | SyntaxKind::TerminalOf
38871 | SyntaxKind::TerminalRef
38872 | SyntaxKind::TerminalContinue
38873 | SyntaxKind::TerminalReturn
38874 | SyntaxKind::TerminalBreak
38875 | SyntaxKind::TerminalStruct
38876 | SyntaxKind::TerminalTrait
38877 | SyntaxKind::TerminalTrue
38878 | SyntaxKind::TerminalType
38879 | SyntaxKind::TerminalUse
38880 | SyntaxKind::TerminalPub
38881 | SyntaxKind::TerminalAnd
38882 | SyntaxKind::TerminalAndAnd
38883 | SyntaxKind::TerminalArrow
38884 | SyntaxKind::TerminalAt
38885 | SyntaxKind::TerminalBadCharacters
38886 | SyntaxKind::TerminalColon
38887 | SyntaxKind::TerminalColonColon
38888 | SyntaxKind::TerminalComma
38889 | SyntaxKind::TerminalDiv
38890 | SyntaxKind::TerminalDivEq
38891 | SyntaxKind::TerminalDot
38892 | SyntaxKind::TerminalDotDot
38893 | SyntaxKind::TerminalDotDotEq
38894 | SyntaxKind::TerminalEndOfFile
38895 | SyntaxKind::TerminalEq
38896 | SyntaxKind::TerminalEqEq
38897 | SyntaxKind::TerminalGE
38898 | SyntaxKind::TerminalGT
38899 | SyntaxKind::TerminalHash
38900 | SyntaxKind::TerminalLBrace
38901 | SyntaxKind::TerminalLBrack
38902 | SyntaxKind::TerminalLE
38903 | SyntaxKind::TerminalLParen
38904 | SyntaxKind::TerminalLT
38905 | SyntaxKind::TerminalMatchArrow
38906 | SyntaxKind::TerminalMinus
38907 | SyntaxKind::TerminalMinusEq
38908 | SyntaxKind::TerminalMod
38909 | SyntaxKind::TerminalModEq
38910 | SyntaxKind::TerminalMul
38911 | SyntaxKind::TerminalMulEq
38912 | SyntaxKind::TerminalNeq
38913 | SyntaxKind::TerminalNot
38914 | SyntaxKind::TerminalBitNot
38915 | SyntaxKind::TerminalOr
38916 | SyntaxKind::TerminalOrOr
38917 | SyntaxKind::TerminalPlus
38918 | SyntaxKind::TerminalPlusEq
38919 | SyntaxKind::TerminalQuestionMark
38920 | SyntaxKind::TerminalRBrace
38921 | SyntaxKind::TerminalRBrack
38922 | SyntaxKind::TerminalRParen
38923 | SyntaxKind::TerminalSemicolon
38924 | SyntaxKind::TerminalUnderscore
38925 | SyntaxKind::TerminalXor
38926 | SyntaxKind::TerminalEmpty
38927 )
38928 }
38929}