from misc.codegen.lib.schemadefs import * from .ast import * class LabelableExpr(Expr): """ The base class for expressions that can be labeled (`LoopExpr`, `ForExpr`, `WhileExpr` or `BlockExpr`). """ label: optional[Label] | child class LoopingExpr(LabelableExpr): """ The base class for expressions that loop (`LoopExpr`, `ForExpr` or `WhileExpr`). """ loop_body: optional["BlockExpr"] | child @annotate(Adt, replace_bases={AstNode: Item}) class _: """ An ADT (Abstract Data Type) definition, such as `Struct`, `Enum`, or `Union`. """ derive_macro_expansions: list[MacroItems] | child | rust.detach @annotate(Module) @rust.doc_test_signature(None) class _: """ A module declaration. For example: ```rust mod foo; ``` ```rust mod bar { pub fn baz() {} } ``` """ @annotate(Expr, cfg=True) class _: """ The base class for expressions. """ @annotate(Pat, cfg=True) class _: """ The base class for patterns. """ @annotate(Label) class _: """ A label. For example: ```rust 'label: loop { println!("Hello, world (once)!"); break 'label; }; ``` """ @annotate(Stmt) class _: """ The base class for statements. """ @annotate(TypeRepr) class _: """ The base class for type references. ```rust let x: i32; let y: Vec; let z: Option; ``` """ @annotate(Path) class _: """ A path. For example: ```rust use some_crate::some_module::some_item; foo::bar; ``` """ segment: _ | ql.db_table_name("path_segments_") | doc( "last segment of this path") @annotate(GenericArgList) class _: """ The base class for generic arguments. ```rust x.foo::(42); ``` """ @annotate(Function) @rust.doc_test_signature(None) class _: """ A function declaration. For example ```rust fn foo(x: u32) -> u64 {(x + 1).into()} ``` A function declaration within a trait might not have a body: ```rust trait Trait { fn bar(); } ``` """ class PathExprBase(Expr): """ A path expression or a variable access in a formatting template. See `PathExpr` and `FormatTemplateVariableAccess` for further details. """ @annotate(PathExpr, replace_bases={Expr: PathExprBase}, add_bases=(PathAstNode,), cfg=True) @qltest.test_with(Path) class _: """ A path expression. For example: ```rust let x = variable; let x = foo::bar; let y = ::foo; let z = ::foo; ``` """ path: drop @annotate(IfExpr, cfg=True) class _: """ An `if` expression. For example: ```rust if x == 42 { println!("that's the answer"); } ``` ```rust let y = if x > 0 { 1 } else { 0 }; ``` """ @annotate(LetExpr, cfg=True) @rust.doc_test_signature("(maybe_some: Option) -> ()") class _: """ A `let` expression. For example: ```rust if let Some(x) = maybe_some { println!("{}", x); } ``` """ @annotate(BlockExpr, replace_bases={Expr: LabelableExpr}, cfg=True) class _: """ A block expression. For example: ```rust { let x = 42; } ``` ```rust 'label: { let x = 42; x } ``` """ label: drop @annotate(LoopExpr, replace_bases={Expr: LoopingExpr}, cfg=True) class _: """ A loop expression. For example: ```rust loop { println!("Hello, world (again)!"); }; ``` ```rust 'label: loop { println!("Hello, world (once)!"); break 'label; }; ``` ```rust let mut x = 0; loop { if x < 10 { x += 1; } else { break; } }; ``` """ label: drop loop_body: drop @annotate(CallExpr, cfg=True) class _: """ NOTE: Consider using `Call` instead, as that excludes call expressions that are instantiations of tuple structs and tuple variants. A call expression. For example: ```rust foo(42); foo::(42); foo[0](42); Option::Some(42); // tuple variant instantiation ``` """ @annotate(MethodCallExpr, cfg=True) class _: """ NOTE: Consider using `MethodCall` instead, as that also includes calls to methods using call syntax (such as `Foo::method(x)`), operation syntax (such as `x + y`), and indexing syntax (such as `x[y]`). A method call expression. For example: ```rust x.foo(42); x.foo::(42); ``` """ @annotate(MatchArm) @rust.doc_test_signature("(x: i32)") class _: """ A match arm. For example: ```rust match x { Option::Some(y) => y, Option::None => 0, }; ``` ```rust match x { Some(y) if y != 0 => 1 / y, _ => 0, }; ``` """ @annotate(MatchExpr, cfg=True) @rust.doc_test_signature("(x: i32) -> i32") class _: """ A match expression. For example: ```rust match x { Option::Some(y) => y, Option::None => 0, } ``` ```rust match x { Some(y) if y != 0 => 1 / y, _ => 0, } ``` """ scrutinee: _ | doc( "scrutinee (the expression being matched) of this match expression") @annotate(ContinueExpr, cfg=True) class _: """ A continue expression. For example: ```rust loop { if not_ready() { continue; } } ``` ```rust 'label: loop { if not_ready() { continue 'label; } } ``` """ @annotate(BreakExpr, cfg=True) class _: """ A break expression. For example: ```rust loop { if not_ready() { break; } } ``` ```rust let x = 'label: loop { if done() { break 'label 42; } }; ``` ```rust let x = 'label: { if exit() { break 'label 42; } 0; }; ``` """ @annotate(ReturnExpr, cfg=True) @rust.doc_test_signature(None) class _: """ A return expression. For example: ```rust fn some_value() -> i32 { return 42; } ``` ```rust fn no_value() -> () { return; } ``` """ @annotate(BecomeExpr, cfg=True) @rust.doc_test_signature(None) class _: """ A `become` expression. For example: ```rust fn fact_a(n: i32, a: i32) -> i32 { if n == 0 { a } else { become fact_a(n - 1, n * a) } } ``` """ @annotate(YieldExpr, cfg=True) class _: """ A `yield` expression. For example: ```rust let one = #[coroutine] || { yield 1; }; ``` """ @annotate(YeetExpr, cfg=True) class _: """ A `yeet` expression. For example: ```rust if x < size { do yeet "index out of bounds"; } ``` """ @annotate(StructExprField) class _: """ A field in a struct expression. For example `a: 1` in: ```rust Foo { a: 1, b: 2 }; ``` """ @annotate(StructExpr, add_bases=(PathAstNode,), cfg=True) class _: """ A struct expression. For example: ```rust let first = Foo { a: 1, b: 2 }; let second = Foo { a: 2, ..first }; let n = Foo { a: 1, b: 2 }.b; Foo { a: m, .. } = second; ``` """ path: drop @annotate(FieldExpr, cfg=True) class _: """ A field access expression. For example: ```rust x.foo ``` """ @annotate(AwaitExpr, cfg=True) class _: """ An `await` expression. For example: ```rust async { let x = foo().await; x } ``` """ @annotate(CastExpr, cfg=True) class _: """ A type cast expression. For example: ```rust value as u64; ``` """ @annotate(RefExpr, cfg=True) class _: """ A reference expression. For example: ```rust let ref_const = &foo; let ref_mut = &mut foo; let raw_const: &mut i32 = &raw const foo; let raw_mut: &mut i32 = &raw mut foo; ``` """ @annotate(PrefixExpr, cfg=True) class _: """ A unary operation expression. For example: ```rust let x = -42; let y = !true; let z = *ptr; ``` """ @annotate(BinaryExpr, cfg=True) class _: """ A binary operation expression. For example: ```rust x + y; x && y; x <= y; x = y; x += y; ``` """ @annotate(RangeExpr, cfg=True) class _: """ A range expression. For example: ```rust let x = 1..=10; let x = 1..10; let x = 10..; let x = ..10; let x = ..=10; let x = ..; ``` """ @annotate(IndexExpr, cfg=True) class _: """ An index expression. For example: ```rust list[42]; list[42] = 1; ``` """ @annotate(ClosureExpr) class _: """ A closure expression. For example: ```rust |x| x + 1; move |x: i32| -> i32 { x + 1 }; async |x: i32, y| x + y; #[coroutine] |x| yield x; #[coroutine] static |x| yield x; for |x: T| { println!("{:?}", x); }; ``` """ @annotate(TupleExpr, cfg=True) class _: """ A tuple expression. For example: ```rust let tuple = (1, "one"); let n = (2, "two").0; let (a, b) = tuple; ``` """ @annotate(ArrayExprInternal) @ql.internal @qltest.skip class _: pass class ArrayExpr(Expr): """ The base class for array expressions. For example: ```rust [1, 2, 3]; [1; 10]; ``` """ exprs: list[Expr] | child attrs: list[Attr] | child @synth.from_class(ArrayExprInternal) class ArrayListExpr(ArrayExpr): """ An array expression with a list of elements. For example: ```rust [1, 2, 3]; ``` """ __cfg__ = True @synth.from_class(ArrayExprInternal) class ArrayRepeatExpr(ArrayExpr): """ An array expression with a repeat operand and a repeat length. For example: ```rust [1; 10]; ``` """ __cfg__ = True repeat_operand: Expr | child repeat_length: Expr | child @annotate(LiteralExpr, cfg=True) class _: """ A literal expression. For example: ```rust 42; 42.0; "Hello, world!"; b"Hello, world!"; 'x'; b'x'; r"Hello, world!"; true; ``` """ @annotate(UnderscoreExpr, cfg=True) class _: """ An underscore expression. For example: ```rust _ = 42; ``` """ @annotate(OffsetOfExpr, cfg=True) class _: """ An `offset_of` expression. For example: ```rust builtin # offset_of(Struct, field); ``` """ @annotate(AsmExpr, cfg=True) class _: """ An inline assembly expression. For example: ```rust unsafe { #[inline(always)] builtin # asm("cmp {0}, {1}", in(reg) a, in(reg) b); } ``` """ @annotate(LetStmt, cfg=True) class _: """ A let statement. For example: ```rust let x = 42; let x: i32 = 42; let x: i32; let x; let (x, y) = (1, 2); let Some(x) = std::env::var("FOO") else { return; }; ``` """ @annotate(ExprStmt) class _: """ An expression statement. For example: ```rust start(); finish(); use std::env; ``` """ @annotate(WildcardPat, cfg=True) class _: """ A wildcard pattern. For example: ```rust let _ = 42; ``` """ @annotate(TuplePat, cfg=True) class _: """ A tuple pattern. For example: ```rust let (x, y) = (1, 2); let (a, b, .., z) = (1, 2, 3, 4, 5); ``` """ @annotate(OrPat, cfg=True) class _: """ An or pattern. For example: ```rust match x { Option::Some(y) | Option::None => 0, } ``` """ @annotate(StructPatField) class _: """ A field in a struct pattern. For example `a: 1` in: ```rust let Foo { a: 1, b: 2 } = foo; ``` """ @annotate(StructPat, add_bases=(PathAstNode,), cfg=True) class _: """ A struct pattern. For example: ```rust match x { Foo { a: 1, b: 2 } => "ok", Foo { .. } => "fail", } ``` """ path: drop @annotate(RangePat, cfg=True) class _: """ A range pattern. For example: ```rust match x { ..15 => "too cold", 16..=25 => "just right", 26.. => "too hot", } ``` """ @annotate(SlicePat, cfg=True) class _: """ A slice pattern. For example: ```rust match x { [1, 2, 3, 4, 5] => "ok", [1, 2, ..] => "fail", [x, y, .., z, 7] => "fail", } ``` """ @annotate(PathPat, add_bases=(PathAstNode,), cfg=True) @qltest.test_with(Path) class _: """ A path pattern. For example: ```rust match x { Foo::Bar => "ok", _ => "fail", } ``` """ path: drop @annotate(LiteralPat, cfg=True) class _: """ A literal pattern. For example: ```rust match x { 42 => "ok", _ => "fail", } ``` """ @annotate(IdentPat, cfg=True) class _: """ A binding pattern. For example: ```rust match x { Option::Some(y) => y, Option::None => 0, }; ``` ```rust match x { y@Option::Some(_) => y, Option::None => 0, }; ``` """ @annotate(TupleStructPat, add_bases=(PathAstNode,), cfg=True) class _: """ A tuple struct pattern. For example: ```rust match x { Tuple("a", 1, 2, 3) => "great", Tuple(.., 3) => "fine", Tuple(..) => "fail", }; ``` """ path: drop @annotate(RefPat, cfg=True) class _: """ A reference pattern. For example: ```rust match x { &mut Option::Some(y) => y, &Option::None => 0, }; ``` """ @annotate(BoxPat, cfg=True) class _: """ A box pattern. For example: ```rust match x { box Option::Some(y) => y, box Option::None => 0, }; ``` """ @annotate(ConstBlockPat, cfg=True) class _: """ A const block pattern. For example: ```rust match x { const { 1 + 2 + 3 } => "ok", _ => "fail", }; ``` """ @annotate(Abi) class _: """ An ABI specification for an extern function or block. For example: ```rust extern "C" fn foo() {} // ^^^ ``` """ @annotate(ArgList) class _: """ A list of arguments in a function or method call. For example: ```rust foo(1, 2, 3); // ^^^^^^^^^ ``` """ @annotate(ArrayTypeRepr) class _: """ An array type representation. For example: ```rust let arr: [i32; 4]; // ^^^^^^^^ ``` """ @annotate(AssocItem, replace_bases={AstNode: Item}) class _: """ An associated item in a `Trait` or `Impl`. For example: ```rust trait T {fn foo(&self);} // ^^^^^^^^^^^^^ ``` """ @annotate(AssocItemList) @qltest.test_with(Trait) class _: """ A list of `AssocItem` elements, as appearing in a `Trait` or `Impl`. """ @annotate(AssocTypeArg) class _: """ An associated type argument in a path. For example: ```rust fn process_cloneable(iter: T) where T: Iterator // ^^^^^^^^^^^ { // ... } ``` """ @annotate(Attr) class _: """ An attribute applied to an item. For example: ```rust #[derive(Debug)] //^^^^^^^^^^^^^ struct S; ``` """ @annotate(ForBinder) class _: """ A for binder, specifying lifetime or type parameters for a closure or a type. For example: ```rust let print_any = for |x: T| { // ^^^^^^^^^^^^^^^^^^^^^^^ println!("{:?}", x); }; print_any(42); print_any("hello"); ``` """ @annotate(Const, replace_bases={Item: None}) class _: """ A constant item declaration. For example: ```rust const X: i32 = 42; ``` """ has_implementation: predicate | doc("this constant has an implementation") | desc(""" This is the same as `hasBody` for source code, but for library code (for which we always skip the body), this will hold when the body was present in the original code. """) | rust.detach @annotate(ConstArg) class _: """ A constant argument in a generic argument list. For example: ```rust Foo::<3> // ^ ``` """ @annotate(ConstParam) class _: """ A constant parameter in a generic parameter list. For example: ```rust struct Foo ; // ^^^^^^^^^^^^^^ ``` """ @annotate(DynTraitTypeRepr) class _: """ A dynamic trait object type. For example: ```rust let x: &dyn Debug; // ^^^^^^^^^ ``` """ @annotate(Enum, replace_bases={Item: None}) # still an Item via Adt class _: """ An enum declaration. For example: ```rust enum E {A, B(i32), C {x: i32}} ``` """ @annotate(ExternBlock) class _: """ An extern block containing foreign function declarations. For example: ```rust extern "C" { fn foo(); } ``` """ @annotate(ExternCrate) class _: """ An extern crate declaration. For example: ```rust extern crate serde; ``` """ @annotate(ExternItem, replace_bases={AstNode: Item}) class _: """ An item inside an extern block. For example: ```rust extern "C" { fn foo(); static BAR: i32; } ``` """ @annotate(ExternItemList) class _: """ A list of items inside an extern block. For example: ```rust extern "C" { fn foo(); static BAR: i32; } ``` """ @annotate(FieldList) class _: """ A list of fields in a struct or enum variant. For example: ```rust struct S {x: i32, y: i32} // ^^^^^^^^^^^^^^^^ enum E {A(i32, i32)} // ^^^^^^^^^^^^^ ``` """ @annotate(FnPtrTypeRepr) class _: """ A function pointer type. For example: ```rust let f: fn(i32) -> i32; // ^^^^^^^^^^^^^^ ``` """ @annotate(ForExpr, replace_bases={Expr: LoopingExpr}, cfg=True) class _: """ A for loop expression. For example: ```rust for x in 0..10 { println!("{}", x); } ``` """ label: drop loop_body: drop @annotate(ForTypeRepr) class _: """ A function pointer type with a `for` modifier. For example: ```rust type RefOp = for<'a> fn(&'a X) -> &'a X; // ^^^^^^^^^^^^^^^^^^^^^^^^^^ ``` """ @annotate(FormatArgsArg, cfg=True) @qltest.test_with(FormatArgsExpr) class _: """ A FormatArgsArg. For example the `"world"` in: ```rust format_args!("Hello, {}!", "world") ``` """ @annotate(FormatArgsExpr, cfg=True) class _: """ A FormatArgsExpr. For example: ```rust format_args!("no args"); format_args!("{} foo {:?}", 1, 2); format_args!("{b} foo {a:?}", a=1, b=2); let (x, y) = (1, 42); format_args!("{x}, {y}"); ``` """ formats: list["Format"] | child | synth @annotate(GenericArg) class _: """ A generic argument in a generic argument list. For example: ```rust Foo:: // ^^^^^^^^^^^ ``` """ @annotate(GenericParam) class _: """ A generic parameter in a generic parameter list. For example: ```rust fn foo(t: T, u: U) {} // ^ ^ ``` """ @annotate(GenericParamList) class _: """ A list of generic parameters. For example: ```rust fn f(a: A, b: B) {} // ^^^^^^ type Foo = (T1, T2); // ^^^^^^^^ ``` """ @annotate(Impl) class _: """ An `impl`` block. For example: ```rust impl MyTrait for MyType { fn foo(&self) {} } ``` """ @annotate(ImplTraitTypeRepr) class _: """ An `impl Trait` type. For example: ```rust fn foo() -> impl Iterator { 0..10 } // ^^^^^^^^^^^^^^^^^^^^^^^^^^ ``` """ @annotate(InferTypeRepr) class _: """ An inferred type (`_`). For example: ```rust let x: _ = 42; // ^ ``` """ @annotate(Item, add_bases=(Addressable,)) class _: """ An item such as a function, struct, enum, etc. For example: ```rust fn foo() {} struct S; enum E {} ``` """ attribute_macro_expansion: optional[MacroItems] | child | rust.detach @annotate(ItemList) class _: """ A list of items in a module or block. For example: ```rust mod m { fn foo() {} struct S; } ``` """ @annotate(LetElse) class _: """ An else block in a let-else statement. For example: ```rust let Some(x) = opt else { return; }; // ^^^^^^ ``` """ @annotate(Lifetime) class _: """ A lifetime annotation. For example: ```rust fn foo<'a>(x: &'a str) {} // ^^ ^^ ``` """ @annotate(LifetimeArg) class _: """ A lifetime argument in a generic argument list. For example: ```rust let text: Text<'a>; // ^^ ``` """ @annotate(LifetimeParam) class _: """ A lifetime parameter in a generic parameter list. For example: ```rust fn foo<'a>(x: &'a str) {} // ^^ ``` """ @annotate(MacroCall, cfg=True, replace_bases={Item: None}) class _: """ A macro invocation. For example: ```rust println!("Hello, world!"); ``` """ macro_call_expansion: optional[AstNode] | child | rust.detach @annotate(MacroItems) @rust.doc_test_signature(None) class _: """ A sequence of items generated by a macro. For example: ```rust mod foo{ include!("common_definitions.rs"); #[an_attribute_macro] fn foo() { println!("Hello, world!"); } #[derive(Debug)] struct Bar; } ``` """ @annotate(MacroRules) class _: """ A macro definition using the `macro_rules!` syntax. ```rust macro_rules! my_macro { () => { println!("This is a macro!"); }; } ``` """ class MacroBlockExpr(Expr): """ A sequence of statements generated by a `MacroCall`. For example: ```rust macro_rules! my_macro { () => { let mut x = 40; x += 2; x }; } my_macro!(); // this macro expands to a sequence of statements (and an expression) ``` """ __cfg__ = True statements: list[Stmt] | child tail_expr: optional[Expr] | child @annotate(MacroTypeRepr) class _: """ A type produced by a macro. For example: ```rust macro_rules! macro_type { () => { i32 }; } type T = macro_type!(); // ^^^^^^^^^^^^^ ``` """ @annotate(MatchArmList) class _: """ A list of arms in a match expression. For example: ```rust match x { 1 => "one", 2 => "two", _ => "other", } // ^^^^^^^^^^^ ``` """ @annotate(MatchGuard) class _: """ A guard condition in a match arm. For example: ```rust match x { y if y > 0 => "positive", // ^^^^^^^ _ => "non-positive", } ``` """ @annotate(Meta) class _: """ A meta item in an attribute. For example: ```rust #[unsafe(lint::name = "reason_for_bypass")] //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #[deprecated(since = "1.2.0", note = "Use bar instead", unsafe=true)] //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ fn foo() { // ... } ``` """ @annotate(Name, cfg=True) class _: """ An identifier name. For example: ```rust let foo = 1; // ^^^ ``` """ @annotate(NameRef) class _: """ A reference to a name. For example: ```rust foo(); //^^^ ``` """ @annotate(NeverTypeRepr) class _: """ The never type `!`. For example: ```rust fn foo() -> ! { panic!() } // ^ ``` """ class ParamBase(AstNode): """ A normal parameter, `Param`, or a self parameter `SelfParam`. """ attrs: list["Attr"] | child type_repr: optional["TypeRepr"] | child @annotate(ParamBase, cfg=True) class _: pass @annotate(Param, replace_bases={AstNode: ParamBase}, cfg=True) class _: """ A parameter in a function or method. For example `x` in: ```rust fn new(x: T) -> Foo { // ... } ``` """ attrs: drop type_repr: drop @annotate(ParenExpr) class _: """ A parenthesized expression. For example: ```rust (x + y) ``` """ @annotate(ParenPat) class _: """ A parenthesized pattern. For example: ```rust let (x) = 1; // ^^^ ``` """ @annotate(ParenTypeRepr) class _: """ A parenthesized type. For example: ```rust let x: (i32); // ^^^^^ ``` """ @annotate(PathSegment) @qltest.test_with(Path) class _: """ A path segment, which is one part of a whole path. For example: - `HashMap` - `HashMap` - `Fn(i32) -> i32` - `widgets(..)` - `` """ type_repr: optional["TypeRepr"] | child | rust.detach trait_type_repr: optional["PathTypeRepr"] | child | rust.detach @annotate(PathTypeRepr) @qltest.test_with(Path) class _: """ A path referring to a type. For example: ```rust type X = std::collections::HashMap; type Y = X::Item; ``` """ @annotate(PtrTypeRepr) class _: """ A pointer type. For example: ```rust let p: *const i32; let q: *mut i32; // ^^^^^^^^^ ``` """ @annotate(StructExprFieldList) class _: """ A list of fields in a struct expression. For example: ```rust Foo { a: 1, b: 2 } // ^^^^^^^^^^^ ``` """ @annotate(StructField) class _: """ A field in a struct declaration. For example: ```rust struct S { x: i32 } // ^^^^^^^ ``` """ @annotate(StructFieldList) class _: """ A list of fields in a struct declaration. For example: ```rust struct S { x: i32, y: i32 } // ^^^^^^^^^^^^^^^ ``` """ @annotate(StructPatFieldList) class _: """ A list of fields in a struct pattern. For example: ```rust let Foo { a, b } = foo; // ^^^^^ ``` """ @annotate(RefTypeRepr) class _: """ A reference type. For example: ```rust let r: &i32; let m: &mut i32; // ^^^^^^^^ ``` """ @annotate(Rename) class _: """ A rename in a use declaration. For example: ```rust use foo as bar; // ^^^^^^ ``` """ @annotate(RestPat, cfg=True) class _: """ A rest pattern (`..`) in a tuple, slice, or struct pattern. For example: ```rust let (a, .., z) = (1, 2, 3); // ^^ ``` """ @annotate(RetTypeRepr) class _: """ A return type in a function signature. For example: ```rust fn foo() -> i32 { 0 } // ^^^^^^ ``` """ @annotate(ReturnTypeSyntax) class _: """ A return type notation `(..)` to reference or bound the type returned by a trait method For example: ```rust struct ReverseWidgets> { factory: F, } impl Factory for ReverseWidgets where F: Factory, { fn widgets(&self) -> impl Iterator { self.factory.widgets().rev() } } ``` """ @annotate(SelfParam, replace_bases={AstNode: ParamBase}, cfg=True) @rust.doc_test_signature(None) class _: """ A `self` parameter. For example `self` in: ```rust struct X; impl X { fn one(&self) {} fn two(&mut self) {} fn three(self) {} fn four(mut self) {} fn five<'a>(&'a self) {} } ``` """ attrs: drop type_repr: drop @annotate(SliceTypeRepr) class _: """ A slice type. For example: ```rust let s: &[i32]; // ^^^^^ ``` """ @annotate(SourceFile) class _: """ A source file. For example: ```rust // main.rs fn main() {} ``` """ @annotate(Static, replace_bases={Item: None}) class _: """ A static item declaration. For example: ```rust static X: i32 = 42; ``` """ @annotate(StmtList) class _: """ A list of statements in a block, with an optional tail expression at the end that determines the block's value. For example: ```rust { let x = 1; let y = 2; x + y } // ^^^^^^^^^ ``` """ statements: _ | doc("statements of this statement list") | desc(""" The statements of a `StmtList` do not include any tail expression, which can be accessed with predicates such as `getTailExpr`. """) tail_expr: _ | doc("tail expression of this statement list") | desc(""" The tail expression is the expression at the end of a block, that determines the block's value. """) @annotate(Struct, replace_bases={Item: None}) # still an Item via Adt class _: """ A Struct. For example: ```rust struct Point { x: i32, y: i32, } ``` """ field_list: _ | ql.db_table_name("struct_field_lists_") @annotate(TokenTree) class _: """ A token tree in a macro definition or invocation. For example: ```rust println!("{} {}!", "Hello", "world"); // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``` ```rust macro_rules! foo { ($x:expr) => { $x + 1 }; } // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``` """ @annotate(Trait) @rust.doc_test_signature(None) class _: """ A Trait. For example: ``` trait Frobinizable { type Frobinator; type Result: Copy; fn frobinize_with(&mut self, frobinator: &Self::Frobinator) -> Result; } pub trait Foo where T::Frobinator: Eq {} ``` """ @annotate(TraitAlias) class _: """ A trait alias. For example: ```rust trait Foo = Bar + Baz; ``` """ @annotate(TryExpr, cfg=True) class _: """ A try expression using the `?` operator. For example: ```rust let x = foo()?; // ^ ``` """ @annotate(TupleField) class _: """ A field in a tuple struct or tuple variant. For example: ```rust struct S(i32, String); // ^^^ ^^^^^^ ``` """ @annotate(TupleFieldList) class _: """ A list of fields in a tuple struct or tuple variant. For example: ```rust struct S(i32, String); // ^^^^^^^^^^^^^ ``` """ @annotate(TupleTypeRepr) class _: """ A tuple type. For example: ```rust let t: (i32, String); // ^^^^^^^^^^^^^ ``` """ @annotate(TypeAlias, replace_bases={Item: None}) class _: """ A type alias. For example: ```rust type Point = (u8, u8); trait Trait { type Output; // ^^^^^^^^^^^ } ``` """ @annotate(TypeArg) class _: """ A type argument in a generic argument list. For example: ```rust Foo:: // ^^^ ``` """ @annotate(TypeBound) class _: """ A type bound in a trait or generic parameter. For example: ```rust fn foo(t: T) {} // ^^^^^ fn bar(value: impl for<'a> From<&'a str>) {} // ^^^^^^^^^^^^^^^^^^^^^ ``` """ @annotate(TypeBoundList) class _: """ A list of type bounds. For example: ```rust fn foo(t: T) {} // ^^^^^^^^^^^^^ ``` """ @annotate(TypeParam) class _: """ A type parameter in a generic parameter list. For example: ```rust fn foo(t: T) {} // ^ ``` """ @annotate(Union, replace_bases={Item: None}) # still an Item via Adt class _: """ A union declaration. For example: ```rust union U { f1: u32, f2: f32 } ``` """ @annotate(Use) class _: """ A `use` statement. For example: ```rust use std::collections::HashMap; ``` """ @annotate(UseTree) class _: """ A `use` tree, that is, the part after the `use` keyword in a `use` statement. For example: ```rust use std::collections::HashMap; use std::collections::*; use std::collections::HashMap as MyHashMap; use std::collections::{self, HashMap, HashSet}; ``` """ @annotate(UseTreeList) class _: """ A list of use trees in a use declaration. For example: ```rust use std::{fs, io}; // ^^^^^^^^ ``` """ @annotate(Variant, replace_bases={AstNode: Addressable}) class _: """ A variant in an enum declaration. For example: ```rust enum E { A, B(i32), C { x: i32 } } // ^ ^^^^^^ ^^^^^^^^^^^^ ``` """ @annotate(VariantList) class _: """ A list of variants in an enum declaration. For example: ```rust enum E { A, B, C } // ^^^^^^^^^^^ ``` """ @annotate(Visibility) class _: """ A visibility modifier. For example: ```rust pub struct S; //^^^ ``` """ @annotate(WhereClause) class _: """ A where clause in a generic declaration. For example: ```rust fn foo(t: T) where T: Debug {} // ^^^^^^^^^^^^^^ ``` """ @annotate(WherePred) class _: """ A predicate in a where clause. For example: ```rust fn foo(t: T, u: U) where T: Debug, U: Clone {} // ^^^^^^^^ ^^^^^^^^ fn bar(value: T) where for<'a> T: From<&'a str> {} // ^^^^^^^^^^^^^^^^^^^^^^^^ ``` """ @annotate(WhileExpr, replace_bases={Expr: LoopingExpr}, cfg=True) class _: """ A while loop expression. For example: ```rust while x < 10 { x += 1; } ``` """ label: drop loop_body: drop @annotate(Function, add_bases=[Callable], replace_bases={Item: None}) class _: param_list: drop attrs: drop has_implementation: predicate | doc("this function has an implementation") | desc(""" This is the same as `hasBody` for source code, but for library code (for which we always skip the body), this will hold when the body was present in the original code. """) | rust.detach @annotate(ClosureExpr, add_bases=[Callable]) class _: param_list: drop attrs: drop @synth.on_arguments(parent="FormatArgsExpr", index=int, kind=int) @qltest.test_with(FormatArgsExpr) class FormatTemplateVariableAccess(PathExprBase): pass @synth.on_arguments(parent=FormatArgsExpr, index=int, text=string, offset=int) @qltest.test_with(FormatArgsExpr) class Format(Locatable): """ A format element in a formatting template. For example the `{}` in: ```rust println!("Hello {}", "world"); ``` or the `{value:#width$.precision$}` in: ```rust println!("Value {value:#width$.precision$}"); ``` """ parent: FormatArgsExpr index: int argument_ref: optional["FormatArgument"] | child | desc(""" For example `name` and `0` in: ```rust let name = "Alice"; println!("{name} in wonderland"); println!("{0} in wonderland", name); ``` """) width_argument: optional["FormatArgument"] | child | desc(""" For example `width` and `1` in: ```rust let width = 6; println!("{:width$}", PI); println!("{:1$}", PI, width); ``` """) precision_argument: optional["FormatArgument"] | child | desc(""" For example `prec` and `1` in: ```rust let prec = 6; println!("{:.prec$}", PI); println!("{:.1$}", PI, prec); ``` """) @synth.on_arguments(parent=FormatArgsExpr, index=int, kind=int, name=string, positional=boolean, offset=int) @qltest.test_with(FormatArgsExpr) class FormatArgument(Locatable): """ An argument in a format element in a formatting template. For example the `width`, `precision`, and `value` in: ```rust println!("Value {value:#width$.precision$}"); ``` or the `0`, `1` and `2` in: ```rust println!("Value {0:#1$.2$}", value, width, precision); ``` """ parent: Format variable: optional[FormatTemplateVariableAccess] | child @annotate(MacroDef) class _: """ A Rust 2.0 style declarative macro definition. For example: ```rust pub macro vec_of_two($element:expr) { vec![$element, $element] } ``` """ @annotate(MacroExpr, cfg=True) class _: """ A macro expression, representing the invocation of a macro that produces an expression. For example: ```rust let y = vec![1, 2, 3]; ``` """ @annotate(MacroPat, cfg=True) class _: """ A macro pattern, representing the invocation of a macro that produces a pattern. For example: ```rust macro_rules! my_macro { () => { Ok(_) }; } match x { my_macro!() => "matched", // ^^^^^^^^^^^ _ => "not matched", } ``` """ @annotate(ParamList) class _: """ A list of parameters in a function, method, or closure declaration. For example: ```rust fn foo(x: i32, y: i32) {} // ^^^^^^^^^^^^^ ``` """ @annotate(AsmDirSpec) class _: """ An inline assembly direction specifier. For example: ```rust use core::arch::asm; asm!("mov {input:x}, {input:x}", output = out(reg) x, input = in(reg) y); // ^^^ ^^ ``` """ @annotate(AsmOperandExpr) class _: """ An operand expression in an inline assembly block. For example: ```rust use core::arch::asm; asm!("mov {0}, {1}", out(reg) x, in(reg) y); // ^ ^ ``` """ @annotate(AsmOption) class _: """ An option in an inline assembly block. For example: ```rust use core::arch::asm; asm!("", options(nostack, nomem)); // ^^^^^^^^^^^^^^^^ ``` """ @annotate(AsmRegSpec) class _: """ A register specification in an inline assembly block. For example: ```rust use core::arch::asm; asm!("mov {0}, {1}", out("eax") x, in(EBX) y); // ^^^ ^^^ ``` """ @annotate(AsmClobberAbi) class _: """ A clobbered ABI in an inline assembly block. For example: ```rust use core::arch::asm; asm!("", clobber_abi("C")); // ^^^^^^^^^^^^^^^^ ``` """ @annotate(AsmConst) class _: """ A constant operand in an inline assembly block. For example: ```rust use core::arch::asm; asm!("mov eax, {const}", const 42); // ^^^^^^^ ``` """ @annotate(AsmLabel) class _: """ A label in an inline assembly block. For example: ```rust use core::arch::asm; asm!( "jmp {}", label { println!("Jumped from asm!"); } // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ); ``` """ @annotate(AsmOperandNamed) class _: """ A named operand in an inline assembly block. For example: ```rust use core::arch::asm; asm!("mov {0:x}, {input:x}", out(reg) x, input = in(reg) y); // ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ``` """ @annotate(AsmOptionsList) class _: """ A list of options in an inline assembly block. For example: ```rust use core::arch::asm; asm!("", options(nostack, nomem)); // ^^^^^^^^^^^^^^^^ ``` """ @annotate(AsmRegOperand) class _: """ A register operand in an inline assembly block. For example: ```rust use core::arch::asm; asm!("mov {0}, {1}", out(reg) x, in(reg) y); // ^ ^ ``` """ @annotate(AsmSym) class _: """ A symbol operand in an inline assembly block. For example: ```rust use core::arch::asm; asm!("call {sym}", sym = sym my_function); // ^^^^^^^^^^^^^^^^^^^^^^ ``` """ @annotate(UseBoundGenericArgs) class _: """ A use<..> bound to control which generic parameters are captured by an impl Trait return type. For example: ```rust pub fn hello<'a, T, const N: usize>() -> impl Sized + use<'a, T, N> { 0 } // ^^^^^^^^ ``` """ @annotate(ParenthesizedArgList) class _: """ A parenthesized argument list as used in function traits. For example: ```rust fn call_with_42(f: F) -> i32 where F: Fn(i32, String) -> i32, // ^^^^^^^^^^^ { f(42, "Don't panic".to_string()) } ``` """