aboutsummaryrefslogtreecommitdiff
path: root/xtask/src/ast_src.rs
diff options
context:
space:
mode:
Diffstat (limited to 'xtask/src/ast_src.rs')
-rw-r--r--xtask/src/ast_src.rs147
1 files changed, 77 insertions, 70 deletions
diff --git a/xtask/src/ast_src.rs b/xtask/src/ast_src.rs
index 15bd8a2e4..3da280551 100644
--- a/xtask/src/ast_src.rs
+++ b/xtask/src/ast_src.rs
@@ -233,7 +233,12 @@ pub(crate) struct AstSrc<'a> {
233pub(crate) struct AstNodeSrc<'a> { 233pub(crate) struct AstNodeSrc<'a> {
234 pub(crate) name: &'a str, 234 pub(crate) name: &'a str,
235 pub(crate) traits: &'a [&'a str], 235 pub(crate) traits: &'a [&'a str],
236 pub(crate) fields: &'a [(&'a str, FieldSrc<'a>)], 236 pub(crate) fields: &'a [Field<'a>],
237}
238
239pub(crate) enum Field<'a> {
240 Token(&'a str),
241 Node { name: &'a str, src: FieldSrc<'a> },
237} 242}
238 243
239pub(crate) enum FieldSrc<'a> { 244pub(crate) enum FieldSrc<'a> {
@@ -251,31 +256,34 @@ pub(crate) struct AstEnumSrc<'a> {
251macro_rules! ast_nodes { 256macro_rules! ast_nodes {
252 ($( 257 ($(
253 struct $name:ident$(: $($trait:ident),*)? { 258 struct $name:ident$(: $($trait:ident),*)? {
254 $($field_name:ident $(: $ty:tt)?),*$(,)? 259 $($field_name:ident $(![$token:tt])? $(: $ty:tt)?),*$(,)?
255 } 260 }
256 )*) => { 261 )*) => {
257 [$( 262 [$(
258 AstNodeSrc { 263 AstNodeSrc {
259 name: stringify!($name), 264 name: stringify!($name),
260 traits: &[$($(stringify!($trait)),*)?], 265 traits: &[$($(stringify!($trait)),*)?],
261 fields: &[$( 266 fields: &[
262 (stringify!($field_name), field_ty!($field_name $($ty)?)) 267 $(field!($(T![$token])? $field_name $($ty)?)),*
263 ),*], 268 ],
264 269
265 } 270 }
266 ),*] 271 ),*]
267 }; 272 };
268} 273}
269 274
270macro_rules! field_ty { 275macro_rules! field {
276 (T![$token:tt] T) => {
277 Field::Token(stringify!($token))
278 };
271 ($field_name:ident) => { 279 ($field_name:ident) => {
272 FieldSrc::Shorthand 280 Field::Node { name: stringify!($field_name), src: FieldSrc::Shorthand }
273 }; 281 };
274 ($field_name:ident [$ty:ident]) => { 282 ($field_name:ident [$ty:ident]) => {
275 FieldSrc::Many(stringify!($ty)) 283 Field::Node { name: stringify!($field_name), src: FieldSrc::Many(stringify!($ty)) }
276 }; 284 };
277 ($field_name:ident $ty:ident) => { 285 ($field_name:ident $ty:ident) => {
278 FieldSrc::Optional(stringify!($ty)) 286 Field::Node { name: stringify!($field_name), src: FieldSrc::Optional(stringify!($ty)) }
279 }; 287 };
280} 288}
281 289
@@ -290,7 +298,6 @@ macro_rules! ast_enums {
290 name: stringify!($name), 298 name: stringify!($name),
291 traits: &[$($(stringify!($trait)),*)?], 299 traits: &[$($(stringify!($trait)),*)?],
292 variants: &[$(stringify!($variant)),*], 300 variants: &[$(stringify!($variant)),*],
293
294 } 301 }
295 ),*] 302 ),*]
296 }; 303 };
@@ -304,11 +311,11 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
304 311
305 struct FnDef: VisibilityOwner, NameOwner, TypeParamsOwner, DocCommentsOwner, AttrsOwner { 312 struct FnDef: VisibilityOwner, NameOwner, TypeParamsOwner, DocCommentsOwner, AttrsOwner {
306 Abi, 313 Abi,
307 ConstKw, 314 T![const],
308 DefaultKw, 315 T![default],
309 AsyncKw, 316 T![async],
310 UnsafeKw, 317 T![unsafe],
311 FnKw, 318 T![fn],
312 ParamList, 319 ParamList,
313 RetType, 320 RetType,
314 body: BlockExpr, 321 body: BlockExpr,
@@ -318,13 +325,13 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
318 struct RetType { ThinArrow, TypeRef } 325 struct RetType { ThinArrow, TypeRef }
319 326
320 struct StructDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner { 327 struct StructDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner {
321 StructKw, 328 T![struct],
322 FieldDefList, 329 FieldDefList,
323 Semi 330 Semi
324 } 331 }
325 332
326 struct UnionDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner { 333 struct UnionDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner {
327 UnionKw, 334 T![union],
328 RecordFieldDefList, 335 RecordFieldDefList,
329 } 336 }
330 337
@@ -337,7 +344,7 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
337 } 344 }
338 345
339 struct EnumDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner { 346 struct EnumDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner {
340 EnumKw, 347 T![enum],
341 variant_list: EnumVariantList, 348 variant_list: EnumVariantList,
342 } 349 }
343 struct EnumVariantList { 350 struct EnumVariantList {
@@ -352,14 +359,14 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
352 } 359 }
353 360
354 struct TraitDef: VisibilityOwner, NameOwner, AttrsOwner, DocCommentsOwner, TypeParamsOwner, TypeBoundsOwner { 361 struct TraitDef: VisibilityOwner, NameOwner, AttrsOwner, DocCommentsOwner, TypeParamsOwner, TypeBoundsOwner {
355 UnsafeKw, 362 T![unsafe],
356 AutoKw, 363 T![auto],
357 TraitKw, 364 T![trait],
358 ItemList, 365 ItemList,
359 } 366 }
360 367
361 struct Module: VisibilityOwner, NameOwner, AttrsOwner, DocCommentsOwner { 368 struct Module: VisibilityOwner, NameOwner, AttrsOwner, DocCommentsOwner {
362 ModKw, 369 T![mod],
363 ItemList, 370 ItemList,
364 Semi 371 Semi
365 } 372 }
@@ -371,36 +378,36 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
371 } 378 }
372 379
373 struct ConstDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner, TypeAscriptionOwner { 380 struct ConstDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner, TypeAscriptionOwner {
374 DefaultKw, 381 T![default],
375 ConstKw, 382 T![const],
376 Eq, 383 Eq,
377 body: Expr, 384 body: Expr,
378 Semi 385 Semi
379 } 386 }
380 387
381 struct StaticDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner, TypeAscriptionOwner { 388 struct StaticDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner, TypeAscriptionOwner {
382 StaticKw, 389 T![static],
383 MutKw, 390 T![mut],
384 Eq, 391 Eq,
385 body: Expr, 392 body: Expr,
386 Semi 393 Semi
387 } 394 }
388 395
389 struct TypeAliasDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner, TypeBoundsOwner { 396 struct TypeAliasDef: VisibilityOwner, NameOwner, TypeParamsOwner, AttrsOwner, DocCommentsOwner, TypeBoundsOwner {
390 DefaultKw, 397 T![default],
391 TypeKw, 398 T![type],
392 Eq, 399 Eq,
393 TypeRef, 400 TypeRef,
394 Semi 401 Semi
395 } 402 }
396 403
397 struct ImplDef: TypeParamsOwner, AttrsOwner { 404 struct ImplDef: TypeParamsOwner, AttrsOwner {
398 DefaultKw, 405 T![default],
399 ConstKw, 406 T![const],
400 UnsafeKw, 407 T![unsafe],
401 ImplKw, 408 T![impl],
402 Excl, 409 Excl,
403 ForKw, 410 T![for],
404 ItemList, 411 ItemList,
405 } 412 }
406 413
@@ -408,42 +415,42 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
408 struct TupleType { LParen, fields: [TypeRef], RParen } 415 struct TupleType { LParen, fields: [TypeRef], RParen }
409 struct NeverType { Excl } 416 struct NeverType { Excl }
410 struct PathType { Path } 417 struct PathType { Path }
411 struct PointerType { Star, ConstKw, MutKw, TypeRef } 418 struct PointerType { Star, T![const], T![mut], TypeRef }
412 struct ArrayType { LBrack, TypeRef, Semi, Expr, RBrack } 419 struct ArrayType { LBrack, TypeRef, Semi, Expr, RBrack }
413 struct SliceType { LBrack, TypeRef, RBrack } 420 struct SliceType { LBrack, TypeRef, RBrack }
414 struct ReferenceType { Amp, Lifetime, MutKw, TypeRef } 421 struct ReferenceType { Amp, Lifetime, T![mut], TypeRef }
415 struct PlaceholderType { Underscore } 422 struct PlaceholderType { Underscore }
416 struct FnPointerType { Abi, UnsafeKw, FnKw, ParamList, RetType } 423 struct FnPointerType { Abi, T![unsafe], T![fn], ParamList, RetType }
417 struct ForType { ForKw, TypeParamList, TypeRef } 424 struct ForType { T![for], TypeParamList, TypeRef }
418 struct ImplTraitType: TypeBoundsOwner { ImplKw } 425 struct ImplTraitType: TypeBoundsOwner { T![impl] }
419 struct DynTraitType: TypeBoundsOwner { DynKw } 426 struct DynTraitType: TypeBoundsOwner { T![dyn] }
420 427
421 struct TupleExpr: AttrsOwner { LParen, exprs: [Expr], RParen } 428 struct TupleExpr: AttrsOwner { LParen, exprs: [Expr], RParen }
422 struct ArrayExpr: AttrsOwner { LBrack, exprs: [Expr], Semi, RBrack } 429 struct ArrayExpr: AttrsOwner { LBrack, exprs: [Expr], Semi, RBrack }
423 struct ParenExpr: AttrsOwner { LParen, Expr, RParen } 430 struct ParenExpr: AttrsOwner { LParen, Expr, RParen }
424 struct PathExpr { Path } 431 struct PathExpr { Path }
425 struct LambdaExpr: AttrsOwner { 432 struct LambdaExpr: AttrsOwner {
426 StaticKw, 433 T![static],
427 AsyncKw, 434 T![async],
428 MoveKw, 435 T![move],
429 ParamList, 436 ParamList,
430 RetType, 437 RetType,
431 body: Expr, 438 body: Expr,
432 } 439 }
433 struct IfExpr: AttrsOwner { IfKw, Condition } 440 struct IfExpr: AttrsOwner { T![if], Condition }
434 struct LoopExpr: AttrsOwner, LoopBodyOwner { LoopKw } 441 struct LoopExpr: AttrsOwner, LoopBodyOwner { T![loop] }
435 struct TryBlockExpr: AttrsOwner { TryKw, body: BlockExpr } 442 struct TryBlockExpr: AttrsOwner { T![try], body: BlockExpr }
436 struct ForExpr: AttrsOwner, LoopBodyOwner { 443 struct ForExpr: AttrsOwner, LoopBodyOwner {
437 ForKw, 444 T![for],
438 Pat, 445 Pat,
439 InKw, 446 T![in],
440 iterable: Expr, 447 iterable: Expr,
441 } 448 }
442 struct WhileExpr: AttrsOwner, LoopBodyOwner { WhileKw, Condition } 449 struct WhileExpr: AttrsOwner, LoopBodyOwner { T![while], Condition }
443 struct ContinueExpr: AttrsOwner { ContinueKw, Lifetime } 450 struct ContinueExpr: AttrsOwner { T![continue], Lifetime }
444 struct BreakExpr: AttrsOwner { BreakKw, Lifetime, Expr } 451 struct BreakExpr: AttrsOwner { T![break], Lifetime, Expr }
445 struct Label { Lifetime } 452 struct Label { Lifetime }
446 struct BlockExpr: AttrsOwner { Label, UnsafeKw, Block } 453 struct BlockExpr: AttrsOwner { Label, T![unsafe], Block }
447 struct ReturnExpr: AttrsOwner { Expr } 454 struct ReturnExpr: AttrsOwner { Expr }
448 struct CallExpr: ArgListOwner { Expr } 455 struct CallExpr: ArgListOwner { Expr }
449 struct MethodCallExpr: AttrsOwner, ArgListOwner { 456 struct MethodCallExpr: AttrsOwner, ArgListOwner {
@@ -451,17 +458,17 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
451 } 458 }
452 struct IndexExpr: AttrsOwner { LBrack, RBrack } 459 struct IndexExpr: AttrsOwner { LBrack, RBrack }
453 struct FieldExpr: AttrsOwner { Expr, Dot, NameRef } 460 struct FieldExpr: AttrsOwner { Expr, Dot, NameRef }
454 struct AwaitExpr: AttrsOwner { Expr, Dot, AwaitKw } 461 struct AwaitExpr: AttrsOwner { Expr, Dot, T![await] }
455 struct TryExpr: AttrsOwner { TryKw, Expr } 462 struct TryExpr: AttrsOwner { T![try], Expr }
456 struct CastExpr: AttrsOwner { Expr, AsKw, TypeRef } 463 struct CastExpr: AttrsOwner { Expr, T![as], TypeRef }
457 struct RefExpr: AttrsOwner { Amp, RawKw, MutKw, Expr } 464 struct RefExpr: AttrsOwner { Amp, T![raw], T![mut], Expr }
458 struct PrefixExpr: AttrsOwner { PrefixOp, Expr } 465 struct PrefixExpr: AttrsOwner { PrefixOp, Expr }
459 struct BoxExpr: AttrsOwner { BoxKw, Expr } 466 struct BoxExpr: AttrsOwner { T![box], Expr }
460 struct RangeExpr: AttrsOwner { RangeOp } 467 struct RangeExpr: AttrsOwner { RangeOp }
461 struct BinExpr: AttrsOwner { BinOp } 468 struct BinExpr: AttrsOwner { BinOp }
462 struct Literal { LiteralToken } 469 struct Literal { LiteralToken }
463 470
464 struct MatchExpr: AttrsOwner { MatchKw, Expr, MatchArmList } 471 struct MatchExpr: AttrsOwner { T![match], Expr, MatchArmList }
465 struct MatchArmList: AttrsOwner { LCurly, arms: [MatchArm], RCurly } 472 struct MatchArmList: AttrsOwner { LCurly, arms: [MatchArm], RCurly }
466 struct MatchArm: AttrsOwner { 473 struct MatchArm: AttrsOwner {
467 pat: Pat, 474 pat: Pat,
@@ -469,7 +476,7 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
469 FatArrow, 476 FatArrow,
470 Expr, 477 Expr,
471 } 478 }
472 struct MatchGuard { IfKw, Expr } 479 struct MatchGuard { T![if], Expr }
473 480
474 struct RecordLit { Path, RecordFieldList} 481 struct RecordLit { Path, RecordFieldList}
475 struct RecordFieldList { 482 struct RecordFieldList {
@@ -483,9 +490,9 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
483 490
484 struct OrPat { pats: [Pat] } 491 struct OrPat { pats: [Pat] }
485 struct ParenPat { LParen, Pat, RParen } 492 struct ParenPat { LParen, Pat, RParen }
486 struct RefPat { Amp, MutKw, Pat } 493 struct RefPat { Amp, T![mut], Pat }
487 struct BoxPat { BoxKw, Pat } 494 struct BoxPat { T![box], Pat }
488 struct BindPat: AttrsOwner, NameOwner { RefKw, MutKw, At, Pat } 495 struct BindPat: AttrsOwner, NameOwner { T![ref], T![mut], At, Pat }
489 struct PlaceholderPat { Underscore } 496 struct PlaceholderPat { Underscore }
490 struct DotDotPat { Dotdot } 497 struct DotDotPat { Dotdot }
491 struct PathPat { Path } 498 struct PathPat { Path }
@@ -508,7 +515,7 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
508 struct TupleStructPat { Path, LParen, args: [Pat], RParen } 515 struct TupleStructPat { Path, LParen, args: [Pat], RParen }
509 struct TuplePat { LParen, args: [Pat], RParen } 516 struct TuplePat { LParen, args: [Pat], RParen }
510 517
511 struct Visibility { PubKw, SuperKw, SelfKw, CrateKw } 518 struct Visibility { T![pub], T![super], T![self], T![crate] }
512 struct Name { Ident } 519 struct Name { Ident }
513 struct NameRef { NameRefToken } 520 struct NameRef { NameRefToken }
514 521
@@ -534,20 +541,20 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
534 default_val: Expr, 541 default_val: Expr,
535 } 542 }
536 struct LifetimeParam: AttrsOwner { Lifetime} 543 struct LifetimeParam: AttrsOwner { Lifetime}
537 struct TypeBound { Lifetime, /* Question, */ ConstKw, /* Question, */ TypeRef} 544 struct TypeBound { Lifetime, /* Question, */ T![const], /* Question, */ TypeRef}
538 struct TypeBoundList { bounds: [TypeBound] } 545 struct TypeBoundList { bounds: [TypeBound] }
539 struct WherePred: TypeBoundsOwner { Lifetime, TypeRef } 546 struct WherePred: TypeBoundsOwner { Lifetime, TypeRef }
540 struct WhereClause { WhereKw, predicates: [WherePred] } 547 struct WhereClause { T![where], predicates: [WherePred] }
541 struct Abi { String } 548 struct Abi { String }
542 struct ExprStmt: AttrsOwner { Expr, Semi } 549 struct ExprStmt: AttrsOwner { Expr, Semi }
543 struct LetStmt: AttrsOwner, TypeAscriptionOwner { 550 struct LetStmt: AttrsOwner, TypeAscriptionOwner {
544 LetKw, 551 T![let],
545 Pat, 552 Pat,
546 Eq, 553 Eq,
547 initializer: Expr, 554 initializer: Expr,
548 Semi, 555 Semi,
549 } 556 }
550 struct Condition { LetKw, Pat, Eq, Expr } 557 struct Condition { T![let], Pat, Eq, Expr }
551 struct Block: AttrsOwner, ModuleItemOwner { 558 struct Block: AttrsOwner, ModuleItemOwner {
552 LCurly, 559 LCurly,
553 statements: [Stmt], 560 statements: [Stmt],
@@ -560,22 +567,22 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
560 params: [Param], 567 params: [Param],
561 RParen 568 RParen
562 } 569 }
563 struct SelfParam: TypeAscriptionOwner, AttrsOwner { Amp, Lifetime, SelfKw } 570 struct SelfParam: TypeAscriptionOwner, AttrsOwner { Amp, Lifetime, T![self] }
564 struct Param: TypeAscriptionOwner, AttrsOwner { 571 struct Param: TypeAscriptionOwner, AttrsOwner {
565 Pat, 572 Pat,
566 Dotdotdot 573 Dotdotdot
567 } 574 }
568 struct UseItem: AttrsOwner, VisibilityOwner { 575 struct UseItem: AttrsOwner, VisibilityOwner {
569 UseKw, 576 T![use],
570 UseTree, 577 UseTree,
571 } 578 }
572 struct UseTree { 579 struct UseTree {
573 Path, Star, UseTreeList, Alias 580 Path, Star, UseTreeList, Alias
574 } 581 }
575 struct Alias: NameOwner { AsKw } 582 struct Alias: NameOwner { T![as] }
576 struct UseTreeList { LCurly, use_trees: [UseTree], RCurly } 583 struct UseTreeList { LCurly, use_trees: [UseTree], RCurly }
577 struct ExternCrateItem: AttrsOwner, VisibilityOwner { 584 struct ExternCrateItem: AttrsOwner, VisibilityOwner {
578 ExternKw, CrateKw, NameRef, Alias, 585 T![extern], T![crate], NameRef, Alias,
579 } 586 }
580 struct ArgList { 587 struct ArgList {
581 LParen, 588 LParen,