diff --git a/.github/workflows/ql-for-ql-dataset_measure.yml b/.github/workflows/ql-for-ql-dataset_measure.yml
index d133eb0ad350..c3441ffa4074 100644
--- a/.github/workflows/ql-for-ql-dataset_measure.yml
+++ b/.github/workflows/ql-for-ql-dataset_measure.yml
@@ -53,7 +53,7 @@ jobs:
- name: Create database
run: |
"${CODEQL}" database create \
- --search-path "${{ github.workspace }}"
+ --search-path "${{ github.workspace }}" \
--threads 4 \
--language ql --source-root "${{ github.workspace }}/repo" \
"${{ runner.temp }}/database"
diff --git a/ql/extractor/src/generator.rs b/ql/extractor/src/generator.rs
index ea663896e640..1dca6969f348 100644
--- a/ql/extractor/src/generator.rs
+++ b/ql/extractor/src/generator.rs
@@ -36,5 +36,5 @@ pub fn run(options: Options) -> std::io::Result<()> {
},
];
- generate(languages, options.dbscheme, options.library, false)
+ generate(languages, options.dbscheme, options.library)
}
diff --git a/ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll b/ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll
index 562af993d894..a83095629ab5 100644
--- a/ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll
+++ b/ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll
@@ -5,6 +5,10 @@
import codeql.Locations as L
+/** Holds if the database is an overlay. */
+overlay[local]
+private predicate isOverlay() { databaseMetadata("isOverlay", "true") }
+
module QL {
/** The base class for all AST nodes */
class AstNode extends @ql_ast_node {
@@ -48,6 +52,30 @@ module QL {
final override string getAPrimaryQlClass() { result = "ReservedWord" }
}
+ /** Gets the file containing the given `node`. */
+ overlay[local]
+ private @file getNodeFile(@ql_ast_node node) {
+ exists(@location_default loc | ql_ast_node_location(node, loc) |
+ locations_default(loc, result, _, _, _, _)
+ )
+ }
+
+ /** Holds if `file` was extracted as part of the overlay database. */
+ overlay[local]
+ private predicate discardFile(@file file) { isOverlay() and file = getNodeFile(_) }
+
+ /** Holds if `node` is in the `file` and is part of the overlay base database. */
+ overlay[local]
+ private predicate discardableAstNode(@file file, @ql_ast_node node) {
+ not isOverlay() and file = getNodeFile(node)
+ }
+
+ /** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */
+ overlay[discard_entity]
+ private predicate discardAstNode(@ql_ast_node node) {
+ exists(@file file | discardableAstNode(file, node) and discardFile(file))
+ }
+
/** A class representing `add_expr` nodes. */
class AddExpr extends @ql_add_expr, AstNode {
/** Gets the name of the primary QL class for this element. */
@@ -1318,6 +1346,30 @@ module Dbscheme {
final override string getAPrimaryQlClass() { result = "ReservedWord" }
}
+ /** Gets the file containing the given `node`. */
+ overlay[local]
+ private @file getNodeFile(@dbscheme_ast_node node) {
+ exists(@location_default loc | dbscheme_ast_node_location(node, loc) |
+ locations_default(loc, result, _, _, _, _)
+ )
+ }
+
+ /** Holds if `file` was extracted as part of the overlay database. */
+ overlay[local]
+ private predicate discardFile(@file file) { isOverlay() and file = getNodeFile(_) }
+
+ /** Holds if `node` is in the `file` and is part of the overlay base database. */
+ overlay[local]
+ private predicate discardableAstNode(@file file, @dbscheme_ast_node node) {
+ not isOverlay() and file = getNodeFile(node)
+ }
+
+ /** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */
+ overlay[discard_entity]
+ private predicate discardAstNode(@dbscheme_ast_node node) {
+ exists(@file file | discardableAstNode(file, node) and discardFile(file))
+ }
+
/** A class representing `annotName` tokens. */
class AnnotName extends @dbscheme_token_annot_name, Token {
/** Gets the name of the primary QL class for this element. */
@@ -1654,6 +1706,30 @@ module Blame {
final override string getAPrimaryQlClass() { result = "ReservedWord" }
}
+ /** Gets the file containing the given `node`. */
+ overlay[local]
+ private @file getNodeFile(@blame_ast_node node) {
+ exists(@location_default loc | blame_ast_node_location(node, loc) |
+ locations_default(loc, result, _, _, _, _)
+ )
+ }
+
+ /** Holds if `file` was extracted as part of the overlay database. */
+ overlay[local]
+ private predicate discardFile(@file file) { isOverlay() and file = getNodeFile(_) }
+
+ /** Holds if `node` is in the `file` and is part of the overlay base database. */
+ overlay[local]
+ private predicate discardableAstNode(@file file, @blame_ast_node node) {
+ not isOverlay() and file = getNodeFile(node)
+ }
+
+ /** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */
+ overlay[discard_entity]
+ private predicate discardAstNode(@blame_ast_node node) {
+ exists(@file file | discardableAstNode(file, node) and discardFile(file))
+ }
+
/** A class representing `blame_entry` nodes. */
class BlameEntry extends @blame_blame_entry, AstNode {
/** Gets the name of the primary QL class for this element. */
@@ -1767,6 +1843,30 @@ module JSON {
final override string getAPrimaryQlClass() { result = "ReservedWord" }
}
+ /** Gets the file containing the given `node`. */
+ overlay[local]
+ private @file getNodeFile(@json_ast_node node) {
+ exists(@location_default loc | json_ast_node_location(node, loc) |
+ locations_default(loc, result, _, _, _, _)
+ )
+ }
+
+ /** Holds if `file` was extracted as part of the overlay database. */
+ overlay[local]
+ private predicate discardFile(@file file) { isOverlay() and file = getNodeFile(_) }
+
+ /** Holds if `node` is in the `file` and is part of the overlay base database. */
+ overlay[local]
+ private predicate discardableAstNode(@file file, @json_ast_node node) {
+ not isOverlay() and file = getNodeFile(node)
+ }
+
+ /** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */
+ overlay[discard_entity]
+ private predicate discardAstNode(@json_ast_node node) {
+ exists(@file file | discardableAstNode(file, node) and discardFile(file))
+ }
+
class UnderscoreValue extends @json_underscore_value, AstNode { }
/** A class representing `array` nodes. */
diff --git a/ql/ql/src/ql.dbscheme b/ql/ql/src/ql.dbscheme
index 6b7646b90f91..d2a002084695 100644
--- a/ql/ql/src/ql.dbscheme
+++ b/ql/ql/src/ql.dbscheme
@@ -108,6 +108,12 @@ yaml_locations(unique int locatable: @yaml_locatable ref,
@yaml_locatable = @yaml_node | @yaml_error;
+/*- Database metadata -*/
+databaseMetadata(
+ string metadataKey: string ref,
+ string value: string ref
+);
+
/*- QL dbscheme -*/
@ql_add_expr_left_type = @ql_add_expr | @ql_aggregate | @ql_call_or_unqual_agg_expr | @ql_comp_term | @ql_conjunction | @ql_disjunction | @ql_expr_annotation | @ql_if_term | @ql_implication | @ql_in_expr | @ql_instance_of | @ql_literal | @ql_mul_expr | @ql_negation | @ql_par_expr | @ql_prefix_cast | @ql_qualified_expr | @ql_quantified | @ql_range | @ql_set_literal | @ql_special_call | @ql_super_ref | @ql_unary_expr | @ql_variable
diff --git a/ql/ql/src/ql.dbscheme.stats b/ql/ql/src/ql.dbscheme.stats
index 1e992f7d7a40..8a5866812634 100644
--- a/ql/ql/src/ql.dbscheme.stats
+++ b/ql/ql/src/ql.dbscheme.stats
@@ -22436,5 +22436,41 @@
+
+ databaseMetadata
+ 1
+
+
+ metadataKey
+ 1
+
+
+ value
+ 1
+
+
+
+
+ metadataKey
+ value
+
+
+ 12
+
+
+
+
+
+ value
+ metadataKey
+
+
+ 12
+
+
+
+
+
+
diff --git a/ruby/extractor/src/generator.rs b/ruby/extractor/src/generator.rs
index 1601d2edda68..00d878243aee 100644
--- a/ruby/extractor/src/generator.rs
+++ b/ruby/extractor/src/generator.rs
@@ -28,5 +28,5 @@ pub fn run(options: Options) -> std::io::Result<()> {
},
];
- generate(languages, options.dbscheme, options.library, true)
+ generate(languages, options.dbscheme, options.library)
}
diff --git a/rust/downgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/old.dbscheme b/rust/downgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/old.dbscheme
new file mode 100644
index 000000000000..f72a3d8d021c
--- /dev/null
+++ b/rust/downgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/old.dbscheme
@@ -0,0 +1,3638 @@
+// generated by codegen, do not edit
+
+// from ../shared/tree-sitter-extractor/src/generator/prefix.dbscheme
+/*- Files and folders -*/
+
+/**
+ * The location of an element.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_default(
+ unique int id: @location_default,
+ int file: @file ref,
+ int beginLine: int ref,
+ int beginColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+files(
+ unique int id: @file,
+ string name: string ref
+);
+
+folders(
+ unique int id: @folder,
+ string name: string ref
+);
+
+@container = @file | @folder
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref
+);
+
+/*- Empty location -*/
+
+empty_location(
+ int location: @location_default ref
+);
+
+/*- Source location prefix -*/
+
+/**
+ * The source location of the snapshot.
+ */
+sourceLocationPrefix(string prefix : string ref);
+
+/*- Diagnostic messages -*/
+
+diagnostics(
+ unique int id: @diagnostic,
+ int severity: int ref,
+ string error_tag: string ref,
+ string error_message: string ref,
+ string full_error_message: string ref,
+ int location: @location_default ref
+);
+
+/*- Diagnostic messages: severity -*/
+
+case @diagnostic.severity of
+ 10 = @diagnostic_debug
+| 20 = @diagnostic_info
+| 30 = @diagnostic_warning
+| 40 = @diagnostic_error
+;
+
+/*- YAML -*/
+
+#keyset[parent, idx]
+yaml (unique int id: @yaml_node,
+ int kind: int ref,
+ int parent: @yaml_node_parent ref,
+ int idx: int ref,
+ string tag: string ref,
+ string tostring: string ref);
+
+case @yaml_node.kind of
+ 0 = @yaml_scalar_node
+| 1 = @yaml_mapping_node
+| 2 = @yaml_sequence_node
+| 3 = @yaml_alias_node
+;
+
+@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node;
+
+@yaml_node_parent = @yaml_collection_node | @file;
+
+yaml_anchors (unique int node: @yaml_node ref,
+ string anchor: string ref);
+
+yaml_aliases (unique int alias: @yaml_alias_node ref,
+ string target: string ref);
+
+yaml_scalars (unique int scalar: @yaml_scalar_node ref,
+ int style: int ref,
+ string value: string ref);
+
+yaml_errors (unique int id: @yaml_error,
+ string message: string ref);
+
+yaml_locations(unique int locatable: @yaml_locatable ref,
+ int location: @location_default ref);
+
+@yaml_locatable = @yaml_node | @yaml_error;
+
+/*- Database metadata -*/
+databaseMetadata(
+ string metadataKey: string ref,
+ string value: string ref
+);
+
+
+// from prefix.dbscheme
+#keyset[id]
+locatable_locations(
+ int id: @locatable ref,
+ int location: @location_default ref
+);
+
+
+// from schema
+
+@element =
+ @extractor_step
+| @locatable
+| @named_crate
+| @unextracted
+;
+
+extractor_steps(
+ unique int id: @extractor_step,
+ string action: string ref,
+ int duration_ms: int ref
+);
+
+#keyset[id]
+extractor_step_files(
+ int id: @extractor_step ref,
+ int file: @file ref
+);
+
+@locatable =
+ @ast_node
+| @crate
+;
+
+named_crates(
+ unique int id: @named_crate,
+ string name: string ref,
+ int crate: @crate ref
+);
+
+@unextracted =
+ @missing
+| @unimplemented
+;
+
+@ast_node =
+ @abi
+| @addressable
+| @arg_list
+| @asm_dir_spec
+| @asm_operand
+| @asm_operand_expr
+| @asm_option
+| @asm_piece
+| @asm_reg_spec
+| @assoc_item
+| @assoc_item_list
+| @attr
+| @callable
+| @closure_binder
+| @expr
+| @extern_item
+| @extern_item_list
+| @field_list
+| @format_args_arg
+| @generic_arg
+| @generic_arg_list
+| @generic_param
+| @generic_param_list
+| @item_list
+| @label
+| @let_else
+| @macro_items
+| @match_arm
+| @match_arm_list
+| @match_guard
+| @meta
+| @name
+| @param_base
+| @param_list
+| @parenthesized_arg_list
+| @pat
+| @path
+| @path_segment
+| @rename
+| @resolvable
+| @ret_type_repr
+| @return_type_syntax
+| @source_file
+| @stmt
+| @stmt_list
+| @struct_expr_field
+| @struct_expr_field_list
+| @struct_field
+| @struct_pat_field
+| @struct_pat_field_list
+| @token
+| @token_tree
+| @tuple_field
+| @type_bound
+| @type_bound_list
+| @type_repr
+| @use_bound_generic_arg
+| @use_bound_generic_args
+| @use_tree
+| @use_tree_list
+| @variant_list
+| @visibility
+| @where_clause
+| @where_pred
+;
+
+crates(
+ unique int id: @crate
+);
+
+#keyset[id]
+crate_names(
+ int id: @crate ref,
+ string name: string ref
+);
+
+#keyset[id]
+crate_versions(
+ int id: @crate ref,
+ string version: string ref
+);
+
+#keyset[id, index]
+crate_cfg_options(
+ int id: @crate ref,
+ int index: int ref,
+ string cfg_option: string ref
+);
+
+#keyset[id, index]
+crate_named_dependencies(
+ int id: @crate ref,
+ int index: int ref,
+ int named_dependency: @named_crate ref
+);
+
+missings(
+ unique int id: @missing
+);
+
+unimplementeds(
+ unique int id: @unimplemented
+);
+
+abis(
+ unique int id: @abi
+);
+
+#keyset[id]
+abi_abi_strings(
+ int id: @abi ref,
+ string abi_string: string ref
+);
+
+@addressable =
+ @item
+| @variant
+;
+
+#keyset[id]
+addressable_extended_canonical_paths(
+ int id: @addressable ref,
+ string extended_canonical_path: string ref
+);
+
+#keyset[id]
+addressable_crate_origins(
+ int id: @addressable ref,
+ string crate_origin: string ref
+);
+
+arg_lists(
+ unique int id: @arg_list
+);
+
+#keyset[id, index]
+arg_list_args(
+ int id: @arg_list ref,
+ int index: int ref,
+ int arg: @expr ref
+);
+
+asm_dir_specs(
+ unique int id: @asm_dir_spec
+);
+
+@asm_operand =
+ @asm_const
+| @asm_label
+| @asm_reg_operand
+| @asm_sym
+;
+
+asm_operand_exprs(
+ unique int id: @asm_operand_expr
+);
+
+#keyset[id]
+asm_operand_expr_in_exprs(
+ int id: @asm_operand_expr ref,
+ int in_expr: @expr ref
+);
+
+#keyset[id]
+asm_operand_expr_out_exprs(
+ int id: @asm_operand_expr ref,
+ int out_expr: @expr ref
+);
+
+asm_options(
+ unique int id: @asm_option
+);
+
+#keyset[id]
+asm_option_is_raw(
+ int id: @asm_option ref
+);
+
+@asm_piece =
+ @asm_clobber_abi
+| @asm_operand_named
+| @asm_options_list
+;
+
+asm_reg_specs(
+ unique int id: @asm_reg_spec
+);
+
+#keyset[id]
+asm_reg_spec_identifiers(
+ int id: @asm_reg_spec ref,
+ int identifier: @name_ref ref
+);
+
+@assoc_item =
+ @const
+| @function
+| @macro_call
+| @type_alias
+;
+
+assoc_item_lists(
+ unique int id: @assoc_item_list
+);
+
+#keyset[id, index]
+assoc_item_list_assoc_items(
+ int id: @assoc_item_list ref,
+ int index: int ref,
+ int assoc_item: @assoc_item ref
+);
+
+#keyset[id, index]
+assoc_item_list_attrs(
+ int id: @assoc_item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+attrs(
+ unique int id: @attr
+);
+
+#keyset[id]
+attr_meta(
+ int id: @attr ref,
+ int meta: @meta ref
+);
+
+@callable =
+ @closure_expr
+| @function
+;
+
+#keyset[id]
+callable_param_lists(
+ int id: @callable ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id, index]
+callable_attrs(
+ int id: @callable ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+closure_binders(
+ unique int id: @closure_binder
+);
+
+#keyset[id]
+closure_binder_generic_param_lists(
+ int id: @closure_binder ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+@expr =
+ @array_expr_internal
+| @asm_expr
+| @await_expr
+| @become_expr
+| @binary_expr
+| @break_expr
+| @call_expr_base
+| @cast_expr
+| @closure_expr
+| @continue_expr
+| @field_expr
+| @format_args_expr
+| @if_expr
+| @index_expr
+| @labelable_expr
+| @let_expr
+| @literal_expr
+| @macro_block_expr
+| @macro_expr
+| @match_expr
+| @offset_of_expr
+| @paren_expr
+| @path_expr_base
+| @prefix_expr
+| @range_expr
+| @ref_expr
+| @return_expr
+| @struct_expr
+| @try_expr
+| @tuple_expr
+| @underscore_expr
+| @yeet_expr
+| @yield_expr
+;
+
+@extern_item =
+ @function
+| @macro_call
+| @static
+| @type_alias
+;
+
+extern_item_lists(
+ unique int id: @extern_item_list
+);
+
+#keyset[id, index]
+extern_item_list_attrs(
+ int id: @extern_item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+extern_item_list_extern_items(
+ int id: @extern_item_list ref,
+ int index: int ref,
+ int extern_item: @extern_item ref
+);
+
+@field_list =
+ @struct_field_list
+| @tuple_field_list
+;
+
+format_args_args(
+ unique int id: @format_args_arg
+);
+
+#keyset[id]
+format_args_arg_exprs(
+ int id: @format_args_arg ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+format_args_arg_names(
+ int id: @format_args_arg ref,
+ int name: @name ref
+);
+
+@generic_arg =
+ @assoc_type_arg
+| @const_arg
+| @lifetime_arg
+| @type_arg
+;
+
+generic_arg_lists(
+ unique int id: @generic_arg_list
+);
+
+#keyset[id, index]
+generic_arg_list_generic_args(
+ int id: @generic_arg_list ref,
+ int index: int ref,
+ int generic_arg: @generic_arg ref
+);
+
+@generic_param =
+ @const_param
+| @lifetime_param
+| @type_param
+;
+
+generic_param_lists(
+ unique int id: @generic_param_list
+);
+
+#keyset[id, index]
+generic_param_list_generic_params(
+ int id: @generic_param_list ref,
+ int index: int ref,
+ int generic_param: @generic_param ref
+);
+
+item_lists(
+ unique int id: @item_list
+);
+
+#keyset[id, index]
+item_list_attrs(
+ int id: @item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+item_list_items(
+ int id: @item_list ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+labels(
+ unique int id: @label
+);
+
+#keyset[id]
+label_lifetimes(
+ int id: @label ref,
+ int lifetime: @lifetime ref
+);
+
+let_elses(
+ unique int id: @let_else
+);
+
+#keyset[id]
+let_else_block_exprs(
+ int id: @let_else ref,
+ int block_expr: @block_expr ref
+);
+
+macro_items(
+ unique int id: @macro_items
+);
+
+#keyset[id, index]
+macro_items_items(
+ int id: @macro_items ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+match_arms(
+ unique int id: @match_arm
+);
+
+#keyset[id, index]
+match_arm_attrs(
+ int id: @match_arm ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+match_arm_exprs(
+ int id: @match_arm ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+match_arm_guards(
+ int id: @match_arm ref,
+ int guard: @match_guard ref
+);
+
+#keyset[id]
+match_arm_pats(
+ int id: @match_arm ref,
+ int pat: @pat ref
+);
+
+match_arm_lists(
+ unique int id: @match_arm_list
+);
+
+#keyset[id, index]
+match_arm_list_arms(
+ int id: @match_arm_list ref,
+ int index: int ref,
+ int arm: @match_arm ref
+);
+
+#keyset[id, index]
+match_arm_list_attrs(
+ int id: @match_arm_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+match_guards(
+ unique int id: @match_guard
+);
+
+#keyset[id]
+match_guard_conditions(
+ int id: @match_guard ref,
+ int condition: @expr ref
+);
+
+meta(
+ unique int id: @meta
+);
+
+#keyset[id]
+meta_exprs(
+ int id: @meta ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+meta_is_unsafe(
+ int id: @meta ref
+);
+
+#keyset[id]
+meta_paths(
+ int id: @meta ref,
+ int path: @path ref
+);
+
+#keyset[id]
+meta_token_trees(
+ int id: @meta ref,
+ int token_tree: @token_tree ref
+);
+
+names(
+ unique int id: @name
+);
+
+#keyset[id]
+name_texts(
+ int id: @name ref,
+ string text: string ref
+);
+
+@param_base =
+ @param
+| @self_param
+;
+
+#keyset[id, index]
+param_base_attrs(
+ int id: @param_base ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+param_base_type_reprs(
+ int id: @param_base ref,
+ int type_repr: @type_repr ref
+);
+
+param_lists(
+ unique int id: @param_list
+);
+
+#keyset[id, index]
+param_list_params(
+ int id: @param_list ref,
+ int index: int ref,
+ int param: @param ref
+);
+
+#keyset[id]
+param_list_self_params(
+ int id: @param_list ref,
+ int self_param: @self_param ref
+);
+
+parenthesized_arg_lists(
+ unique int id: @parenthesized_arg_list
+);
+
+#keyset[id, index]
+parenthesized_arg_list_type_args(
+ int id: @parenthesized_arg_list ref,
+ int index: int ref,
+ int type_arg: @type_arg ref
+);
+
+@pat =
+ @box_pat
+| @const_block_pat
+| @ident_pat
+| @literal_pat
+| @macro_pat
+| @or_pat
+| @paren_pat
+| @path_pat
+| @range_pat
+| @ref_pat
+| @rest_pat
+| @slice_pat
+| @struct_pat
+| @tuple_pat
+| @tuple_struct_pat
+| @wildcard_pat
+;
+
+paths(
+ unique int id: @path
+);
+
+#keyset[id]
+path_qualifiers(
+ int id: @path ref,
+ int qualifier: @path ref
+);
+
+#keyset[id]
+path_segments_(
+ int id: @path ref,
+ int segment: @path_segment ref
+);
+
+path_segments(
+ unique int id: @path_segment
+);
+
+#keyset[id]
+path_segment_generic_arg_lists(
+ int id: @path_segment ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+path_segment_identifiers(
+ int id: @path_segment ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+path_segment_parenthesized_arg_lists(
+ int id: @path_segment ref,
+ int parenthesized_arg_list: @parenthesized_arg_list ref
+);
+
+#keyset[id]
+path_segment_ret_types(
+ int id: @path_segment ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+path_segment_return_type_syntaxes(
+ int id: @path_segment ref,
+ int return_type_syntax: @return_type_syntax ref
+);
+
+#keyset[id]
+path_segment_type_reprs(
+ int id: @path_segment ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+path_segment_trait_type_reprs(
+ int id: @path_segment ref,
+ int trait_type_repr: @path_type_repr ref
+);
+
+renames(
+ unique int id: @rename
+);
+
+#keyset[id]
+rename_names(
+ int id: @rename ref,
+ int name: @name ref
+);
+
+@resolvable =
+ @method_call_expr
+| @path_ast_node
+;
+
+#keyset[id]
+resolvable_resolved_paths(
+ int id: @resolvable ref,
+ string resolved_path: string ref
+);
+
+#keyset[id]
+resolvable_resolved_crate_origins(
+ int id: @resolvable ref,
+ string resolved_crate_origin: string ref
+);
+
+ret_type_reprs(
+ unique int id: @ret_type_repr
+);
+
+#keyset[id]
+ret_type_repr_type_reprs(
+ int id: @ret_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+return_type_syntaxes(
+ unique int id: @return_type_syntax
+);
+
+source_files(
+ unique int id: @source_file
+);
+
+#keyset[id, index]
+source_file_attrs(
+ int id: @source_file ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+source_file_items(
+ int id: @source_file ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+@stmt =
+ @expr_stmt
+| @item
+| @let_stmt
+;
+
+stmt_lists(
+ unique int id: @stmt_list
+);
+
+#keyset[id, index]
+stmt_list_attrs(
+ int id: @stmt_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+stmt_list_statements(
+ int id: @stmt_list ref,
+ int index: int ref,
+ int statement: @stmt ref
+);
+
+#keyset[id]
+stmt_list_tail_exprs(
+ int id: @stmt_list ref,
+ int tail_expr: @expr ref
+);
+
+struct_expr_fields(
+ unique int id: @struct_expr_field
+);
+
+#keyset[id, index]
+struct_expr_field_attrs(
+ int id: @struct_expr_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_expr_field_exprs(
+ int id: @struct_expr_field ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+struct_expr_field_identifiers(
+ int id: @struct_expr_field ref,
+ int identifier: @name_ref ref
+);
+
+struct_expr_field_lists(
+ unique int id: @struct_expr_field_list
+);
+
+#keyset[id, index]
+struct_expr_field_list_attrs(
+ int id: @struct_expr_field_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+struct_expr_field_list_fields(
+ int id: @struct_expr_field_list ref,
+ int index: int ref,
+ int field: @struct_expr_field ref
+);
+
+#keyset[id]
+struct_expr_field_list_spreads(
+ int id: @struct_expr_field_list ref,
+ int spread: @expr ref
+);
+
+struct_fields(
+ unique int id: @struct_field
+);
+
+#keyset[id, index]
+struct_field_attrs(
+ int id: @struct_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_field_defaults(
+ int id: @struct_field ref,
+ int default: @expr ref
+);
+
+#keyset[id]
+struct_field_is_unsafe(
+ int id: @struct_field ref
+);
+
+#keyset[id]
+struct_field_names(
+ int id: @struct_field ref,
+ int name: @name ref
+);
+
+#keyset[id]
+struct_field_type_reprs(
+ int id: @struct_field ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+struct_field_visibilities(
+ int id: @struct_field ref,
+ int visibility: @visibility ref
+);
+
+struct_pat_fields(
+ unique int id: @struct_pat_field
+);
+
+#keyset[id, index]
+struct_pat_field_attrs(
+ int id: @struct_pat_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_pat_field_identifiers(
+ int id: @struct_pat_field ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+struct_pat_field_pats(
+ int id: @struct_pat_field ref,
+ int pat: @pat ref
+);
+
+struct_pat_field_lists(
+ unique int id: @struct_pat_field_list
+);
+
+#keyset[id, index]
+struct_pat_field_list_fields(
+ int id: @struct_pat_field_list ref,
+ int index: int ref,
+ int field: @struct_pat_field ref
+);
+
+#keyset[id]
+struct_pat_field_list_rest_pats(
+ int id: @struct_pat_field_list ref,
+ int rest_pat: @rest_pat ref
+);
+
+@token =
+ @comment
+;
+
+token_trees(
+ unique int id: @token_tree
+);
+
+tuple_fields(
+ unique int id: @tuple_field
+);
+
+#keyset[id, index]
+tuple_field_attrs(
+ int id: @tuple_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+tuple_field_type_reprs(
+ int id: @tuple_field ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+tuple_field_visibilities(
+ int id: @tuple_field ref,
+ int visibility: @visibility ref
+);
+
+type_bounds(
+ unique int id: @type_bound
+);
+
+#keyset[id]
+type_bound_is_async(
+ int id: @type_bound ref
+);
+
+#keyset[id]
+type_bound_is_const(
+ int id: @type_bound ref
+);
+
+#keyset[id]
+type_bound_lifetimes(
+ int id: @type_bound ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+type_bound_type_reprs(
+ int id: @type_bound ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+type_bound_use_bound_generic_args(
+ int id: @type_bound ref,
+ int use_bound_generic_args: @use_bound_generic_args ref
+);
+
+type_bound_lists(
+ unique int id: @type_bound_list
+);
+
+#keyset[id, index]
+type_bound_list_bounds(
+ int id: @type_bound_list ref,
+ int index: int ref,
+ int bound: @type_bound ref
+);
+
+@type_repr =
+ @array_type_repr
+| @dyn_trait_type_repr
+| @fn_ptr_type_repr
+| @for_type_repr
+| @impl_trait_type_repr
+| @infer_type_repr
+| @macro_type_repr
+| @never_type_repr
+| @paren_type_repr
+| @path_type_repr
+| @ptr_type_repr
+| @ref_type_repr
+| @slice_type_repr
+| @tuple_type_repr
+;
+
+@use_bound_generic_arg =
+ @lifetime
+| @name_ref
+;
+
+use_bound_generic_args(
+ unique int id: @use_bound_generic_args
+);
+
+#keyset[id, index]
+use_bound_generic_args_use_bound_generic_args(
+ int id: @use_bound_generic_args ref,
+ int index: int ref,
+ int use_bound_generic_arg: @use_bound_generic_arg ref
+);
+
+use_trees(
+ unique int id: @use_tree
+);
+
+#keyset[id]
+use_tree_is_glob(
+ int id: @use_tree ref
+);
+
+#keyset[id]
+use_tree_paths(
+ int id: @use_tree ref,
+ int path: @path ref
+);
+
+#keyset[id]
+use_tree_renames(
+ int id: @use_tree ref,
+ int rename: @rename ref
+);
+
+#keyset[id]
+use_tree_use_tree_lists(
+ int id: @use_tree ref,
+ int use_tree_list: @use_tree_list ref
+);
+
+use_tree_lists(
+ unique int id: @use_tree_list
+);
+
+#keyset[id, index]
+use_tree_list_use_trees(
+ int id: @use_tree_list ref,
+ int index: int ref,
+ int use_tree: @use_tree ref
+);
+
+variant_lists(
+ unique int id: @variant_list
+);
+
+#keyset[id, index]
+variant_list_variants(
+ int id: @variant_list ref,
+ int index: int ref,
+ int variant: @variant ref
+);
+
+visibilities(
+ unique int id: @visibility
+);
+
+#keyset[id]
+visibility_paths(
+ int id: @visibility ref,
+ int path: @path ref
+);
+
+where_clauses(
+ unique int id: @where_clause
+);
+
+#keyset[id, index]
+where_clause_predicates(
+ int id: @where_clause ref,
+ int index: int ref,
+ int predicate: @where_pred ref
+);
+
+where_preds(
+ unique int id: @where_pred
+);
+
+#keyset[id]
+where_pred_generic_param_lists(
+ int id: @where_pred ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+where_pred_lifetimes(
+ int id: @where_pred ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+where_pred_type_reprs(
+ int id: @where_pred ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+where_pred_type_bound_lists(
+ int id: @where_pred ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+array_expr_internals(
+ unique int id: @array_expr_internal
+);
+
+#keyset[id, index]
+array_expr_internal_attrs(
+ int id: @array_expr_internal ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+array_expr_internal_exprs(
+ int id: @array_expr_internal ref,
+ int index: int ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+array_expr_internal_is_semicolon(
+ int id: @array_expr_internal ref
+);
+
+array_type_reprs(
+ unique int id: @array_type_repr
+);
+
+#keyset[id]
+array_type_repr_const_args(
+ int id: @array_type_repr ref,
+ int const_arg: @const_arg ref
+);
+
+#keyset[id]
+array_type_repr_element_type_reprs(
+ int id: @array_type_repr ref,
+ int element_type_repr: @type_repr ref
+);
+
+asm_clobber_abis(
+ unique int id: @asm_clobber_abi
+);
+
+asm_consts(
+ unique int id: @asm_const
+);
+
+#keyset[id]
+asm_const_exprs(
+ int id: @asm_const ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+asm_const_is_const(
+ int id: @asm_const ref
+);
+
+asm_exprs(
+ unique int id: @asm_expr
+);
+
+#keyset[id, index]
+asm_expr_asm_pieces(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int asm_piece: @asm_piece ref
+);
+
+#keyset[id, index]
+asm_expr_attrs(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+asm_expr_templates(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int template: @expr ref
+);
+
+asm_labels(
+ unique int id: @asm_label
+);
+
+#keyset[id]
+asm_label_block_exprs(
+ int id: @asm_label ref,
+ int block_expr: @block_expr ref
+);
+
+asm_operand_nameds(
+ unique int id: @asm_operand_named
+);
+
+#keyset[id]
+asm_operand_named_asm_operands(
+ int id: @asm_operand_named ref,
+ int asm_operand: @asm_operand ref
+);
+
+#keyset[id]
+asm_operand_named_names(
+ int id: @asm_operand_named ref,
+ int name: @name ref
+);
+
+asm_options_lists(
+ unique int id: @asm_options_list
+);
+
+#keyset[id, index]
+asm_options_list_asm_options(
+ int id: @asm_options_list ref,
+ int index: int ref,
+ int asm_option: @asm_option ref
+);
+
+asm_reg_operands(
+ unique int id: @asm_reg_operand
+);
+
+#keyset[id]
+asm_reg_operand_asm_dir_specs(
+ int id: @asm_reg_operand ref,
+ int asm_dir_spec: @asm_dir_spec ref
+);
+
+#keyset[id]
+asm_reg_operand_asm_operand_exprs(
+ int id: @asm_reg_operand ref,
+ int asm_operand_expr: @asm_operand_expr ref
+);
+
+#keyset[id]
+asm_reg_operand_asm_reg_specs(
+ int id: @asm_reg_operand ref,
+ int asm_reg_spec: @asm_reg_spec ref
+);
+
+asm_syms(
+ unique int id: @asm_sym
+);
+
+#keyset[id]
+asm_sym_paths(
+ int id: @asm_sym ref,
+ int path: @path ref
+);
+
+assoc_type_args(
+ unique int id: @assoc_type_arg
+);
+
+#keyset[id]
+assoc_type_arg_const_args(
+ int id: @assoc_type_arg ref,
+ int const_arg: @const_arg ref
+);
+
+#keyset[id]
+assoc_type_arg_generic_arg_lists(
+ int id: @assoc_type_arg ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+assoc_type_arg_identifiers(
+ int id: @assoc_type_arg ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+assoc_type_arg_param_lists(
+ int id: @assoc_type_arg ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id]
+assoc_type_arg_ret_types(
+ int id: @assoc_type_arg ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+assoc_type_arg_return_type_syntaxes(
+ int id: @assoc_type_arg ref,
+ int return_type_syntax: @return_type_syntax ref
+);
+
+#keyset[id]
+assoc_type_arg_type_reprs(
+ int id: @assoc_type_arg ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+assoc_type_arg_type_bound_lists(
+ int id: @assoc_type_arg ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+await_exprs(
+ unique int id: @await_expr
+);
+
+#keyset[id, index]
+await_expr_attrs(
+ int id: @await_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+await_expr_exprs(
+ int id: @await_expr ref,
+ int expr: @expr ref
+);
+
+become_exprs(
+ unique int id: @become_expr
+);
+
+#keyset[id, index]
+become_expr_attrs(
+ int id: @become_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+become_expr_exprs(
+ int id: @become_expr ref,
+ int expr: @expr ref
+);
+
+binary_exprs(
+ unique int id: @binary_expr
+);
+
+#keyset[id, index]
+binary_expr_attrs(
+ int id: @binary_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+binary_expr_lhs(
+ int id: @binary_expr ref,
+ int lhs: @expr ref
+);
+
+#keyset[id]
+binary_expr_operator_names(
+ int id: @binary_expr ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+binary_expr_rhs(
+ int id: @binary_expr ref,
+ int rhs: @expr ref
+);
+
+box_pats(
+ unique int id: @box_pat
+);
+
+#keyset[id]
+box_pat_pats(
+ int id: @box_pat ref,
+ int pat: @pat ref
+);
+
+break_exprs(
+ unique int id: @break_expr
+);
+
+#keyset[id, index]
+break_expr_attrs(
+ int id: @break_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+break_expr_exprs(
+ int id: @break_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+break_expr_lifetimes(
+ int id: @break_expr ref,
+ int lifetime: @lifetime ref
+);
+
+@call_expr_base =
+ @call_expr
+| @method_call_expr
+;
+
+#keyset[id]
+call_expr_base_arg_lists(
+ int id: @call_expr_base ref,
+ int arg_list: @arg_list ref
+);
+
+#keyset[id, index]
+call_expr_base_attrs(
+ int id: @call_expr_base ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+cast_exprs(
+ unique int id: @cast_expr
+);
+
+#keyset[id, index]
+cast_expr_attrs(
+ int id: @cast_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+cast_expr_exprs(
+ int id: @cast_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+cast_expr_type_reprs(
+ int id: @cast_expr ref,
+ int type_repr: @type_repr ref
+);
+
+closure_exprs(
+ unique int id: @closure_expr
+);
+
+#keyset[id]
+closure_expr_bodies(
+ int id: @closure_expr ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+closure_expr_closure_binders(
+ int id: @closure_expr ref,
+ int closure_binder: @closure_binder ref
+);
+
+#keyset[id]
+closure_expr_is_async(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_const(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_gen(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_move(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_static(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_ret_types(
+ int id: @closure_expr ref,
+ int ret_type: @ret_type_repr ref
+);
+
+comments(
+ unique int id: @comment,
+ int parent: @ast_node ref,
+ string text: string ref
+);
+
+const_args(
+ unique int id: @const_arg
+);
+
+#keyset[id]
+const_arg_exprs(
+ int id: @const_arg ref,
+ int expr: @expr ref
+);
+
+const_block_pats(
+ unique int id: @const_block_pat
+);
+
+#keyset[id]
+const_block_pat_block_exprs(
+ int id: @const_block_pat ref,
+ int block_expr: @block_expr ref
+);
+
+#keyset[id]
+const_block_pat_is_const(
+ int id: @const_block_pat ref
+);
+
+const_params(
+ unique int id: @const_param
+);
+
+#keyset[id, index]
+const_param_attrs(
+ int id: @const_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+const_param_default_vals(
+ int id: @const_param ref,
+ int default_val: @const_arg ref
+);
+
+#keyset[id]
+const_param_is_const(
+ int id: @const_param ref
+);
+
+#keyset[id]
+const_param_names(
+ int id: @const_param ref,
+ int name: @name ref
+);
+
+#keyset[id]
+const_param_type_reprs(
+ int id: @const_param ref,
+ int type_repr: @type_repr ref
+);
+
+continue_exprs(
+ unique int id: @continue_expr
+);
+
+#keyset[id, index]
+continue_expr_attrs(
+ int id: @continue_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+continue_expr_lifetimes(
+ int id: @continue_expr ref,
+ int lifetime: @lifetime ref
+);
+
+dyn_trait_type_reprs(
+ unique int id: @dyn_trait_type_repr
+);
+
+#keyset[id]
+dyn_trait_type_repr_type_bound_lists(
+ int id: @dyn_trait_type_repr ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+expr_stmts(
+ unique int id: @expr_stmt
+);
+
+#keyset[id]
+expr_stmt_exprs(
+ int id: @expr_stmt ref,
+ int expr: @expr ref
+);
+
+field_exprs(
+ unique int id: @field_expr
+);
+
+#keyset[id, index]
+field_expr_attrs(
+ int id: @field_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+field_expr_containers(
+ int id: @field_expr ref,
+ int container: @expr ref
+);
+
+#keyset[id]
+field_expr_identifiers(
+ int id: @field_expr ref,
+ int identifier: @name_ref ref
+);
+
+fn_ptr_type_reprs(
+ unique int id: @fn_ptr_type_repr
+);
+
+#keyset[id]
+fn_ptr_type_repr_abis(
+ int id: @fn_ptr_type_repr ref,
+ int abi: @abi ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_async(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_const(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_unsafe(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_param_lists(
+ int id: @fn_ptr_type_repr ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_ret_types(
+ int id: @fn_ptr_type_repr ref,
+ int ret_type: @ret_type_repr ref
+);
+
+for_type_reprs(
+ unique int id: @for_type_repr
+);
+
+#keyset[id]
+for_type_repr_generic_param_lists(
+ int id: @for_type_repr ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+for_type_repr_type_reprs(
+ int id: @for_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+format_args_exprs(
+ unique int id: @format_args_expr
+);
+
+#keyset[id, index]
+format_args_expr_args(
+ int id: @format_args_expr ref,
+ int index: int ref,
+ int arg: @format_args_arg ref
+);
+
+#keyset[id, index]
+format_args_expr_attrs(
+ int id: @format_args_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+format_args_expr_templates(
+ int id: @format_args_expr ref,
+ int template: @expr ref
+);
+
+ident_pats(
+ unique int id: @ident_pat
+);
+
+#keyset[id, index]
+ident_pat_attrs(
+ int id: @ident_pat ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+ident_pat_is_mut(
+ int id: @ident_pat ref
+);
+
+#keyset[id]
+ident_pat_is_ref(
+ int id: @ident_pat ref
+);
+
+#keyset[id]
+ident_pat_names(
+ int id: @ident_pat ref,
+ int name: @name ref
+);
+
+#keyset[id]
+ident_pat_pats(
+ int id: @ident_pat ref,
+ int pat: @pat ref
+);
+
+if_exprs(
+ unique int id: @if_expr
+);
+
+#keyset[id, index]
+if_expr_attrs(
+ int id: @if_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+if_expr_conditions(
+ int id: @if_expr ref,
+ int condition: @expr ref
+);
+
+#keyset[id]
+if_expr_elses(
+ int id: @if_expr ref,
+ int else: @expr ref
+);
+
+#keyset[id]
+if_expr_thens(
+ int id: @if_expr ref,
+ int then: @block_expr ref
+);
+
+impl_trait_type_reprs(
+ unique int id: @impl_trait_type_repr
+);
+
+#keyset[id]
+impl_trait_type_repr_type_bound_lists(
+ int id: @impl_trait_type_repr ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+index_exprs(
+ unique int id: @index_expr
+);
+
+#keyset[id, index]
+index_expr_attrs(
+ int id: @index_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+index_expr_bases(
+ int id: @index_expr ref,
+ int base: @expr ref
+);
+
+#keyset[id]
+index_expr_indices(
+ int id: @index_expr ref,
+ int index: @expr ref
+);
+
+infer_type_reprs(
+ unique int id: @infer_type_repr
+);
+
+@item =
+ @adt
+| @const
+| @extern_block
+| @extern_crate
+| @function
+| @impl
+| @macro_call
+| @macro_def
+| @macro_rules
+| @module
+| @static
+| @trait
+| @trait_alias
+| @type_alias
+| @use
+;
+
+#keyset[id]
+item_attribute_macro_expansions(
+ int id: @item ref,
+ int attribute_macro_expansion: @macro_items ref
+);
+
+@labelable_expr =
+ @block_expr
+| @looping_expr
+;
+
+#keyset[id]
+labelable_expr_labels(
+ int id: @labelable_expr ref,
+ int label: @label ref
+);
+
+let_exprs(
+ unique int id: @let_expr
+);
+
+#keyset[id, index]
+let_expr_attrs(
+ int id: @let_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+let_expr_scrutinees(
+ int id: @let_expr ref,
+ int scrutinee: @expr ref
+);
+
+#keyset[id]
+let_expr_pats(
+ int id: @let_expr ref,
+ int pat: @pat ref
+);
+
+let_stmts(
+ unique int id: @let_stmt
+);
+
+#keyset[id, index]
+let_stmt_attrs(
+ int id: @let_stmt ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+let_stmt_initializers(
+ int id: @let_stmt ref,
+ int initializer: @expr ref
+);
+
+#keyset[id]
+let_stmt_let_elses(
+ int id: @let_stmt ref,
+ int let_else: @let_else ref
+);
+
+#keyset[id]
+let_stmt_pats(
+ int id: @let_stmt ref,
+ int pat: @pat ref
+);
+
+#keyset[id]
+let_stmt_type_reprs(
+ int id: @let_stmt ref,
+ int type_repr: @type_repr ref
+);
+
+lifetimes(
+ unique int id: @lifetime
+);
+
+#keyset[id]
+lifetime_texts(
+ int id: @lifetime ref,
+ string text: string ref
+);
+
+lifetime_args(
+ unique int id: @lifetime_arg
+);
+
+#keyset[id]
+lifetime_arg_lifetimes(
+ int id: @lifetime_arg ref,
+ int lifetime: @lifetime ref
+);
+
+lifetime_params(
+ unique int id: @lifetime_param
+);
+
+#keyset[id, index]
+lifetime_param_attrs(
+ int id: @lifetime_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+lifetime_param_lifetimes(
+ int id: @lifetime_param ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+lifetime_param_type_bound_lists(
+ int id: @lifetime_param ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+literal_exprs(
+ unique int id: @literal_expr
+);
+
+#keyset[id, index]
+literal_expr_attrs(
+ int id: @literal_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+literal_expr_text_values(
+ int id: @literal_expr ref,
+ string text_value: string ref
+);
+
+literal_pats(
+ unique int id: @literal_pat
+);
+
+#keyset[id]
+literal_pat_literals(
+ int id: @literal_pat ref,
+ int literal: @literal_expr ref
+);
+
+macro_block_exprs(
+ unique int id: @macro_block_expr
+);
+
+#keyset[id]
+macro_block_expr_tail_exprs(
+ int id: @macro_block_expr ref,
+ int tail_expr: @expr ref
+);
+
+#keyset[id, index]
+macro_block_expr_statements(
+ int id: @macro_block_expr ref,
+ int index: int ref,
+ int statement: @stmt ref
+);
+
+macro_exprs(
+ unique int id: @macro_expr
+);
+
+#keyset[id]
+macro_expr_macro_calls(
+ int id: @macro_expr ref,
+ int macro_call: @macro_call ref
+);
+
+macro_pats(
+ unique int id: @macro_pat
+);
+
+#keyset[id]
+macro_pat_macro_calls(
+ int id: @macro_pat ref,
+ int macro_call: @macro_call ref
+);
+
+macro_type_reprs(
+ unique int id: @macro_type_repr
+);
+
+#keyset[id]
+macro_type_repr_macro_calls(
+ int id: @macro_type_repr ref,
+ int macro_call: @macro_call ref
+);
+
+match_exprs(
+ unique int id: @match_expr
+);
+
+#keyset[id, index]
+match_expr_attrs(
+ int id: @match_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+match_expr_scrutinees(
+ int id: @match_expr ref,
+ int scrutinee: @expr ref
+);
+
+#keyset[id]
+match_expr_match_arm_lists(
+ int id: @match_expr ref,
+ int match_arm_list: @match_arm_list ref
+);
+
+name_refs(
+ unique int id: @name_ref
+);
+
+#keyset[id]
+name_ref_texts(
+ int id: @name_ref ref,
+ string text: string ref
+);
+
+never_type_reprs(
+ unique int id: @never_type_repr
+);
+
+offset_of_exprs(
+ unique int id: @offset_of_expr
+);
+
+#keyset[id, index]
+offset_of_expr_attrs(
+ int id: @offset_of_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+offset_of_expr_fields(
+ int id: @offset_of_expr ref,
+ int index: int ref,
+ int field: @name_ref ref
+);
+
+#keyset[id]
+offset_of_expr_type_reprs(
+ int id: @offset_of_expr ref,
+ int type_repr: @type_repr ref
+);
+
+or_pats(
+ unique int id: @or_pat
+);
+
+#keyset[id, index]
+or_pat_pats(
+ int id: @or_pat ref,
+ int index: int ref,
+ int pat: @pat ref
+);
+
+params(
+ unique int id: @param
+);
+
+#keyset[id]
+param_pats(
+ int id: @param ref,
+ int pat: @pat ref
+);
+
+paren_exprs(
+ unique int id: @paren_expr
+);
+
+#keyset[id, index]
+paren_expr_attrs(
+ int id: @paren_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+paren_expr_exprs(
+ int id: @paren_expr ref,
+ int expr: @expr ref
+);
+
+paren_pats(
+ unique int id: @paren_pat
+);
+
+#keyset[id]
+paren_pat_pats(
+ int id: @paren_pat ref,
+ int pat: @pat ref
+);
+
+paren_type_reprs(
+ unique int id: @paren_type_repr
+);
+
+#keyset[id]
+paren_type_repr_type_reprs(
+ int id: @paren_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+@path_ast_node =
+ @path_expr
+| @path_pat
+| @struct_expr
+| @struct_pat
+| @tuple_struct_pat
+;
+
+#keyset[id]
+path_ast_node_paths(
+ int id: @path_ast_node ref,
+ int path: @path ref
+);
+
+@path_expr_base =
+ @path_expr
+;
+
+path_type_reprs(
+ unique int id: @path_type_repr
+);
+
+#keyset[id]
+path_type_repr_paths(
+ int id: @path_type_repr ref,
+ int path: @path ref
+);
+
+prefix_exprs(
+ unique int id: @prefix_expr
+);
+
+#keyset[id, index]
+prefix_expr_attrs(
+ int id: @prefix_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+prefix_expr_exprs(
+ int id: @prefix_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+prefix_expr_operator_names(
+ int id: @prefix_expr ref,
+ string operator_name: string ref
+);
+
+ptr_type_reprs(
+ unique int id: @ptr_type_repr
+);
+
+#keyset[id]
+ptr_type_repr_is_const(
+ int id: @ptr_type_repr ref
+);
+
+#keyset[id]
+ptr_type_repr_is_mut(
+ int id: @ptr_type_repr ref
+);
+
+#keyset[id]
+ptr_type_repr_type_reprs(
+ int id: @ptr_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+range_exprs(
+ unique int id: @range_expr
+);
+
+#keyset[id, index]
+range_expr_attrs(
+ int id: @range_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+range_expr_ends(
+ int id: @range_expr ref,
+ int end: @expr ref
+);
+
+#keyset[id]
+range_expr_operator_names(
+ int id: @range_expr ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+range_expr_starts(
+ int id: @range_expr ref,
+ int start: @expr ref
+);
+
+range_pats(
+ unique int id: @range_pat
+);
+
+#keyset[id]
+range_pat_ends(
+ int id: @range_pat ref,
+ int end: @pat ref
+);
+
+#keyset[id]
+range_pat_operator_names(
+ int id: @range_pat ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+range_pat_starts(
+ int id: @range_pat ref,
+ int start: @pat ref
+);
+
+ref_exprs(
+ unique int id: @ref_expr
+);
+
+#keyset[id, index]
+ref_expr_attrs(
+ int id: @ref_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+ref_expr_exprs(
+ int id: @ref_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+ref_expr_is_const(
+ int id: @ref_expr ref
+);
+
+#keyset[id]
+ref_expr_is_mut(
+ int id: @ref_expr ref
+);
+
+#keyset[id]
+ref_expr_is_raw(
+ int id: @ref_expr ref
+);
+
+ref_pats(
+ unique int id: @ref_pat
+);
+
+#keyset[id]
+ref_pat_is_mut(
+ int id: @ref_pat ref
+);
+
+#keyset[id]
+ref_pat_pats(
+ int id: @ref_pat ref,
+ int pat: @pat ref
+);
+
+ref_type_reprs(
+ unique int id: @ref_type_repr
+);
+
+#keyset[id]
+ref_type_repr_is_mut(
+ int id: @ref_type_repr ref
+);
+
+#keyset[id]
+ref_type_repr_lifetimes(
+ int id: @ref_type_repr ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+ref_type_repr_type_reprs(
+ int id: @ref_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+rest_pats(
+ unique int id: @rest_pat
+);
+
+#keyset[id, index]
+rest_pat_attrs(
+ int id: @rest_pat ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+return_exprs(
+ unique int id: @return_expr
+);
+
+#keyset[id, index]
+return_expr_attrs(
+ int id: @return_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+return_expr_exprs(
+ int id: @return_expr ref,
+ int expr: @expr ref
+);
+
+self_params(
+ unique int id: @self_param
+);
+
+#keyset[id]
+self_param_is_ref(
+ int id: @self_param ref
+);
+
+#keyset[id]
+self_param_is_mut(
+ int id: @self_param ref
+);
+
+#keyset[id]
+self_param_lifetimes(
+ int id: @self_param ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+self_param_names(
+ int id: @self_param ref,
+ int name: @name ref
+);
+
+slice_pats(
+ unique int id: @slice_pat
+);
+
+#keyset[id, index]
+slice_pat_pats(
+ int id: @slice_pat ref,
+ int index: int ref,
+ int pat: @pat ref
+);
+
+slice_type_reprs(
+ unique int id: @slice_type_repr
+);
+
+#keyset[id]
+slice_type_repr_type_reprs(
+ int id: @slice_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+struct_field_lists(
+ unique int id: @struct_field_list
+);
+
+#keyset[id, index]
+struct_field_list_fields(
+ int id: @struct_field_list ref,
+ int index: int ref,
+ int field: @struct_field ref
+);
+
+try_exprs(
+ unique int id: @try_expr
+);
+
+#keyset[id, index]
+try_expr_attrs(
+ int id: @try_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+try_expr_exprs(
+ int id: @try_expr ref,
+ int expr: @expr ref
+);
+
+tuple_exprs(
+ unique int id: @tuple_expr
+);
+
+#keyset[id, index]
+tuple_expr_attrs(
+ int id: @tuple_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+tuple_expr_fields(
+ int id: @tuple_expr ref,
+ int index: int ref,
+ int field: @expr ref
+);
+
+tuple_field_lists(
+ unique int id: @tuple_field_list
+);
+
+#keyset[id, index]
+tuple_field_list_fields(
+ int id: @tuple_field_list ref,
+ int index: int ref,
+ int field: @tuple_field ref
+);
+
+tuple_pats(
+ unique int id: @tuple_pat
+);
+
+#keyset[id, index]
+tuple_pat_fields(
+ int id: @tuple_pat ref,
+ int index: int ref,
+ int field: @pat ref
+);
+
+tuple_type_reprs(
+ unique int id: @tuple_type_repr
+);
+
+#keyset[id, index]
+tuple_type_repr_fields(
+ int id: @tuple_type_repr ref,
+ int index: int ref,
+ int field: @type_repr ref
+);
+
+type_args(
+ unique int id: @type_arg
+);
+
+#keyset[id]
+type_arg_type_reprs(
+ int id: @type_arg ref,
+ int type_repr: @type_repr ref
+);
+
+type_params(
+ unique int id: @type_param
+);
+
+#keyset[id, index]
+type_param_attrs(
+ int id: @type_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+type_param_default_types(
+ int id: @type_param ref,
+ int default_type: @type_repr ref
+);
+
+#keyset[id]
+type_param_names(
+ int id: @type_param ref,
+ int name: @name ref
+);
+
+#keyset[id]
+type_param_type_bound_lists(
+ int id: @type_param ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+underscore_exprs(
+ unique int id: @underscore_expr
+);
+
+#keyset[id, index]
+underscore_expr_attrs(
+ int id: @underscore_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+variants(
+ unique int id: @variant
+);
+
+#keyset[id, index]
+variant_attrs(
+ int id: @variant ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+variant_discriminants(
+ int id: @variant ref,
+ int discriminant: @expr ref
+);
+
+#keyset[id]
+variant_field_lists(
+ int id: @variant ref,
+ int field_list: @field_list ref
+);
+
+#keyset[id]
+variant_names(
+ int id: @variant ref,
+ int name: @name ref
+);
+
+#keyset[id]
+variant_visibilities(
+ int id: @variant ref,
+ int visibility: @visibility ref
+);
+
+wildcard_pats(
+ unique int id: @wildcard_pat
+);
+
+yeet_exprs(
+ unique int id: @yeet_expr
+);
+
+#keyset[id, index]
+yeet_expr_attrs(
+ int id: @yeet_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+yeet_expr_exprs(
+ int id: @yeet_expr ref,
+ int expr: @expr ref
+);
+
+yield_exprs(
+ unique int id: @yield_expr
+);
+
+#keyset[id, index]
+yield_expr_attrs(
+ int id: @yield_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+yield_expr_exprs(
+ int id: @yield_expr ref,
+ int expr: @expr ref
+);
+
+@adt =
+ @enum
+| @struct
+| @union
+;
+
+#keyset[id, index]
+adt_derive_macro_expansions(
+ int id: @adt ref,
+ int index: int ref,
+ int derive_macro_expansion: @macro_items ref
+);
+
+block_exprs(
+ unique int id: @block_expr
+);
+
+#keyset[id, index]
+block_expr_attrs(
+ int id: @block_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+block_expr_is_async(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_const(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_gen(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_move(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_try(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_unsafe(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_stmt_lists(
+ int id: @block_expr ref,
+ int stmt_list: @stmt_list ref
+);
+
+call_exprs(
+ unique int id: @call_expr
+);
+
+#keyset[id]
+call_expr_functions(
+ int id: @call_expr ref,
+ int function: @expr ref
+);
+
+consts(
+ unique int id: @const
+);
+
+#keyset[id, index]
+const_attrs(
+ int id: @const ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+const_bodies(
+ int id: @const ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+const_generic_param_lists(
+ int id: @const ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+const_is_const(
+ int id: @const ref
+);
+
+#keyset[id]
+const_is_default(
+ int id: @const ref
+);
+
+#keyset[id]
+const_names(
+ int id: @const ref,
+ int name: @name ref
+);
+
+#keyset[id]
+const_type_reprs(
+ int id: @const ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+const_visibilities(
+ int id: @const ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+const_where_clauses(
+ int id: @const ref,
+ int where_clause: @where_clause ref
+);
+
+#keyset[id]
+const_has_implementation(
+ int id: @const ref
+);
+
+extern_blocks(
+ unique int id: @extern_block
+);
+
+#keyset[id]
+extern_block_abis(
+ int id: @extern_block ref,
+ int abi: @abi ref
+);
+
+#keyset[id, index]
+extern_block_attrs(
+ int id: @extern_block ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+extern_block_extern_item_lists(
+ int id: @extern_block ref,
+ int extern_item_list: @extern_item_list ref
+);
+
+#keyset[id]
+extern_block_is_unsafe(
+ int id: @extern_block ref
+);
+
+extern_crates(
+ unique int id: @extern_crate
+);
+
+#keyset[id, index]
+extern_crate_attrs(
+ int id: @extern_crate ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+extern_crate_identifiers(
+ int id: @extern_crate ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+extern_crate_renames(
+ int id: @extern_crate ref,
+ int rename: @rename ref
+);
+
+#keyset[id]
+extern_crate_visibilities(
+ int id: @extern_crate ref,
+ int visibility: @visibility ref
+);
+
+functions(
+ unique int id: @function
+);
+
+#keyset[id]
+function_abis(
+ int id: @function ref,
+ int abi: @abi ref
+);
+
+#keyset[id]
+function_bodies(
+ int id: @function ref,
+ int body: @block_expr ref
+);
+
+#keyset[id]
+function_generic_param_lists(
+ int id: @function ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+function_is_async(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_const(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_default(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_gen(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_unsafe(
+ int id: @function ref
+);
+
+#keyset[id]
+function_names(
+ int id: @function ref,
+ int name: @name ref
+);
+
+#keyset[id]
+function_ret_types(
+ int id: @function ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+function_visibilities(
+ int id: @function ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+function_where_clauses(
+ int id: @function ref,
+ int where_clause: @where_clause ref
+);
+
+#keyset[id]
+function_has_implementation(
+ int id: @function ref
+);
+
+impls(
+ unique int id: @impl
+);
+
+#keyset[id]
+impl_assoc_item_lists(
+ int id: @impl ref,
+ int assoc_item_list: @assoc_item_list ref
+);
+
+#keyset[id, index]
+impl_attrs(
+ int id: @impl ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+impl_generic_param_lists(
+ int id: @impl ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+impl_is_const(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_is_default(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_is_unsafe(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_self_ties(
+ int id: @impl ref,
+ int self_ty: @type_repr ref
+);
+
+#keyset[id]
+impl_traits(
+ int id: @impl ref,
+ int trait: @type_repr ref
+);
+
+#keyset[id]
+impl_visibilities(
+ int id: @impl ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+impl_where_clauses(
+ int id: @impl ref,
+ int where_clause: @where_clause ref
+);
+
+@looping_expr =
+ @for_expr
+| @loop_expr
+| @while_expr
+;
+
+#keyset[id]
+looping_expr_loop_bodies(
+ int id: @looping_expr ref,
+ int loop_body: @block_expr ref
+);
+
+macro_calls(
+ unique int id: @macro_call
+);
+
+#keyset[id, index]
+macro_call_attrs(
+ int id: @macro_call ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_call_paths(
+ int id: @macro_call ref,
+ int path: @path ref
+);
+
+#keyset[id]
+macro_call_token_trees(
+ int id: @macro_call ref,
+ int token_tree: @token_tree ref
+);
+
+#keyset[id]
+macro_call_macro_call_expansions(
+ int id: @macro_call ref,
+ int macro_call_expansion: @ast_node ref
+);
+
+macro_defs(
+ unique int id: @macro_def
+);
+
+#keyset[id]
+macro_def_args(
+ int id: @macro_def ref,
+ int args: @token_tree ref
+);
+
+#keyset[id, index]
+macro_def_attrs(
+ int id: @macro_def ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_def_bodies(
+ int id: @macro_def ref,
+ int body: @token_tree ref
+);
+
+#keyset[id]
+macro_def_names(
+ int id: @macro_def ref,
+ int name: @name ref
+);
+
+#keyset[id]
+macro_def_visibilities(
+ int id: @macro_def ref,
+ int visibility: @visibility ref
+);
+
+macro_rules(
+ unique int id: @macro_rules
+);
+
+#keyset[id, index]
+macro_rules_attrs(
+ int id: @macro_rules ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_rules_names(
+ int id: @macro_rules ref,
+ int name: @name ref
+);
+
+#keyset[id]
+macro_rules_token_trees(
+ int id: @macro_rules ref,
+ int token_tree: @token_tree ref
+);
+
+#keyset[id]
+macro_rules_visibilities(
+ int id: @macro_rules ref,
+ int visibility: @visibility ref
+);
+
+method_call_exprs(
+ unique int id: @method_call_expr
+);
+
+#keyset[id]
+method_call_expr_generic_arg_lists(
+ int id: @method_call_expr ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+method_call_expr_identifiers(
+ int id: @method_call_expr ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+method_call_expr_receivers(
+ int id: @method_call_expr ref,
+ int receiver: @expr ref
+);
+
+modules(
+ unique int id: @module
+);
+
+#keyset[id, index]
+module_attrs(
+ int id: @module ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+module_item_lists(
+ int id: @module ref,
+ int item_list: @item_list ref
+);
+
+#keyset[id]
+module_names(
+ int id: @module ref,
+ int name: @name ref
+);
+
+#keyset[id]
+module_visibilities(
+ int id: @module ref,
+ int visibility: @visibility ref
+);
+
+path_exprs(
+ unique int id: @path_expr
+);
+
+#keyset[id, index]
+path_expr_attrs(
+ int id: @path_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+path_pats(
+ unique int id: @path_pat
+);
+
+statics(
+ unique int id: @static
+);
+
+#keyset[id, index]
+static_attrs(
+ int id: @static ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+static_bodies(
+ int id: @static ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+static_is_mut(
+ int id: @static ref
+);
+
+#keyset[id]
+static_is_static(
+ int id: @static ref
+);
+
+#keyset[id]
+static_is_unsafe(
+ int id: @static ref
+);
+
+#keyset[id]
+static_names(
+ int id: @static ref,
+ int name: @name ref
+);
+
+#keyset[id]
+static_type_reprs(
+ int id: @static ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+static_visibilities(
+ int id: @static ref,
+ int visibility: @visibility ref
+);
+
+struct_exprs(
+ unique int id: @struct_expr
+);
+
+#keyset[id]
+struct_expr_struct_expr_field_lists(
+ int id: @struct_expr ref,
+ int struct_expr_field_list: @struct_expr_field_list ref
+);
+
+struct_pats(
+ unique int id: @struct_pat
+);
+
+#keyset[id]
+struct_pat_struct_pat_field_lists(
+ int id: @struct_pat ref,
+ int struct_pat_field_list: @struct_pat_field_list ref
+);
+
+traits(
+ unique int id: @trait
+);
+
+#keyset[id]
+trait_assoc_item_lists(
+ int id: @trait ref,
+ int assoc_item_list: @assoc_item_list ref
+);
+
+#keyset[id, index]
+trait_attrs(
+ int id: @trait ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+trait_generic_param_lists(
+ int id: @trait ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+trait_is_auto(
+ int id: @trait ref
+);
+
+#keyset[id]
+trait_is_unsafe(
+ int id: @trait ref
+);
+
+#keyset[id]
+trait_names(
+ int id: @trait ref,
+ int name: @name ref
+);
+
+#keyset[id]
+trait_type_bound_lists(
+ int id: @trait ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+trait_visibilities(
+ int id: @trait ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+trait_where_clauses(
+ int id: @trait ref,
+ int where_clause: @where_clause ref
+);
+
+trait_aliases(
+ unique int id: @trait_alias
+);
+
+#keyset[id, index]
+trait_alias_attrs(
+ int id: @trait_alias ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+trait_alias_generic_param_lists(
+ int id: @trait_alias ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+trait_alias_names(
+ int id: @trait_alias ref,
+ int name: @name ref
+);
+
+#keyset[id]
+trait_alias_type_bound_lists(
+ int id: @trait_alias ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+trait_alias_visibilities(
+ int id: @trait_alias ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+trait_alias_where_clauses(
+ int id: @trait_alias ref,
+ int where_clause: @where_clause ref
+);
+
+tuple_struct_pats(
+ unique int id: @tuple_struct_pat
+);
+
+#keyset[id, index]
+tuple_struct_pat_fields(
+ int id: @tuple_struct_pat ref,
+ int index: int ref,
+ int field: @pat ref
+);
+
+type_aliases(
+ unique int id: @type_alias
+);
+
+#keyset[id, index]
+type_alias_attrs(
+ int id: @type_alias ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+type_alias_generic_param_lists(
+ int id: @type_alias ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+type_alias_is_default(
+ int id: @type_alias ref
+);
+
+#keyset[id]
+type_alias_names(
+ int id: @type_alias ref,
+ int name: @name ref
+);
+
+#keyset[id]
+type_alias_type_reprs(
+ int id: @type_alias ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+type_alias_type_bound_lists(
+ int id: @type_alias ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+type_alias_visibilities(
+ int id: @type_alias ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+type_alias_where_clauses(
+ int id: @type_alias ref,
+ int where_clause: @where_clause ref
+);
+
+uses(
+ unique int id: @use
+);
+
+#keyset[id, index]
+use_attrs(
+ int id: @use ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+use_use_trees(
+ int id: @use ref,
+ int use_tree: @use_tree ref
+);
+
+#keyset[id]
+use_visibilities(
+ int id: @use ref,
+ int visibility: @visibility ref
+);
+
+enums(
+ unique int id: @enum
+);
+
+#keyset[id, index]
+enum_attrs(
+ int id: @enum ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+enum_generic_param_lists(
+ int id: @enum ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+enum_names(
+ int id: @enum ref,
+ int name: @name ref
+);
+
+#keyset[id]
+enum_variant_lists(
+ int id: @enum ref,
+ int variant_list: @variant_list ref
+);
+
+#keyset[id]
+enum_visibilities(
+ int id: @enum ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+enum_where_clauses(
+ int id: @enum ref,
+ int where_clause: @where_clause ref
+);
+
+for_exprs(
+ unique int id: @for_expr
+);
+
+#keyset[id, index]
+for_expr_attrs(
+ int id: @for_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+for_expr_iterables(
+ int id: @for_expr ref,
+ int iterable: @expr ref
+);
+
+#keyset[id]
+for_expr_pats(
+ int id: @for_expr ref,
+ int pat: @pat ref
+);
+
+loop_exprs(
+ unique int id: @loop_expr
+);
+
+#keyset[id, index]
+loop_expr_attrs(
+ int id: @loop_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+structs(
+ unique int id: @struct
+);
+
+#keyset[id, index]
+struct_attrs(
+ int id: @struct ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_field_lists_(
+ int id: @struct ref,
+ int field_list: @field_list ref
+);
+
+#keyset[id]
+struct_generic_param_lists(
+ int id: @struct ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+struct_names(
+ int id: @struct ref,
+ int name: @name ref
+);
+
+#keyset[id]
+struct_visibilities(
+ int id: @struct ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+struct_where_clauses(
+ int id: @struct ref,
+ int where_clause: @where_clause ref
+);
+
+unions(
+ unique int id: @union
+);
+
+#keyset[id, index]
+union_attrs(
+ int id: @union ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+union_generic_param_lists(
+ int id: @union ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+union_names(
+ int id: @union ref,
+ int name: @name ref
+);
+
+#keyset[id]
+union_struct_field_lists(
+ int id: @union ref,
+ int struct_field_list: @struct_field_list ref
+);
+
+#keyset[id]
+union_visibilities(
+ int id: @union ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+union_where_clauses(
+ int id: @union ref,
+ int where_clause: @where_clause ref
+);
+
+while_exprs(
+ unique int id: @while_expr
+);
+
+#keyset[id, index]
+while_expr_attrs(
+ int id: @while_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+while_expr_conditions(
+ int id: @while_expr ref,
+ int condition: @expr ref
+);
diff --git a/rust/downgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/rust.dbscheme b/rust/downgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/rust.dbscheme
new file mode 100644
index 000000000000..e3b3765116ec
--- /dev/null
+++ b/rust/downgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/rust.dbscheme
@@ -0,0 +1,3632 @@
+// generated by codegen, do not edit
+
+// from ../shared/tree-sitter-extractor/src/generator/prefix.dbscheme
+/*- Files and folders -*/
+
+/**
+ * The location of an element.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_default(
+ unique int id: @location_default,
+ int file: @file ref,
+ int beginLine: int ref,
+ int beginColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+files(
+ unique int id: @file,
+ string name: string ref
+);
+
+folders(
+ unique int id: @folder,
+ string name: string ref
+);
+
+@container = @file | @folder
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref
+);
+
+/*- Empty location -*/
+
+empty_location(
+ int location: @location_default ref
+);
+
+/*- Source location prefix -*/
+
+/**
+ * The source location of the snapshot.
+ */
+sourceLocationPrefix(string prefix : string ref);
+
+/*- Diagnostic messages -*/
+
+diagnostics(
+ unique int id: @diagnostic,
+ int severity: int ref,
+ string error_tag: string ref,
+ string error_message: string ref,
+ string full_error_message: string ref,
+ int location: @location_default ref
+);
+
+/*- Diagnostic messages: severity -*/
+
+case @diagnostic.severity of
+ 10 = @diagnostic_debug
+| 20 = @diagnostic_info
+| 30 = @diagnostic_warning
+| 40 = @diagnostic_error
+;
+
+/*- YAML -*/
+
+#keyset[parent, idx]
+yaml (unique int id: @yaml_node,
+ int kind: int ref,
+ int parent: @yaml_node_parent ref,
+ int idx: int ref,
+ string tag: string ref,
+ string tostring: string ref);
+
+case @yaml_node.kind of
+ 0 = @yaml_scalar_node
+| 1 = @yaml_mapping_node
+| 2 = @yaml_sequence_node
+| 3 = @yaml_alias_node
+;
+
+@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node;
+
+@yaml_node_parent = @yaml_collection_node | @file;
+
+yaml_anchors (unique int node: @yaml_node ref,
+ string anchor: string ref);
+
+yaml_aliases (unique int alias: @yaml_alias_node ref,
+ string target: string ref);
+
+yaml_scalars (unique int scalar: @yaml_scalar_node ref,
+ int style: int ref,
+ string value: string ref);
+
+yaml_errors (unique int id: @yaml_error,
+ string message: string ref);
+
+yaml_locations(unique int locatable: @yaml_locatable ref,
+ int location: @location_default ref);
+
+@yaml_locatable = @yaml_node | @yaml_error;
+
+
+// from prefix.dbscheme
+#keyset[id]
+locatable_locations(
+ int id: @locatable ref,
+ int location: @location_default ref
+);
+
+
+// from schema
+
+@element =
+ @extractor_step
+| @locatable
+| @named_crate
+| @unextracted
+;
+
+extractor_steps(
+ unique int id: @extractor_step,
+ string action: string ref,
+ int duration_ms: int ref
+);
+
+#keyset[id]
+extractor_step_files(
+ int id: @extractor_step ref,
+ int file: @file ref
+);
+
+@locatable =
+ @ast_node
+| @crate
+;
+
+named_crates(
+ unique int id: @named_crate,
+ string name: string ref,
+ int crate: @crate ref
+);
+
+@unextracted =
+ @missing
+| @unimplemented
+;
+
+@ast_node =
+ @abi
+| @addressable
+| @arg_list
+| @asm_dir_spec
+| @asm_operand
+| @asm_operand_expr
+| @asm_option
+| @asm_piece
+| @asm_reg_spec
+| @assoc_item
+| @assoc_item_list
+| @attr
+| @callable
+| @closure_binder
+| @expr
+| @extern_item
+| @extern_item_list
+| @field_list
+| @format_args_arg
+| @generic_arg
+| @generic_arg_list
+| @generic_param
+| @generic_param_list
+| @item_list
+| @label
+| @let_else
+| @macro_items
+| @match_arm
+| @match_arm_list
+| @match_guard
+| @meta
+| @name
+| @param_base
+| @param_list
+| @parenthesized_arg_list
+| @pat
+| @path
+| @path_segment
+| @rename
+| @resolvable
+| @ret_type_repr
+| @return_type_syntax
+| @source_file
+| @stmt
+| @stmt_list
+| @struct_expr_field
+| @struct_expr_field_list
+| @struct_field
+| @struct_pat_field
+| @struct_pat_field_list
+| @token
+| @token_tree
+| @tuple_field
+| @type_bound
+| @type_bound_list
+| @type_repr
+| @use_bound_generic_arg
+| @use_bound_generic_args
+| @use_tree
+| @use_tree_list
+| @variant_list
+| @visibility
+| @where_clause
+| @where_pred
+;
+
+crates(
+ unique int id: @crate
+);
+
+#keyset[id]
+crate_names(
+ int id: @crate ref,
+ string name: string ref
+);
+
+#keyset[id]
+crate_versions(
+ int id: @crate ref,
+ string version: string ref
+);
+
+#keyset[id, index]
+crate_cfg_options(
+ int id: @crate ref,
+ int index: int ref,
+ string cfg_option: string ref
+);
+
+#keyset[id, index]
+crate_named_dependencies(
+ int id: @crate ref,
+ int index: int ref,
+ int named_dependency: @named_crate ref
+);
+
+missings(
+ unique int id: @missing
+);
+
+unimplementeds(
+ unique int id: @unimplemented
+);
+
+abis(
+ unique int id: @abi
+);
+
+#keyset[id]
+abi_abi_strings(
+ int id: @abi ref,
+ string abi_string: string ref
+);
+
+@addressable =
+ @item
+| @variant
+;
+
+#keyset[id]
+addressable_extended_canonical_paths(
+ int id: @addressable ref,
+ string extended_canonical_path: string ref
+);
+
+#keyset[id]
+addressable_crate_origins(
+ int id: @addressable ref,
+ string crate_origin: string ref
+);
+
+arg_lists(
+ unique int id: @arg_list
+);
+
+#keyset[id, index]
+arg_list_args(
+ int id: @arg_list ref,
+ int index: int ref,
+ int arg: @expr ref
+);
+
+asm_dir_specs(
+ unique int id: @asm_dir_spec
+);
+
+@asm_operand =
+ @asm_const
+| @asm_label
+| @asm_reg_operand
+| @asm_sym
+;
+
+asm_operand_exprs(
+ unique int id: @asm_operand_expr
+);
+
+#keyset[id]
+asm_operand_expr_in_exprs(
+ int id: @asm_operand_expr ref,
+ int in_expr: @expr ref
+);
+
+#keyset[id]
+asm_operand_expr_out_exprs(
+ int id: @asm_operand_expr ref,
+ int out_expr: @expr ref
+);
+
+asm_options(
+ unique int id: @asm_option
+);
+
+#keyset[id]
+asm_option_is_raw(
+ int id: @asm_option ref
+);
+
+@asm_piece =
+ @asm_clobber_abi
+| @asm_operand_named
+| @asm_options_list
+;
+
+asm_reg_specs(
+ unique int id: @asm_reg_spec
+);
+
+#keyset[id]
+asm_reg_spec_identifiers(
+ int id: @asm_reg_spec ref,
+ int identifier: @name_ref ref
+);
+
+@assoc_item =
+ @const
+| @function
+| @macro_call
+| @type_alias
+;
+
+assoc_item_lists(
+ unique int id: @assoc_item_list
+);
+
+#keyset[id, index]
+assoc_item_list_assoc_items(
+ int id: @assoc_item_list ref,
+ int index: int ref,
+ int assoc_item: @assoc_item ref
+);
+
+#keyset[id, index]
+assoc_item_list_attrs(
+ int id: @assoc_item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+attrs(
+ unique int id: @attr
+);
+
+#keyset[id]
+attr_meta(
+ int id: @attr ref,
+ int meta: @meta ref
+);
+
+@callable =
+ @closure_expr
+| @function
+;
+
+#keyset[id]
+callable_param_lists(
+ int id: @callable ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id, index]
+callable_attrs(
+ int id: @callable ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+closure_binders(
+ unique int id: @closure_binder
+);
+
+#keyset[id]
+closure_binder_generic_param_lists(
+ int id: @closure_binder ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+@expr =
+ @array_expr_internal
+| @asm_expr
+| @await_expr
+| @become_expr
+| @binary_expr
+| @break_expr
+| @call_expr_base
+| @cast_expr
+| @closure_expr
+| @continue_expr
+| @field_expr
+| @format_args_expr
+| @if_expr
+| @index_expr
+| @labelable_expr
+| @let_expr
+| @literal_expr
+| @macro_block_expr
+| @macro_expr
+| @match_expr
+| @offset_of_expr
+| @paren_expr
+| @path_expr_base
+| @prefix_expr
+| @range_expr
+| @ref_expr
+| @return_expr
+| @struct_expr
+| @try_expr
+| @tuple_expr
+| @underscore_expr
+| @yeet_expr
+| @yield_expr
+;
+
+@extern_item =
+ @function
+| @macro_call
+| @static
+| @type_alias
+;
+
+extern_item_lists(
+ unique int id: @extern_item_list
+);
+
+#keyset[id, index]
+extern_item_list_attrs(
+ int id: @extern_item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+extern_item_list_extern_items(
+ int id: @extern_item_list ref,
+ int index: int ref,
+ int extern_item: @extern_item ref
+);
+
+@field_list =
+ @struct_field_list
+| @tuple_field_list
+;
+
+format_args_args(
+ unique int id: @format_args_arg
+);
+
+#keyset[id]
+format_args_arg_exprs(
+ int id: @format_args_arg ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+format_args_arg_names(
+ int id: @format_args_arg ref,
+ int name: @name ref
+);
+
+@generic_arg =
+ @assoc_type_arg
+| @const_arg
+| @lifetime_arg
+| @type_arg
+;
+
+generic_arg_lists(
+ unique int id: @generic_arg_list
+);
+
+#keyset[id, index]
+generic_arg_list_generic_args(
+ int id: @generic_arg_list ref,
+ int index: int ref,
+ int generic_arg: @generic_arg ref
+);
+
+@generic_param =
+ @const_param
+| @lifetime_param
+| @type_param
+;
+
+generic_param_lists(
+ unique int id: @generic_param_list
+);
+
+#keyset[id, index]
+generic_param_list_generic_params(
+ int id: @generic_param_list ref,
+ int index: int ref,
+ int generic_param: @generic_param ref
+);
+
+item_lists(
+ unique int id: @item_list
+);
+
+#keyset[id, index]
+item_list_attrs(
+ int id: @item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+item_list_items(
+ int id: @item_list ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+labels(
+ unique int id: @label
+);
+
+#keyset[id]
+label_lifetimes(
+ int id: @label ref,
+ int lifetime: @lifetime ref
+);
+
+let_elses(
+ unique int id: @let_else
+);
+
+#keyset[id]
+let_else_block_exprs(
+ int id: @let_else ref,
+ int block_expr: @block_expr ref
+);
+
+macro_items(
+ unique int id: @macro_items
+);
+
+#keyset[id, index]
+macro_items_items(
+ int id: @macro_items ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+match_arms(
+ unique int id: @match_arm
+);
+
+#keyset[id, index]
+match_arm_attrs(
+ int id: @match_arm ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+match_arm_exprs(
+ int id: @match_arm ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+match_arm_guards(
+ int id: @match_arm ref,
+ int guard: @match_guard ref
+);
+
+#keyset[id]
+match_arm_pats(
+ int id: @match_arm ref,
+ int pat: @pat ref
+);
+
+match_arm_lists(
+ unique int id: @match_arm_list
+);
+
+#keyset[id, index]
+match_arm_list_arms(
+ int id: @match_arm_list ref,
+ int index: int ref,
+ int arm: @match_arm ref
+);
+
+#keyset[id, index]
+match_arm_list_attrs(
+ int id: @match_arm_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+match_guards(
+ unique int id: @match_guard
+);
+
+#keyset[id]
+match_guard_conditions(
+ int id: @match_guard ref,
+ int condition: @expr ref
+);
+
+meta(
+ unique int id: @meta
+);
+
+#keyset[id]
+meta_exprs(
+ int id: @meta ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+meta_is_unsafe(
+ int id: @meta ref
+);
+
+#keyset[id]
+meta_paths(
+ int id: @meta ref,
+ int path: @path ref
+);
+
+#keyset[id]
+meta_token_trees(
+ int id: @meta ref,
+ int token_tree: @token_tree ref
+);
+
+names(
+ unique int id: @name
+);
+
+#keyset[id]
+name_texts(
+ int id: @name ref,
+ string text: string ref
+);
+
+@param_base =
+ @param
+| @self_param
+;
+
+#keyset[id, index]
+param_base_attrs(
+ int id: @param_base ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+param_base_type_reprs(
+ int id: @param_base ref,
+ int type_repr: @type_repr ref
+);
+
+param_lists(
+ unique int id: @param_list
+);
+
+#keyset[id, index]
+param_list_params(
+ int id: @param_list ref,
+ int index: int ref,
+ int param: @param ref
+);
+
+#keyset[id]
+param_list_self_params(
+ int id: @param_list ref,
+ int self_param: @self_param ref
+);
+
+parenthesized_arg_lists(
+ unique int id: @parenthesized_arg_list
+);
+
+#keyset[id, index]
+parenthesized_arg_list_type_args(
+ int id: @parenthesized_arg_list ref,
+ int index: int ref,
+ int type_arg: @type_arg ref
+);
+
+@pat =
+ @box_pat
+| @const_block_pat
+| @ident_pat
+| @literal_pat
+| @macro_pat
+| @or_pat
+| @paren_pat
+| @path_pat
+| @range_pat
+| @ref_pat
+| @rest_pat
+| @slice_pat
+| @struct_pat
+| @tuple_pat
+| @tuple_struct_pat
+| @wildcard_pat
+;
+
+paths(
+ unique int id: @path
+);
+
+#keyset[id]
+path_qualifiers(
+ int id: @path ref,
+ int qualifier: @path ref
+);
+
+#keyset[id]
+path_segments_(
+ int id: @path ref,
+ int segment: @path_segment ref
+);
+
+path_segments(
+ unique int id: @path_segment
+);
+
+#keyset[id]
+path_segment_generic_arg_lists(
+ int id: @path_segment ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+path_segment_identifiers(
+ int id: @path_segment ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+path_segment_parenthesized_arg_lists(
+ int id: @path_segment ref,
+ int parenthesized_arg_list: @parenthesized_arg_list ref
+);
+
+#keyset[id]
+path_segment_ret_types(
+ int id: @path_segment ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+path_segment_return_type_syntaxes(
+ int id: @path_segment ref,
+ int return_type_syntax: @return_type_syntax ref
+);
+
+#keyset[id]
+path_segment_type_reprs(
+ int id: @path_segment ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+path_segment_trait_type_reprs(
+ int id: @path_segment ref,
+ int trait_type_repr: @path_type_repr ref
+);
+
+renames(
+ unique int id: @rename
+);
+
+#keyset[id]
+rename_names(
+ int id: @rename ref,
+ int name: @name ref
+);
+
+@resolvable =
+ @method_call_expr
+| @path_ast_node
+;
+
+#keyset[id]
+resolvable_resolved_paths(
+ int id: @resolvable ref,
+ string resolved_path: string ref
+);
+
+#keyset[id]
+resolvable_resolved_crate_origins(
+ int id: @resolvable ref,
+ string resolved_crate_origin: string ref
+);
+
+ret_type_reprs(
+ unique int id: @ret_type_repr
+);
+
+#keyset[id]
+ret_type_repr_type_reprs(
+ int id: @ret_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+return_type_syntaxes(
+ unique int id: @return_type_syntax
+);
+
+source_files(
+ unique int id: @source_file
+);
+
+#keyset[id, index]
+source_file_attrs(
+ int id: @source_file ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+source_file_items(
+ int id: @source_file ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+@stmt =
+ @expr_stmt
+| @item
+| @let_stmt
+;
+
+stmt_lists(
+ unique int id: @stmt_list
+);
+
+#keyset[id, index]
+stmt_list_attrs(
+ int id: @stmt_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+stmt_list_statements(
+ int id: @stmt_list ref,
+ int index: int ref,
+ int statement: @stmt ref
+);
+
+#keyset[id]
+stmt_list_tail_exprs(
+ int id: @stmt_list ref,
+ int tail_expr: @expr ref
+);
+
+struct_expr_fields(
+ unique int id: @struct_expr_field
+);
+
+#keyset[id, index]
+struct_expr_field_attrs(
+ int id: @struct_expr_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_expr_field_exprs(
+ int id: @struct_expr_field ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+struct_expr_field_identifiers(
+ int id: @struct_expr_field ref,
+ int identifier: @name_ref ref
+);
+
+struct_expr_field_lists(
+ unique int id: @struct_expr_field_list
+);
+
+#keyset[id, index]
+struct_expr_field_list_attrs(
+ int id: @struct_expr_field_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+struct_expr_field_list_fields(
+ int id: @struct_expr_field_list ref,
+ int index: int ref,
+ int field: @struct_expr_field ref
+);
+
+#keyset[id]
+struct_expr_field_list_spreads(
+ int id: @struct_expr_field_list ref,
+ int spread: @expr ref
+);
+
+struct_fields(
+ unique int id: @struct_field
+);
+
+#keyset[id, index]
+struct_field_attrs(
+ int id: @struct_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_field_defaults(
+ int id: @struct_field ref,
+ int default: @expr ref
+);
+
+#keyset[id]
+struct_field_is_unsafe(
+ int id: @struct_field ref
+);
+
+#keyset[id]
+struct_field_names(
+ int id: @struct_field ref,
+ int name: @name ref
+);
+
+#keyset[id]
+struct_field_type_reprs(
+ int id: @struct_field ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+struct_field_visibilities(
+ int id: @struct_field ref,
+ int visibility: @visibility ref
+);
+
+struct_pat_fields(
+ unique int id: @struct_pat_field
+);
+
+#keyset[id, index]
+struct_pat_field_attrs(
+ int id: @struct_pat_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_pat_field_identifiers(
+ int id: @struct_pat_field ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+struct_pat_field_pats(
+ int id: @struct_pat_field ref,
+ int pat: @pat ref
+);
+
+struct_pat_field_lists(
+ unique int id: @struct_pat_field_list
+);
+
+#keyset[id, index]
+struct_pat_field_list_fields(
+ int id: @struct_pat_field_list ref,
+ int index: int ref,
+ int field: @struct_pat_field ref
+);
+
+#keyset[id]
+struct_pat_field_list_rest_pats(
+ int id: @struct_pat_field_list ref,
+ int rest_pat: @rest_pat ref
+);
+
+@token =
+ @comment
+;
+
+token_trees(
+ unique int id: @token_tree
+);
+
+tuple_fields(
+ unique int id: @tuple_field
+);
+
+#keyset[id, index]
+tuple_field_attrs(
+ int id: @tuple_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+tuple_field_type_reprs(
+ int id: @tuple_field ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+tuple_field_visibilities(
+ int id: @tuple_field ref,
+ int visibility: @visibility ref
+);
+
+type_bounds(
+ unique int id: @type_bound
+);
+
+#keyset[id]
+type_bound_is_async(
+ int id: @type_bound ref
+);
+
+#keyset[id]
+type_bound_is_const(
+ int id: @type_bound ref
+);
+
+#keyset[id]
+type_bound_lifetimes(
+ int id: @type_bound ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+type_bound_type_reprs(
+ int id: @type_bound ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+type_bound_use_bound_generic_args(
+ int id: @type_bound ref,
+ int use_bound_generic_args: @use_bound_generic_args ref
+);
+
+type_bound_lists(
+ unique int id: @type_bound_list
+);
+
+#keyset[id, index]
+type_bound_list_bounds(
+ int id: @type_bound_list ref,
+ int index: int ref,
+ int bound: @type_bound ref
+);
+
+@type_repr =
+ @array_type_repr
+| @dyn_trait_type_repr
+| @fn_ptr_type_repr
+| @for_type_repr
+| @impl_trait_type_repr
+| @infer_type_repr
+| @macro_type_repr
+| @never_type_repr
+| @paren_type_repr
+| @path_type_repr
+| @ptr_type_repr
+| @ref_type_repr
+| @slice_type_repr
+| @tuple_type_repr
+;
+
+@use_bound_generic_arg =
+ @lifetime
+| @name_ref
+;
+
+use_bound_generic_args(
+ unique int id: @use_bound_generic_args
+);
+
+#keyset[id, index]
+use_bound_generic_args_use_bound_generic_args(
+ int id: @use_bound_generic_args ref,
+ int index: int ref,
+ int use_bound_generic_arg: @use_bound_generic_arg ref
+);
+
+use_trees(
+ unique int id: @use_tree
+);
+
+#keyset[id]
+use_tree_is_glob(
+ int id: @use_tree ref
+);
+
+#keyset[id]
+use_tree_paths(
+ int id: @use_tree ref,
+ int path: @path ref
+);
+
+#keyset[id]
+use_tree_renames(
+ int id: @use_tree ref,
+ int rename: @rename ref
+);
+
+#keyset[id]
+use_tree_use_tree_lists(
+ int id: @use_tree ref,
+ int use_tree_list: @use_tree_list ref
+);
+
+use_tree_lists(
+ unique int id: @use_tree_list
+);
+
+#keyset[id, index]
+use_tree_list_use_trees(
+ int id: @use_tree_list ref,
+ int index: int ref,
+ int use_tree: @use_tree ref
+);
+
+variant_lists(
+ unique int id: @variant_list
+);
+
+#keyset[id, index]
+variant_list_variants(
+ int id: @variant_list ref,
+ int index: int ref,
+ int variant: @variant ref
+);
+
+visibilities(
+ unique int id: @visibility
+);
+
+#keyset[id]
+visibility_paths(
+ int id: @visibility ref,
+ int path: @path ref
+);
+
+where_clauses(
+ unique int id: @where_clause
+);
+
+#keyset[id, index]
+where_clause_predicates(
+ int id: @where_clause ref,
+ int index: int ref,
+ int predicate: @where_pred ref
+);
+
+where_preds(
+ unique int id: @where_pred
+);
+
+#keyset[id]
+where_pred_generic_param_lists(
+ int id: @where_pred ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+where_pred_lifetimes(
+ int id: @where_pred ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+where_pred_type_reprs(
+ int id: @where_pred ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+where_pred_type_bound_lists(
+ int id: @where_pred ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+array_expr_internals(
+ unique int id: @array_expr_internal
+);
+
+#keyset[id, index]
+array_expr_internal_attrs(
+ int id: @array_expr_internal ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+array_expr_internal_exprs(
+ int id: @array_expr_internal ref,
+ int index: int ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+array_expr_internal_is_semicolon(
+ int id: @array_expr_internal ref
+);
+
+array_type_reprs(
+ unique int id: @array_type_repr
+);
+
+#keyset[id]
+array_type_repr_const_args(
+ int id: @array_type_repr ref,
+ int const_arg: @const_arg ref
+);
+
+#keyset[id]
+array_type_repr_element_type_reprs(
+ int id: @array_type_repr ref,
+ int element_type_repr: @type_repr ref
+);
+
+asm_clobber_abis(
+ unique int id: @asm_clobber_abi
+);
+
+asm_consts(
+ unique int id: @asm_const
+);
+
+#keyset[id]
+asm_const_exprs(
+ int id: @asm_const ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+asm_const_is_const(
+ int id: @asm_const ref
+);
+
+asm_exprs(
+ unique int id: @asm_expr
+);
+
+#keyset[id, index]
+asm_expr_asm_pieces(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int asm_piece: @asm_piece ref
+);
+
+#keyset[id, index]
+asm_expr_attrs(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+asm_expr_templates(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int template: @expr ref
+);
+
+asm_labels(
+ unique int id: @asm_label
+);
+
+#keyset[id]
+asm_label_block_exprs(
+ int id: @asm_label ref,
+ int block_expr: @block_expr ref
+);
+
+asm_operand_nameds(
+ unique int id: @asm_operand_named
+);
+
+#keyset[id]
+asm_operand_named_asm_operands(
+ int id: @asm_operand_named ref,
+ int asm_operand: @asm_operand ref
+);
+
+#keyset[id]
+asm_operand_named_names(
+ int id: @asm_operand_named ref,
+ int name: @name ref
+);
+
+asm_options_lists(
+ unique int id: @asm_options_list
+);
+
+#keyset[id, index]
+asm_options_list_asm_options(
+ int id: @asm_options_list ref,
+ int index: int ref,
+ int asm_option: @asm_option ref
+);
+
+asm_reg_operands(
+ unique int id: @asm_reg_operand
+);
+
+#keyset[id]
+asm_reg_operand_asm_dir_specs(
+ int id: @asm_reg_operand ref,
+ int asm_dir_spec: @asm_dir_spec ref
+);
+
+#keyset[id]
+asm_reg_operand_asm_operand_exprs(
+ int id: @asm_reg_operand ref,
+ int asm_operand_expr: @asm_operand_expr ref
+);
+
+#keyset[id]
+asm_reg_operand_asm_reg_specs(
+ int id: @asm_reg_operand ref,
+ int asm_reg_spec: @asm_reg_spec ref
+);
+
+asm_syms(
+ unique int id: @asm_sym
+);
+
+#keyset[id]
+asm_sym_paths(
+ int id: @asm_sym ref,
+ int path: @path ref
+);
+
+assoc_type_args(
+ unique int id: @assoc_type_arg
+);
+
+#keyset[id]
+assoc_type_arg_const_args(
+ int id: @assoc_type_arg ref,
+ int const_arg: @const_arg ref
+);
+
+#keyset[id]
+assoc_type_arg_generic_arg_lists(
+ int id: @assoc_type_arg ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+assoc_type_arg_identifiers(
+ int id: @assoc_type_arg ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+assoc_type_arg_param_lists(
+ int id: @assoc_type_arg ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id]
+assoc_type_arg_ret_types(
+ int id: @assoc_type_arg ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+assoc_type_arg_return_type_syntaxes(
+ int id: @assoc_type_arg ref,
+ int return_type_syntax: @return_type_syntax ref
+);
+
+#keyset[id]
+assoc_type_arg_type_reprs(
+ int id: @assoc_type_arg ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+assoc_type_arg_type_bound_lists(
+ int id: @assoc_type_arg ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+await_exprs(
+ unique int id: @await_expr
+);
+
+#keyset[id, index]
+await_expr_attrs(
+ int id: @await_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+await_expr_exprs(
+ int id: @await_expr ref,
+ int expr: @expr ref
+);
+
+become_exprs(
+ unique int id: @become_expr
+);
+
+#keyset[id, index]
+become_expr_attrs(
+ int id: @become_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+become_expr_exprs(
+ int id: @become_expr ref,
+ int expr: @expr ref
+);
+
+binary_exprs(
+ unique int id: @binary_expr
+);
+
+#keyset[id, index]
+binary_expr_attrs(
+ int id: @binary_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+binary_expr_lhs(
+ int id: @binary_expr ref,
+ int lhs: @expr ref
+);
+
+#keyset[id]
+binary_expr_operator_names(
+ int id: @binary_expr ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+binary_expr_rhs(
+ int id: @binary_expr ref,
+ int rhs: @expr ref
+);
+
+box_pats(
+ unique int id: @box_pat
+);
+
+#keyset[id]
+box_pat_pats(
+ int id: @box_pat ref,
+ int pat: @pat ref
+);
+
+break_exprs(
+ unique int id: @break_expr
+);
+
+#keyset[id, index]
+break_expr_attrs(
+ int id: @break_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+break_expr_exprs(
+ int id: @break_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+break_expr_lifetimes(
+ int id: @break_expr ref,
+ int lifetime: @lifetime ref
+);
+
+@call_expr_base =
+ @call_expr
+| @method_call_expr
+;
+
+#keyset[id]
+call_expr_base_arg_lists(
+ int id: @call_expr_base ref,
+ int arg_list: @arg_list ref
+);
+
+#keyset[id, index]
+call_expr_base_attrs(
+ int id: @call_expr_base ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+cast_exprs(
+ unique int id: @cast_expr
+);
+
+#keyset[id, index]
+cast_expr_attrs(
+ int id: @cast_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+cast_expr_exprs(
+ int id: @cast_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+cast_expr_type_reprs(
+ int id: @cast_expr ref,
+ int type_repr: @type_repr ref
+);
+
+closure_exprs(
+ unique int id: @closure_expr
+);
+
+#keyset[id]
+closure_expr_bodies(
+ int id: @closure_expr ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+closure_expr_closure_binders(
+ int id: @closure_expr ref,
+ int closure_binder: @closure_binder ref
+);
+
+#keyset[id]
+closure_expr_is_async(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_const(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_gen(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_move(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_static(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_ret_types(
+ int id: @closure_expr ref,
+ int ret_type: @ret_type_repr ref
+);
+
+comments(
+ unique int id: @comment,
+ int parent: @ast_node ref,
+ string text: string ref
+);
+
+const_args(
+ unique int id: @const_arg
+);
+
+#keyset[id]
+const_arg_exprs(
+ int id: @const_arg ref,
+ int expr: @expr ref
+);
+
+const_block_pats(
+ unique int id: @const_block_pat
+);
+
+#keyset[id]
+const_block_pat_block_exprs(
+ int id: @const_block_pat ref,
+ int block_expr: @block_expr ref
+);
+
+#keyset[id]
+const_block_pat_is_const(
+ int id: @const_block_pat ref
+);
+
+const_params(
+ unique int id: @const_param
+);
+
+#keyset[id, index]
+const_param_attrs(
+ int id: @const_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+const_param_default_vals(
+ int id: @const_param ref,
+ int default_val: @const_arg ref
+);
+
+#keyset[id]
+const_param_is_const(
+ int id: @const_param ref
+);
+
+#keyset[id]
+const_param_names(
+ int id: @const_param ref,
+ int name: @name ref
+);
+
+#keyset[id]
+const_param_type_reprs(
+ int id: @const_param ref,
+ int type_repr: @type_repr ref
+);
+
+continue_exprs(
+ unique int id: @continue_expr
+);
+
+#keyset[id, index]
+continue_expr_attrs(
+ int id: @continue_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+continue_expr_lifetimes(
+ int id: @continue_expr ref,
+ int lifetime: @lifetime ref
+);
+
+dyn_trait_type_reprs(
+ unique int id: @dyn_trait_type_repr
+);
+
+#keyset[id]
+dyn_trait_type_repr_type_bound_lists(
+ int id: @dyn_trait_type_repr ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+expr_stmts(
+ unique int id: @expr_stmt
+);
+
+#keyset[id]
+expr_stmt_exprs(
+ int id: @expr_stmt ref,
+ int expr: @expr ref
+);
+
+field_exprs(
+ unique int id: @field_expr
+);
+
+#keyset[id, index]
+field_expr_attrs(
+ int id: @field_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+field_expr_containers(
+ int id: @field_expr ref,
+ int container: @expr ref
+);
+
+#keyset[id]
+field_expr_identifiers(
+ int id: @field_expr ref,
+ int identifier: @name_ref ref
+);
+
+fn_ptr_type_reprs(
+ unique int id: @fn_ptr_type_repr
+);
+
+#keyset[id]
+fn_ptr_type_repr_abis(
+ int id: @fn_ptr_type_repr ref,
+ int abi: @abi ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_async(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_const(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_unsafe(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_param_lists(
+ int id: @fn_ptr_type_repr ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_ret_types(
+ int id: @fn_ptr_type_repr ref,
+ int ret_type: @ret_type_repr ref
+);
+
+for_type_reprs(
+ unique int id: @for_type_repr
+);
+
+#keyset[id]
+for_type_repr_generic_param_lists(
+ int id: @for_type_repr ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+for_type_repr_type_reprs(
+ int id: @for_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+format_args_exprs(
+ unique int id: @format_args_expr
+);
+
+#keyset[id, index]
+format_args_expr_args(
+ int id: @format_args_expr ref,
+ int index: int ref,
+ int arg: @format_args_arg ref
+);
+
+#keyset[id, index]
+format_args_expr_attrs(
+ int id: @format_args_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+format_args_expr_templates(
+ int id: @format_args_expr ref,
+ int template: @expr ref
+);
+
+ident_pats(
+ unique int id: @ident_pat
+);
+
+#keyset[id, index]
+ident_pat_attrs(
+ int id: @ident_pat ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+ident_pat_is_mut(
+ int id: @ident_pat ref
+);
+
+#keyset[id]
+ident_pat_is_ref(
+ int id: @ident_pat ref
+);
+
+#keyset[id]
+ident_pat_names(
+ int id: @ident_pat ref,
+ int name: @name ref
+);
+
+#keyset[id]
+ident_pat_pats(
+ int id: @ident_pat ref,
+ int pat: @pat ref
+);
+
+if_exprs(
+ unique int id: @if_expr
+);
+
+#keyset[id, index]
+if_expr_attrs(
+ int id: @if_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+if_expr_conditions(
+ int id: @if_expr ref,
+ int condition: @expr ref
+);
+
+#keyset[id]
+if_expr_elses(
+ int id: @if_expr ref,
+ int else: @expr ref
+);
+
+#keyset[id]
+if_expr_thens(
+ int id: @if_expr ref,
+ int then: @block_expr ref
+);
+
+impl_trait_type_reprs(
+ unique int id: @impl_trait_type_repr
+);
+
+#keyset[id]
+impl_trait_type_repr_type_bound_lists(
+ int id: @impl_trait_type_repr ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+index_exprs(
+ unique int id: @index_expr
+);
+
+#keyset[id, index]
+index_expr_attrs(
+ int id: @index_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+index_expr_bases(
+ int id: @index_expr ref,
+ int base: @expr ref
+);
+
+#keyset[id]
+index_expr_indices(
+ int id: @index_expr ref,
+ int index: @expr ref
+);
+
+infer_type_reprs(
+ unique int id: @infer_type_repr
+);
+
+@item =
+ @adt
+| @const
+| @extern_block
+| @extern_crate
+| @function
+| @impl
+| @macro_call
+| @macro_def
+| @macro_rules
+| @module
+| @static
+| @trait
+| @trait_alias
+| @type_alias
+| @use
+;
+
+#keyset[id]
+item_attribute_macro_expansions(
+ int id: @item ref,
+ int attribute_macro_expansion: @macro_items ref
+);
+
+@labelable_expr =
+ @block_expr
+| @looping_expr
+;
+
+#keyset[id]
+labelable_expr_labels(
+ int id: @labelable_expr ref,
+ int label: @label ref
+);
+
+let_exprs(
+ unique int id: @let_expr
+);
+
+#keyset[id, index]
+let_expr_attrs(
+ int id: @let_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+let_expr_scrutinees(
+ int id: @let_expr ref,
+ int scrutinee: @expr ref
+);
+
+#keyset[id]
+let_expr_pats(
+ int id: @let_expr ref,
+ int pat: @pat ref
+);
+
+let_stmts(
+ unique int id: @let_stmt
+);
+
+#keyset[id, index]
+let_stmt_attrs(
+ int id: @let_stmt ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+let_stmt_initializers(
+ int id: @let_stmt ref,
+ int initializer: @expr ref
+);
+
+#keyset[id]
+let_stmt_let_elses(
+ int id: @let_stmt ref,
+ int let_else: @let_else ref
+);
+
+#keyset[id]
+let_stmt_pats(
+ int id: @let_stmt ref,
+ int pat: @pat ref
+);
+
+#keyset[id]
+let_stmt_type_reprs(
+ int id: @let_stmt ref,
+ int type_repr: @type_repr ref
+);
+
+lifetimes(
+ unique int id: @lifetime
+);
+
+#keyset[id]
+lifetime_texts(
+ int id: @lifetime ref,
+ string text: string ref
+);
+
+lifetime_args(
+ unique int id: @lifetime_arg
+);
+
+#keyset[id]
+lifetime_arg_lifetimes(
+ int id: @lifetime_arg ref,
+ int lifetime: @lifetime ref
+);
+
+lifetime_params(
+ unique int id: @lifetime_param
+);
+
+#keyset[id, index]
+lifetime_param_attrs(
+ int id: @lifetime_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+lifetime_param_lifetimes(
+ int id: @lifetime_param ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+lifetime_param_type_bound_lists(
+ int id: @lifetime_param ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+literal_exprs(
+ unique int id: @literal_expr
+);
+
+#keyset[id, index]
+literal_expr_attrs(
+ int id: @literal_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+literal_expr_text_values(
+ int id: @literal_expr ref,
+ string text_value: string ref
+);
+
+literal_pats(
+ unique int id: @literal_pat
+);
+
+#keyset[id]
+literal_pat_literals(
+ int id: @literal_pat ref,
+ int literal: @literal_expr ref
+);
+
+macro_block_exprs(
+ unique int id: @macro_block_expr
+);
+
+#keyset[id]
+macro_block_expr_tail_exprs(
+ int id: @macro_block_expr ref,
+ int tail_expr: @expr ref
+);
+
+#keyset[id, index]
+macro_block_expr_statements(
+ int id: @macro_block_expr ref,
+ int index: int ref,
+ int statement: @stmt ref
+);
+
+macro_exprs(
+ unique int id: @macro_expr
+);
+
+#keyset[id]
+macro_expr_macro_calls(
+ int id: @macro_expr ref,
+ int macro_call: @macro_call ref
+);
+
+macro_pats(
+ unique int id: @macro_pat
+);
+
+#keyset[id]
+macro_pat_macro_calls(
+ int id: @macro_pat ref,
+ int macro_call: @macro_call ref
+);
+
+macro_type_reprs(
+ unique int id: @macro_type_repr
+);
+
+#keyset[id]
+macro_type_repr_macro_calls(
+ int id: @macro_type_repr ref,
+ int macro_call: @macro_call ref
+);
+
+match_exprs(
+ unique int id: @match_expr
+);
+
+#keyset[id, index]
+match_expr_attrs(
+ int id: @match_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+match_expr_scrutinees(
+ int id: @match_expr ref,
+ int scrutinee: @expr ref
+);
+
+#keyset[id]
+match_expr_match_arm_lists(
+ int id: @match_expr ref,
+ int match_arm_list: @match_arm_list ref
+);
+
+name_refs(
+ unique int id: @name_ref
+);
+
+#keyset[id]
+name_ref_texts(
+ int id: @name_ref ref,
+ string text: string ref
+);
+
+never_type_reprs(
+ unique int id: @never_type_repr
+);
+
+offset_of_exprs(
+ unique int id: @offset_of_expr
+);
+
+#keyset[id, index]
+offset_of_expr_attrs(
+ int id: @offset_of_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+offset_of_expr_fields(
+ int id: @offset_of_expr ref,
+ int index: int ref,
+ int field: @name_ref ref
+);
+
+#keyset[id]
+offset_of_expr_type_reprs(
+ int id: @offset_of_expr ref,
+ int type_repr: @type_repr ref
+);
+
+or_pats(
+ unique int id: @or_pat
+);
+
+#keyset[id, index]
+or_pat_pats(
+ int id: @or_pat ref,
+ int index: int ref,
+ int pat: @pat ref
+);
+
+params(
+ unique int id: @param
+);
+
+#keyset[id]
+param_pats(
+ int id: @param ref,
+ int pat: @pat ref
+);
+
+paren_exprs(
+ unique int id: @paren_expr
+);
+
+#keyset[id, index]
+paren_expr_attrs(
+ int id: @paren_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+paren_expr_exprs(
+ int id: @paren_expr ref,
+ int expr: @expr ref
+);
+
+paren_pats(
+ unique int id: @paren_pat
+);
+
+#keyset[id]
+paren_pat_pats(
+ int id: @paren_pat ref,
+ int pat: @pat ref
+);
+
+paren_type_reprs(
+ unique int id: @paren_type_repr
+);
+
+#keyset[id]
+paren_type_repr_type_reprs(
+ int id: @paren_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+@path_ast_node =
+ @path_expr
+| @path_pat
+| @struct_expr
+| @struct_pat
+| @tuple_struct_pat
+;
+
+#keyset[id]
+path_ast_node_paths(
+ int id: @path_ast_node ref,
+ int path: @path ref
+);
+
+@path_expr_base =
+ @path_expr
+;
+
+path_type_reprs(
+ unique int id: @path_type_repr
+);
+
+#keyset[id]
+path_type_repr_paths(
+ int id: @path_type_repr ref,
+ int path: @path ref
+);
+
+prefix_exprs(
+ unique int id: @prefix_expr
+);
+
+#keyset[id, index]
+prefix_expr_attrs(
+ int id: @prefix_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+prefix_expr_exprs(
+ int id: @prefix_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+prefix_expr_operator_names(
+ int id: @prefix_expr ref,
+ string operator_name: string ref
+);
+
+ptr_type_reprs(
+ unique int id: @ptr_type_repr
+);
+
+#keyset[id]
+ptr_type_repr_is_const(
+ int id: @ptr_type_repr ref
+);
+
+#keyset[id]
+ptr_type_repr_is_mut(
+ int id: @ptr_type_repr ref
+);
+
+#keyset[id]
+ptr_type_repr_type_reprs(
+ int id: @ptr_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+range_exprs(
+ unique int id: @range_expr
+);
+
+#keyset[id, index]
+range_expr_attrs(
+ int id: @range_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+range_expr_ends(
+ int id: @range_expr ref,
+ int end: @expr ref
+);
+
+#keyset[id]
+range_expr_operator_names(
+ int id: @range_expr ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+range_expr_starts(
+ int id: @range_expr ref,
+ int start: @expr ref
+);
+
+range_pats(
+ unique int id: @range_pat
+);
+
+#keyset[id]
+range_pat_ends(
+ int id: @range_pat ref,
+ int end: @pat ref
+);
+
+#keyset[id]
+range_pat_operator_names(
+ int id: @range_pat ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+range_pat_starts(
+ int id: @range_pat ref,
+ int start: @pat ref
+);
+
+ref_exprs(
+ unique int id: @ref_expr
+);
+
+#keyset[id, index]
+ref_expr_attrs(
+ int id: @ref_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+ref_expr_exprs(
+ int id: @ref_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+ref_expr_is_const(
+ int id: @ref_expr ref
+);
+
+#keyset[id]
+ref_expr_is_mut(
+ int id: @ref_expr ref
+);
+
+#keyset[id]
+ref_expr_is_raw(
+ int id: @ref_expr ref
+);
+
+ref_pats(
+ unique int id: @ref_pat
+);
+
+#keyset[id]
+ref_pat_is_mut(
+ int id: @ref_pat ref
+);
+
+#keyset[id]
+ref_pat_pats(
+ int id: @ref_pat ref,
+ int pat: @pat ref
+);
+
+ref_type_reprs(
+ unique int id: @ref_type_repr
+);
+
+#keyset[id]
+ref_type_repr_is_mut(
+ int id: @ref_type_repr ref
+);
+
+#keyset[id]
+ref_type_repr_lifetimes(
+ int id: @ref_type_repr ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+ref_type_repr_type_reprs(
+ int id: @ref_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+rest_pats(
+ unique int id: @rest_pat
+);
+
+#keyset[id, index]
+rest_pat_attrs(
+ int id: @rest_pat ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+return_exprs(
+ unique int id: @return_expr
+);
+
+#keyset[id, index]
+return_expr_attrs(
+ int id: @return_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+return_expr_exprs(
+ int id: @return_expr ref,
+ int expr: @expr ref
+);
+
+self_params(
+ unique int id: @self_param
+);
+
+#keyset[id]
+self_param_is_ref(
+ int id: @self_param ref
+);
+
+#keyset[id]
+self_param_is_mut(
+ int id: @self_param ref
+);
+
+#keyset[id]
+self_param_lifetimes(
+ int id: @self_param ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+self_param_names(
+ int id: @self_param ref,
+ int name: @name ref
+);
+
+slice_pats(
+ unique int id: @slice_pat
+);
+
+#keyset[id, index]
+slice_pat_pats(
+ int id: @slice_pat ref,
+ int index: int ref,
+ int pat: @pat ref
+);
+
+slice_type_reprs(
+ unique int id: @slice_type_repr
+);
+
+#keyset[id]
+slice_type_repr_type_reprs(
+ int id: @slice_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+struct_field_lists(
+ unique int id: @struct_field_list
+);
+
+#keyset[id, index]
+struct_field_list_fields(
+ int id: @struct_field_list ref,
+ int index: int ref,
+ int field: @struct_field ref
+);
+
+try_exprs(
+ unique int id: @try_expr
+);
+
+#keyset[id, index]
+try_expr_attrs(
+ int id: @try_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+try_expr_exprs(
+ int id: @try_expr ref,
+ int expr: @expr ref
+);
+
+tuple_exprs(
+ unique int id: @tuple_expr
+);
+
+#keyset[id, index]
+tuple_expr_attrs(
+ int id: @tuple_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+tuple_expr_fields(
+ int id: @tuple_expr ref,
+ int index: int ref,
+ int field: @expr ref
+);
+
+tuple_field_lists(
+ unique int id: @tuple_field_list
+);
+
+#keyset[id, index]
+tuple_field_list_fields(
+ int id: @tuple_field_list ref,
+ int index: int ref,
+ int field: @tuple_field ref
+);
+
+tuple_pats(
+ unique int id: @tuple_pat
+);
+
+#keyset[id, index]
+tuple_pat_fields(
+ int id: @tuple_pat ref,
+ int index: int ref,
+ int field: @pat ref
+);
+
+tuple_type_reprs(
+ unique int id: @tuple_type_repr
+);
+
+#keyset[id, index]
+tuple_type_repr_fields(
+ int id: @tuple_type_repr ref,
+ int index: int ref,
+ int field: @type_repr ref
+);
+
+type_args(
+ unique int id: @type_arg
+);
+
+#keyset[id]
+type_arg_type_reprs(
+ int id: @type_arg ref,
+ int type_repr: @type_repr ref
+);
+
+type_params(
+ unique int id: @type_param
+);
+
+#keyset[id, index]
+type_param_attrs(
+ int id: @type_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+type_param_default_types(
+ int id: @type_param ref,
+ int default_type: @type_repr ref
+);
+
+#keyset[id]
+type_param_names(
+ int id: @type_param ref,
+ int name: @name ref
+);
+
+#keyset[id]
+type_param_type_bound_lists(
+ int id: @type_param ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+underscore_exprs(
+ unique int id: @underscore_expr
+);
+
+#keyset[id, index]
+underscore_expr_attrs(
+ int id: @underscore_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+variants(
+ unique int id: @variant
+);
+
+#keyset[id, index]
+variant_attrs(
+ int id: @variant ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+variant_discriminants(
+ int id: @variant ref,
+ int discriminant: @expr ref
+);
+
+#keyset[id]
+variant_field_lists(
+ int id: @variant ref,
+ int field_list: @field_list ref
+);
+
+#keyset[id]
+variant_names(
+ int id: @variant ref,
+ int name: @name ref
+);
+
+#keyset[id]
+variant_visibilities(
+ int id: @variant ref,
+ int visibility: @visibility ref
+);
+
+wildcard_pats(
+ unique int id: @wildcard_pat
+);
+
+yeet_exprs(
+ unique int id: @yeet_expr
+);
+
+#keyset[id, index]
+yeet_expr_attrs(
+ int id: @yeet_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+yeet_expr_exprs(
+ int id: @yeet_expr ref,
+ int expr: @expr ref
+);
+
+yield_exprs(
+ unique int id: @yield_expr
+);
+
+#keyset[id, index]
+yield_expr_attrs(
+ int id: @yield_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+yield_expr_exprs(
+ int id: @yield_expr ref,
+ int expr: @expr ref
+);
+
+@adt =
+ @enum
+| @struct
+| @union
+;
+
+#keyset[id, index]
+adt_derive_macro_expansions(
+ int id: @adt ref,
+ int index: int ref,
+ int derive_macro_expansion: @macro_items ref
+);
+
+block_exprs(
+ unique int id: @block_expr
+);
+
+#keyset[id, index]
+block_expr_attrs(
+ int id: @block_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+block_expr_is_async(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_const(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_gen(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_move(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_try(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_unsafe(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_stmt_lists(
+ int id: @block_expr ref,
+ int stmt_list: @stmt_list ref
+);
+
+call_exprs(
+ unique int id: @call_expr
+);
+
+#keyset[id]
+call_expr_functions(
+ int id: @call_expr ref,
+ int function: @expr ref
+);
+
+consts(
+ unique int id: @const
+);
+
+#keyset[id, index]
+const_attrs(
+ int id: @const ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+const_bodies(
+ int id: @const ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+const_generic_param_lists(
+ int id: @const ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+const_is_const(
+ int id: @const ref
+);
+
+#keyset[id]
+const_is_default(
+ int id: @const ref
+);
+
+#keyset[id]
+const_names(
+ int id: @const ref,
+ int name: @name ref
+);
+
+#keyset[id]
+const_type_reprs(
+ int id: @const ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+const_visibilities(
+ int id: @const ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+const_where_clauses(
+ int id: @const ref,
+ int where_clause: @where_clause ref
+);
+
+#keyset[id]
+const_has_implementation(
+ int id: @const ref
+);
+
+extern_blocks(
+ unique int id: @extern_block
+);
+
+#keyset[id]
+extern_block_abis(
+ int id: @extern_block ref,
+ int abi: @abi ref
+);
+
+#keyset[id, index]
+extern_block_attrs(
+ int id: @extern_block ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+extern_block_extern_item_lists(
+ int id: @extern_block ref,
+ int extern_item_list: @extern_item_list ref
+);
+
+#keyset[id]
+extern_block_is_unsafe(
+ int id: @extern_block ref
+);
+
+extern_crates(
+ unique int id: @extern_crate
+);
+
+#keyset[id, index]
+extern_crate_attrs(
+ int id: @extern_crate ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+extern_crate_identifiers(
+ int id: @extern_crate ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+extern_crate_renames(
+ int id: @extern_crate ref,
+ int rename: @rename ref
+);
+
+#keyset[id]
+extern_crate_visibilities(
+ int id: @extern_crate ref,
+ int visibility: @visibility ref
+);
+
+functions(
+ unique int id: @function
+);
+
+#keyset[id]
+function_abis(
+ int id: @function ref,
+ int abi: @abi ref
+);
+
+#keyset[id]
+function_bodies(
+ int id: @function ref,
+ int body: @block_expr ref
+);
+
+#keyset[id]
+function_generic_param_lists(
+ int id: @function ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+function_is_async(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_const(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_default(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_gen(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_unsafe(
+ int id: @function ref
+);
+
+#keyset[id]
+function_names(
+ int id: @function ref,
+ int name: @name ref
+);
+
+#keyset[id]
+function_ret_types(
+ int id: @function ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+function_visibilities(
+ int id: @function ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+function_where_clauses(
+ int id: @function ref,
+ int where_clause: @where_clause ref
+);
+
+#keyset[id]
+function_has_implementation(
+ int id: @function ref
+);
+
+impls(
+ unique int id: @impl
+);
+
+#keyset[id]
+impl_assoc_item_lists(
+ int id: @impl ref,
+ int assoc_item_list: @assoc_item_list ref
+);
+
+#keyset[id, index]
+impl_attrs(
+ int id: @impl ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+impl_generic_param_lists(
+ int id: @impl ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+impl_is_const(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_is_default(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_is_unsafe(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_self_ties(
+ int id: @impl ref,
+ int self_ty: @type_repr ref
+);
+
+#keyset[id]
+impl_traits(
+ int id: @impl ref,
+ int trait: @type_repr ref
+);
+
+#keyset[id]
+impl_visibilities(
+ int id: @impl ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+impl_where_clauses(
+ int id: @impl ref,
+ int where_clause: @where_clause ref
+);
+
+@looping_expr =
+ @for_expr
+| @loop_expr
+| @while_expr
+;
+
+#keyset[id]
+looping_expr_loop_bodies(
+ int id: @looping_expr ref,
+ int loop_body: @block_expr ref
+);
+
+macro_calls(
+ unique int id: @macro_call
+);
+
+#keyset[id, index]
+macro_call_attrs(
+ int id: @macro_call ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_call_paths(
+ int id: @macro_call ref,
+ int path: @path ref
+);
+
+#keyset[id]
+macro_call_token_trees(
+ int id: @macro_call ref,
+ int token_tree: @token_tree ref
+);
+
+#keyset[id]
+macro_call_macro_call_expansions(
+ int id: @macro_call ref,
+ int macro_call_expansion: @ast_node ref
+);
+
+macro_defs(
+ unique int id: @macro_def
+);
+
+#keyset[id]
+macro_def_args(
+ int id: @macro_def ref,
+ int args: @token_tree ref
+);
+
+#keyset[id, index]
+macro_def_attrs(
+ int id: @macro_def ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_def_bodies(
+ int id: @macro_def ref,
+ int body: @token_tree ref
+);
+
+#keyset[id]
+macro_def_names(
+ int id: @macro_def ref,
+ int name: @name ref
+);
+
+#keyset[id]
+macro_def_visibilities(
+ int id: @macro_def ref,
+ int visibility: @visibility ref
+);
+
+macro_rules(
+ unique int id: @macro_rules
+);
+
+#keyset[id, index]
+macro_rules_attrs(
+ int id: @macro_rules ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_rules_names(
+ int id: @macro_rules ref,
+ int name: @name ref
+);
+
+#keyset[id]
+macro_rules_token_trees(
+ int id: @macro_rules ref,
+ int token_tree: @token_tree ref
+);
+
+#keyset[id]
+macro_rules_visibilities(
+ int id: @macro_rules ref,
+ int visibility: @visibility ref
+);
+
+method_call_exprs(
+ unique int id: @method_call_expr
+);
+
+#keyset[id]
+method_call_expr_generic_arg_lists(
+ int id: @method_call_expr ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+method_call_expr_identifiers(
+ int id: @method_call_expr ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+method_call_expr_receivers(
+ int id: @method_call_expr ref,
+ int receiver: @expr ref
+);
+
+modules(
+ unique int id: @module
+);
+
+#keyset[id, index]
+module_attrs(
+ int id: @module ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+module_item_lists(
+ int id: @module ref,
+ int item_list: @item_list ref
+);
+
+#keyset[id]
+module_names(
+ int id: @module ref,
+ int name: @name ref
+);
+
+#keyset[id]
+module_visibilities(
+ int id: @module ref,
+ int visibility: @visibility ref
+);
+
+path_exprs(
+ unique int id: @path_expr
+);
+
+#keyset[id, index]
+path_expr_attrs(
+ int id: @path_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+path_pats(
+ unique int id: @path_pat
+);
+
+statics(
+ unique int id: @static
+);
+
+#keyset[id, index]
+static_attrs(
+ int id: @static ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+static_bodies(
+ int id: @static ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+static_is_mut(
+ int id: @static ref
+);
+
+#keyset[id]
+static_is_static(
+ int id: @static ref
+);
+
+#keyset[id]
+static_is_unsafe(
+ int id: @static ref
+);
+
+#keyset[id]
+static_names(
+ int id: @static ref,
+ int name: @name ref
+);
+
+#keyset[id]
+static_type_reprs(
+ int id: @static ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+static_visibilities(
+ int id: @static ref,
+ int visibility: @visibility ref
+);
+
+struct_exprs(
+ unique int id: @struct_expr
+);
+
+#keyset[id]
+struct_expr_struct_expr_field_lists(
+ int id: @struct_expr ref,
+ int struct_expr_field_list: @struct_expr_field_list ref
+);
+
+struct_pats(
+ unique int id: @struct_pat
+);
+
+#keyset[id]
+struct_pat_struct_pat_field_lists(
+ int id: @struct_pat ref,
+ int struct_pat_field_list: @struct_pat_field_list ref
+);
+
+traits(
+ unique int id: @trait
+);
+
+#keyset[id]
+trait_assoc_item_lists(
+ int id: @trait ref,
+ int assoc_item_list: @assoc_item_list ref
+);
+
+#keyset[id, index]
+trait_attrs(
+ int id: @trait ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+trait_generic_param_lists(
+ int id: @trait ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+trait_is_auto(
+ int id: @trait ref
+);
+
+#keyset[id]
+trait_is_unsafe(
+ int id: @trait ref
+);
+
+#keyset[id]
+trait_names(
+ int id: @trait ref,
+ int name: @name ref
+);
+
+#keyset[id]
+trait_type_bound_lists(
+ int id: @trait ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+trait_visibilities(
+ int id: @trait ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+trait_where_clauses(
+ int id: @trait ref,
+ int where_clause: @where_clause ref
+);
+
+trait_aliases(
+ unique int id: @trait_alias
+);
+
+#keyset[id, index]
+trait_alias_attrs(
+ int id: @trait_alias ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+trait_alias_generic_param_lists(
+ int id: @trait_alias ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+trait_alias_names(
+ int id: @trait_alias ref,
+ int name: @name ref
+);
+
+#keyset[id]
+trait_alias_type_bound_lists(
+ int id: @trait_alias ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+trait_alias_visibilities(
+ int id: @trait_alias ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+trait_alias_where_clauses(
+ int id: @trait_alias ref,
+ int where_clause: @where_clause ref
+);
+
+tuple_struct_pats(
+ unique int id: @tuple_struct_pat
+);
+
+#keyset[id, index]
+tuple_struct_pat_fields(
+ int id: @tuple_struct_pat ref,
+ int index: int ref,
+ int field: @pat ref
+);
+
+type_aliases(
+ unique int id: @type_alias
+);
+
+#keyset[id, index]
+type_alias_attrs(
+ int id: @type_alias ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+type_alias_generic_param_lists(
+ int id: @type_alias ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+type_alias_is_default(
+ int id: @type_alias ref
+);
+
+#keyset[id]
+type_alias_names(
+ int id: @type_alias ref,
+ int name: @name ref
+);
+
+#keyset[id]
+type_alias_type_reprs(
+ int id: @type_alias ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+type_alias_type_bound_lists(
+ int id: @type_alias ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+type_alias_visibilities(
+ int id: @type_alias ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+type_alias_where_clauses(
+ int id: @type_alias ref,
+ int where_clause: @where_clause ref
+);
+
+uses(
+ unique int id: @use
+);
+
+#keyset[id, index]
+use_attrs(
+ int id: @use ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+use_use_trees(
+ int id: @use ref,
+ int use_tree: @use_tree ref
+);
+
+#keyset[id]
+use_visibilities(
+ int id: @use ref,
+ int visibility: @visibility ref
+);
+
+enums(
+ unique int id: @enum
+);
+
+#keyset[id, index]
+enum_attrs(
+ int id: @enum ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+enum_generic_param_lists(
+ int id: @enum ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+enum_names(
+ int id: @enum ref,
+ int name: @name ref
+);
+
+#keyset[id]
+enum_variant_lists(
+ int id: @enum ref,
+ int variant_list: @variant_list ref
+);
+
+#keyset[id]
+enum_visibilities(
+ int id: @enum ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+enum_where_clauses(
+ int id: @enum ref,
+ int where_clause: @where_clause ref
+);
+
+for_exprs(
+ unique int id: @for_expr
+);
+
+#keyset[id, index]
+for_expr_attrs(
+ int id: @for_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+for_expr_iterables(
+ int id: @for_expr ref,
+ int iterable: @expr ref
+);
+
+#keyset[id]
+for_expr_pats(
+ int id: @for_expr ref,
+ int pat: @pat ref
+);
+
+loop_exprs(
+ unique int id: @loop_expr
+);
+
+#keyset[id, index]
+loop_expr_attrs(
+ int id: @loop_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+structs(
+ unique int id: @struct
+);
+
+#keyset[id, index]
+struct_attrs(
+ int id: @struct ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_field_lists_(
+ int id: @struct ref,
+ int field_list: @field_list ref
+);
+
+#keyset[id]
+struct_generic_param_lists(
+ int id: @struct ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+struct_names(
+ int id: @struct ref,
+ int name: @name ref
+);
+
+#keyset[id]
+struct_visibilities(
+ int id: @struct ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+struct_where_clauses(
+ int id: @struct ref,
+ int where_clause: @where_clause ref
+);
+
+unions(
+ unique int id: @union
+);
+
+#keyset[id, index]
+union_attrs(
+ int id: @union ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+union_generic_param_lists(
+ int id: @union ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+union_names(
+ int id: @union ref,
+ int name: @name ref
+);
+
+#keyset[id]
+union_struct_field_lists(
+ int id: @union ref,
+ int struct_field_list: @struct_field_list ref
+);
+
+#keyset[id]
+union_visibilities(
+ int id: @union ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+union_where_clauses(
+ int id: @union ref,
+ int where_clause: @where_clause ref
+);
+
+while_exprs(
+ unique int id: @while_expr
+);
+
+#keyset[id, index]
+while_expr_attrs(
+ int id: @while_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+while_expr_conditions(
+ int id: @while_expr ref,
+ int condition: @expr ref
+);
diff --git a/rust/downgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/upgrade.properties b/rust/downgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/upgrade.properties
new file mode 100644
index 000000000000..1d437ec8ac6b
--- /dev/null
+++ b/rust/downgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/upgrade.properties
@@ -0,0 +1,3 @@
+description: Add databaseMetadata relation
+compatibility: full
+databaseMetadata.rel: delete
diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme
index e3b3765116ec..f72a3d8d021c 100644
--- a/rust/ql/lib/rust.dbscheme
+++ b/rust/ql/lib/rust.dbscheme
@@ -108,6 +108,12 @@ yaml_locations(unique int locatable: @yaml_locatable ref,
@yaml_locatable = @yaml_node | @yaml_error;
+/*- Database metadata -*/
+databaseMetadata(
+ string metadataKey: string ref,
+ string value: string ref
+);
+
// from prefix.dbscheme
#keyset[id]
diff --git a/rust/ql/lib/upgrades/e3b3765116ecb8d796979f0b4787926cb8d691b5/old.dbscheme b/rust/ql/lib/upgrades/e3b3765116ecb8d796979f0b4787926cb8d691b5/old.dbscheme
new file mode 100644
index 000000000000..e3b3765116ec
--- /dev/null
+++ b/rust/ql/lib/upgrades/e3b3765116ecb8d796979f0b4787926cb8d691b5/old.dbscheme
@@ -0,0 +1,3632 @@
+// generated by codegen, do not edit
+
+// from ../shared/tree-sitter-extractor/src/generator/prefix.dbscheme
+/*- Files and folders -*/
+
+/**
+ * The location of an element.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_default(
+ unique int id: @location_default,
+ int file: @file ref,
+ int beginLine: int ref,
+ int beginColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+files(
+ unique int id: @file,
+ string name: string ref
+);
+
+folders(
+ unique int id: @folder,
+ string name: string ref
+);
+
+@container = @file | @folder
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref
+);
+
+/*- Empty location -*/
+
+empty_location(
+ int location: @location_default ref
+);
+
+/*- Source location prefix -*/
+
+/**
+ * The source location of the snapshot.
+ */
+sourceLocationPrefix(string prefix : string ref);
+
+/*- Diagnostic messages -*/
+
+diagnostics(
+ unique int id: @diagnostic,
+ int severity: int ref,
+ string error_tag: string ref,
+ string error_message: string ref,
+ string full_error_message: string ref,
+ int location: @location_default ref
+);
+
+/*- Diagnostic messages: severity -*/
+
+case @diagnostic.severity of
+ 10 = @diagnostic_debug
+| 20 = @diagnostic_info
+| 30 = @diagnostic_warning
+| 40 = @diagnostic_error
+;
+
+/*- YAML -*/
+
+#keyset[parent, idx]
+yaml (unique int id: @yaml_node,
+ int kind: int ref,
+ int parent: @yaml_node_parent ref,
+ int idx: int ref,
+ string tag: string ref,
+ string tostring: string ref);
+
+case @yaml_node.kind of
+ 0 = @yaml_scalar_node
+| 1 = @yaml_mapping_node
+| 2 = @yaml_sequence_node
+| 3 = @yaml_alias_node
+;
+
+@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node;
+
+@yaml_node_parent = @yaml_collection_node | @file;
+
+yaml_anchors (unique int node: @yaml_node ref,
+ string anchor: string ref);
+
+yaml_aliases (unique int alias: @yaml_alias_node ref,
+ string target: string ref);
+
+yaml_scalars (unique int scalar: @yaml_scalar_node ref,
+ int style: int ref,
+ string value: string ref);
+
+yaml_errors (unique int id: @yaml_error,
+ string message: string ref);
+
+yaml_locations(unique int locatable: @yaml_locatable ref,
+ int location: @location_default ref);
+
+@yaml_locatable = @yaml_node | @yaml_error;
+
+
+// from prefix.dbscheme
+#keyset[id]
+locatable_locations(
+ int id: @locatable ref,
+ int location: @location_default ref
+);
+
+
+// from schema
+
+@element =
+ @extractor_step
+| @locatable
+| @named_crate
+| @unextracted
+;
+
+extractor_steps(
+ unique int id: @extractor_step,
+ string action: string ref,
+ int duration_ms: int ref
+);
+
+#keyset[id]
+extractor_step_files(
+ int id: @extractor_step ref,
+ int file: @file ref
+);
+
+@locatable =
+ @ast_node
+| @crate
+;
+
+named_crates(
+ unique int id: @named_crate,
+ string name: string ref,
+ int crate: @crate ref
+);
+
+@unextracted =
+ @missing
+| @unimplemented
+;
+
+@ast_node =
+ @abi
+| @addressable
+| @arg_list
+| @asm_dir_spec
+| @asm_operand
+| @asm_operand_expr
+| @asm_option
+| @asm_piece
+| @asm_reg_spec
+| @assoc_item
+| @assoc_item_list
+| @attr
+| @callable
+| @closure_binder
+| @expr
+| @extern_item
+| @extern_item_list
+| @field_list
+| @format_args_arg
+| @generic_arg
+| @generic_arg_list
+| @generic_param
+| @generic_param_list
+| @item_list
+| @label
+| @let_else
+| @macro_items
+| @match_arm
+| @match_arm_list
+| @match_guard
+| @meta
+| @name
+| @param_base
+| @param_list
+| @parenthesized_arg_list
+| @pat
+| @path
+| @path_segment
+| @rename
+| @resolvable
+| @ret_type_repr
+| @return_type_syntax
+| @source_file
+| @stmt
+| @stmt_list
+| @struct_expr_field
+| @struct_expr_field_list
+| @struct_field
+| @struct_pat_field
+| @struct_pat_field_list
+| @token
+| @token_tree
+| @tuple_field
+| @type_bound
+| @type_bound_list
+| @type_repr
+| @use_bound_generic_arg
+| @use_bound_generic_args
+| @use_tree
+| @use_tree_list
+| @variant_list
+| @visibility
+| @where_clause
+| @where_pred
+;
+
+crates(
+ unique int id: @crate
+);
+
+#keyset[id]
+crate_names(
+ int id: @crate ref,
+ string name: string ref
+);
+
+#keyset[id]
+crate_versions(
+ int id: @crate ref,
+ string version: string ref
+);
+
+#keyset[id, index]
+crate_cfg_options(
+ int id: @crate ref,
+ int index: int ref,
+ string cfg_option: string ref
+);
+
+#keyset[id, index]
+crate_named_dependencies(
+ int id: @crate ref,
+ int index: int ref,
+ int named_dependency: @named_crate ref
+);
+
+missings(
+ unique int id: @missing
+);
+
+unimplementeds(
+ unique int id: @unimplemented
+);
+
+abis(
+ unique int id: @abi
+);
+
+#keyset[id]
+abi_abi_strings(
+ int id: @abi ref,
+ string abi_string: string ref
+);
+
+@addressable =
+ @item
+| @variant
+;
+
+#keyset[id]
+addressable_extended_canonical_paths(
+ int id: @addressable ref,
+ string extended_canonical_path: string ref
+);
+
+#keyset[id]
+addressable_crate_origins(
+ int id: @addressable ref,
+ string crate_origin: string ref
+);
+
+arg_lists(
+ unique int id: @arg_list
+);
+
+#keyset[id, index]
+arg_list_args(
+ int id: @arg_list ref,
+ int index: int ref,
+ int arg: @expr ref
+);
+
+asm_dir_specs(
+ unique int id: @asm_dir_spec
+);
+
+@asm_operand =
+ @asm_const
+| @asm_label
+| @asm_reg_operand
+| @asm_sym
+;
+
+asm_operand_exprs(
+ unique int id: @asm_operand_expr
+);
+
+#keyset[id]
+asm_operand_expr_in_exprs(
+ int id: @asm_operand_expr ref,
+ int in_expr: @expr ref
+);
+
+#keyset[id]
+asm_operand_expr_out_exprs(
+ int id: @asm_operand_expr ref,
+ int out_expr: @expr ref
+);
+
+asm_options(
+ unique int id: @asm_option
+);
+
+#keyset[id]
+asm_option_is_raw(
+ int id: @asm_option ref
+);
+
+@asm_piece =
+ @asm_clobber_abi
+| @asm_operand_named
+| @asm_options_list
+;
+
+asm_reg_specs(
+ unique int id: @asm_reg_spec
+);
+
+#keyset[id]
+asm_reg_spec_identifiers(
+ int id: @asm_reg_spec ref,
+ int identifier: @name_ref ref
+);
+
+@assoc_item =
+ @const
+| @function
+| @macro_call
+| @type_alias
+;
+
+assoc_item_lists(
+ unique int id: @assoc_item_list
+);
+
+#keyset[id, index]
+assoc_item_list_assoc_items(
+ int id: @assoc_item_list ref,
+ int index: int ref,
+ int assoc_item: @assoc_item ref
+);
+
+#keyset[id, index]
+assoc_item_list_attrs(
+ int id: @assoc_item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+attrs(
+ unique int id: @attr
+);
+
+#keyset[id]
+attr_meta(
+ int id: @attr ref,
+ int meta: @meta ref
+);
+
+@callable =
+ @closure_expr
+| @function
+;
+
+#keyset[id]
+callable_param_lists(
+ int id: @callable ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id, index]
+callable_attrs(
+ int id: @callable ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+closure_binders(
+ unique int id: @closure_binder
+);
+
+#keyset[id]
+closure_binder_generic_param_lists(
+ int id: @closure_binder ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+@expr =
+ @array_expr_internal
+| @asm_expr
+| @await_expr
+| @become_expr
+| @binary_expr
+| @break_expr
+| @call_expr_base
+| @cast_expr
+| @closure_expr
+| @continue_expr
+| @field_expr
+| @format_args_expr
+| @if_expr
+| @index_expr
+| @labelable_expr
+| @let_expr
+| @literal_expr
+| @macro_block_expr
+| @macro_expr
+| @match_expr
+| @offset_of_expr
+| @paren_expr
+| @path_expr_base
+| @prefix_expr
+| @range_expr
+| @ref_expr
+| @return_expr
+| @struct_expr
+| @try_expr
+| @tuple_expr
+| @underscore_expr
+| @yeet_expr
+| @yield_expr
+;
+
+@extern_item =
+ @function
+| @macro_call
+| @static
+| @type_alias
+;
+
+extern_item_lists(
+ unique int id: @extern_item_list
+);
+
+#keyset[id, index]
+extern_item_list_attrs(
+ int id: @extern_item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+extern_item_list_extern_items(
+ int id: @extern_item_list ref,
+ int index: int ref,
+ int extern_item: @extern_item ref
+);
+
+@field_list =
+ @struct_field_list
+| @tuple_field_list
+;
+
+format_args_args(
+ unique int id: @format_args_arg
+);
+
+#keyset[id]
+format_args_arg_exprs(
+ int id: @format_args_arg ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+format_args_arg_names(
+ int id: @format_args_arg ref,
+ int name: @name ref
+);
+
+@generic_arg =
+ @assoc_type_arg
+| @const_arg
+| @lifetime_arg
+| @type_arg
+;
+
+generic_arg_lists(
+ unique int id: @generic_arg_list
+);
+
+#keyset[id, index]
+generic_arg_list_generic_args(
+ int id: @generic_arg_list ref,
+ int index: int ref,
+ int generic_arg: @generic_arg ref
+);
+
+@generic_param =
+ @const_param
+| @lifetime_param
+| @type_param
+;
+
+generic_param_lists(
+ unique int id: @generic_param_list
+);
+
+#keyset[id, index]
+generic_param_list_generic_params(
+ int id: @generic_param_list ref,
+ int index: int ref,
+ int generic_param: @generic_param ref
+);
+
+item_lists(
+ unique int id: @item_list
+);
+
+#keyset[id, index]
+item_list_attrs(
+ int id: @item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+item_list_items(
+ int id: @item_list ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+labels(
+ unique int id: @label
+);
+
+#keyset[id]
+label_lifetimes(
+ int id: @label ref,
+ int lifetime: @lifetime ref
+);
+
+let_elses(
+ unique int id: @let_else
+);
+
+#keyset[id]
+let_else_block_exprs(
+ int id: @let_else ref,
+ int block_expr: @block_expr ref
+);
+
+macro_items(
+ unique int id: @macro_items
+);
+
+#keyset[id, index]
+macro_items_items(
+ int id: @macro_items ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+match_arms(
+ unique int id: @match_arm
+);
+
+#keyset[id, index]
+match_arm_attrs(
+ int id: @match_arm ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+match_arm_exprs(
+ int id: @match_arm ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+match_arm_guards(
+ int id: @match_arm ref,
+ int guard: @match_guard ref
+);
+
+#keyset[id]
+match_arm_pats(
+ int id: @match_arm ref,
+ int pat: @pat ref
+);
+
+match_arm_lists(
+ unique int id: @match_arm_list
+);
+
+#keyset[id, index]
+match_arm_list_arms(
+ int id: @match_arm_list ref,
+ int index: int ref,
+ int arm: @match_arm ref
+);
+
+#keyset[id, index]
+match_arm_list_attrs(
+ int id: @match_arm_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+match_guards(
+ unique int id: @match_guard
+);
+
+#keyset[id]
+match_guard_conditions(
+ int id: @match_guard ref,
+ int condition: @expr ref
+);
+
+meta(
+ unique int id: @meta
+);
+
+#keyset[id]
+meta_exprs(
+ int id: @meta ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+meta_is_unsafe(
+ int id: @meta ref
+);
+
+#keyset[id]
+meta_paths(
+ int id: @meta ref,
+ int path: @path ref
+);
+
+#keyset[id]
+meta_token_trees(
+ int id: @meta ref,
+ int token_tree: @token_tree ref
+);
+
+names(
+ unique int id: @name
+);
+
+#keyset[id]
+name_texts(
+ int id: @name ref,
+ string text: string ref
+);
+
+@param_base =
+ @param
+| @self_param
+;
+
+#keyset[id, index]
+param_base_attrs(
+ int id: @param_base ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+param_base_type_reprs(
+ int id: @param_base ref,
+ int type_repr: @type_repr ref
+);
+
+param_lists(
+ unique int id: @param_list
+);
+
+#keyset[id, index]
+param_list_params(
+ int id: @param_list ref,
+ int index: int ref,
+ int param: @param ref
+);
+
+#keyset[id]
+param_list_self_params(
+ int id: @param_list ref,
+ int self_param: @self_param ref
+);
+
+parenthesized_arg_lists(
+ unique int id: @parenthesized_arg_list
+);
+
+#keyset[id, index]
+parenthesized_arg_list_type_args(
+ int id: @parenthesized_arg_list ref,
+ int index: int ref,
+ int type_arg: @type_arg ref
+);
+
+@pat =
+ @box_pat
+| @const_block_pat
+| @ident_pat
+| @literal_pat
+| @macro_pat
+| @or_pat
+| @paren_pat
+| @path_pat
+| @range_pat
+| @ref_pat
+| @rest_pat
+| @slice_pat
+| @struct_pat
+| @tuple_pat
+| @tuple_struct_pat
+| @wildcard_pat
+;
+
+paths(
+ unique int id: @path
+);
+
+#keyset[id]
+path_qualifiers(
+ int id: @path ref,
+ int qualifier: @path ref
+);
+
+#keyset[id]
+path_segments_(
+ int id: @path ref,
+ int segment: @path_segment ref
+);
+
+path_segments(
+ unique int id: @path_segment
+);
+
+#keyset[id]
+path_segment_generic_arg_lists(
+ int id: @path_segment ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+path_segment_identifiers(
+ int id: @path_segment ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+path_segment_parenthesized_arg_lists(
+ int id: @path_segment ref,
+ int parenthesized_arg_list: @parenthesized_arg_list ref
+);
+
+#keyset[id]
+path_segment_ret_types(
+ int id: @path_segment ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+path_segment_return_type_syntaxes(
+ int id: @path_segment ref,
+ int return_type_syntax: @return_type_syntax ref
+);
+
+#keyset[id]
+path_segment_type_reprs(
+ int id: @path_segment ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+path_segment_trait_type_reprs(
+ int id: @path_segment ref,
+ int trait_type_repr: @path_type_repr ref
+);
+
+renames(
+ unique int id: @rename
+);
+
+#keyset[id]
+rename_names(
+ int id: @rename ref,
+ int name: @name ref
+);
+
+@resolvable =
+ @method_call_expr
+| @path_ast_node
+;
+
+#keyset[id]
+resolvable_resolved_paths(
+ int id: @resolvable ref,
+ string resolved_path: string ref
+);
+
+#keyset[id]
+resolvable_resolved_crate_origins(
+ int id: @resolvable ref,
+ string resolved_crate_origin: string ref
+);
+
+ret_type_reprs(
+ unique int id: @ret_type_repr
+);
+
+#keyset[id]
+ret_type_repr_type_reprs(
+ int id: @ret_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+return_type_syntaxes(
+ unique int id: @return_type_syntax
+);
+
+source_files(
+ unique int id: @source_file
+);
+
+#keyset[id, index]
+source_file_attrs(
+ int id: @source_file ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+source_file_items(
+ int id: @source_file ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+@stmt =
+ @expr_stmt
+| @item
+| @let_stmt
+;
+
+stmt_lists(
+ unique int id: @stmt_list
+);
+
+#keyset[id, index]
+stmt_list_attrs(
+ int id: @stmt_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+stmt_list_statements(
+ int id: @stmt_list ref,
+ int index: int ref,
+ int statement: @stmt ref
+);
+
+#keyset[id]
+stmt_list_tail_exprs(
+ int id: @stmt_list ref,
+ int tail_expr: @expr ref
+);
+
+struct_expr_fields(
+ unique int id: @struct_expr_field
+);
+
+#keyset[id, index]
+struct_expr_field_attrs(
+ int id: @struct_expr_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_expr_field_exprs(
+ int id: @struct_expr_field ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+struct_expr_field_identifiers(
+ int id: @struct_expr_field ref,
+ int identifier: @name_ref ref
+);
+
+struct_expr_field_lists(
+ unique int id: @struct_expr_field_list
+);
+
+#keyset[id, index]
+struct_expr_field_list_attrs(
+ int id: @struct_expr_field_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+struct_expr_field_list_fields(
+ int id: @struct_expr_field_list ref,
+ int index: int ref,
+ int field: @struct_expr_field ref
+);
+
+#keyset[id]
+struct_expr_field_list_spreads(
+ int id: @struct_expr_field_list ref,
+ int spread: @expr ref
+);
+
+struct_fields(
+ unique int id: @struct_field
+);
+
+#keyset[id, index]
+struct_field_attrs(
+ int id: @struct_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_field_defaults(
+ int id: @struct_field ref,
+ int default: @expr ref
+);
+
+#keyset[id]
+struct_field_is_unsafe(
+ int id: @struct_field ref
+);
+
+#keyset[id]
+struct_field_names(
+ int id: @struct_field ref,
+ int name: @name ref
+);
+
+#keyset[id]
+struct_field_type_reprs(
+ int id: @struct_field ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+struct_field_visibilities(
+ int id: @struct_field ref,
+ int visibility: @visibility ref
+);
+
+struct_pat_fields(
+ unique int id: @struct_pat_field
+);
+
+#keyset[id, index]
+struct_pat_field_attrs(
+ int id: @struct_pat_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_pat_field_identifiers(
+ int id: @struct_pat_field ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+struct_pat_field_pats(
+ int id: @struct_pat_field ref,
+ int pat: @pat ref
+);
+
+struct_pat_field_lists(
+ unique int id: @struct_pat_field_list
+);
+
+#keyset[id, index]
+struct_pat_field_list_fields(
+ int id: @struct_pat_field_list ref,
+ int index: int ref,
+ int field: @struct_pat_field ref
+);
+
+#keyset[id]
+struct_pat_field_list_rest_pats(
+ int id: @struct_pat_field_list ref,
+ int rest_pat: @rest_pat ref
+);
+
+@token =
+ @comment
+;
+
+token_trees(
+ unique int id: @token_tree
+);
+
+tuple_fields(
+ unique int id: @tuple_field
+);
+
+#keyset[id, index]
+tuple_field_attrs(
+ int id: @tuple_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+tuple_field_type_reprs(
+ int id: @tuple_field ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+tuple_field_visibilities(
+ int id: @tuple_field ref,
+ int visibility: @visibility ref
+);
+
+type_bounds(
+ unique int id: @type_bound
+);
+
+#keyset[id]
+type_bound_is_async(
+ int id: @type_bound ref
+);
+
+#keyset[id]
+type_bound_is_const(
+ int id: @type_bound ref
+);
+
+#keyset[id]
+type_bound_lifetimes(
+ int id: @type_bound ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+type_bound_type_reprs(
+ int id: @type_bound ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+type_bound_use_bound_generic_args(
+ int id: @type_bound ref,
+ int use_bound_generic_args: @use_bound_generic_args ref
+);
+
+type_bound_lists(
+ unique int id: @type_bound_list
+);
+
+#keyset[id, index]
+type_bound_list_bounds(
+ int id: @type_bound_list ref,
+ int index: int ref,
+ int bound: @type_bound ref
+);
+
+@type_repr =
+ @array_type_repr
+| @dyn_trait_type_repr
+| @fn_ptr_type_repr
+| @for_type_repr
+| @impl_trait_type_repr
+| @infer_type_repr
+| @macro_type_repr
+| @never_type_repr
+| @paren_type_repr
+| @path_type_repr
+| @ptr_type_repr
+| @ref_type_repr
+| @slice_type_repr
+| @tuple_type_repr
+;
+
+@use_bound_generic_arg =
+ @lifetime
+| @name_ref
+;
+
+use_bound_generic_args(
+ unique int id: @use_bound_generic_args
+);
+
+#keyset[id, index]
+use_bound_generic_args_use_bound_generic_args(
+ int id: @use_bound_generic_args ref,
+ int index: int ref,
+ int use_bound_generic_arg: @use_bound_generic_arg ref
+);
+
+use_trees(
+ unique int id: @use_tree
+);
+
+#keyset[id]
+use_tree_is_glob(
+ int id: @use_tree ref
+);
+
+#keyset[id]
+use_tree_paths(
+ int id: @use_tree ref,
+ int path: @path ref
+);
+
+#keyset[id]
+use_tree_renames(
+ int id: @use_tree ref,
+ int rename: @rename ref
+);
+
+#keyset[id]
+use_tree_use_tree_lists(
+ int id: @use_tree ref,
+ int use_tree_list: @use_tree_list ref
+);
+
+use_tree_lists(
+ unique int id: @use_tree_list
+);
+
+#keyset[id, index]
+use_tree_list_use_trees(
+ int id: @use_tree_list ref,
+ int index: int ref,
+ int use_tree: @use_tree ref
+);
+
+variant_lists(
+ unique int id: @variant_list
+);
+
+#keyset[id, index]
+variant_list_variants(
+ int id: @variant_list ref,
+ int index: int ref,
+ int variant: @variant ref
+);
+
+visibilities(
+ unique int id: @visibility
+);
+
+#keyset[id]
+visibility_paths(
+ int id: @visibility ref,
+ int path: @path ref
+);
+
+where_clauses(
+ unique int id: @where_clause
+);
+
+#keyset[id, index]
+where_clause_predicates(
+ int id: @where_clause ref,
+ int index: int ref,
+ int predicate: @where_pred ref
+);
+
+where_preds(
+ unique int id: @where_pred
+);
+
+#keyset[id]
+where_pred_generic_param_lists(
+ int id: @where_pred ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+where_pred_lifetimes(
+ int id: @where_pred ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+where_pred_type_reprs(
+ int id: @where_pred ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+where_pred_type_bound_lists(
+ int id: @where_pred ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+array_expr_internals(
+ unique int id: @array_expr_internal
+);
+
+#keyset[id, index]
+array_expr_internal_attrs(
+ int id: @array_expr_internal ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+array_expr_internal_exprs(
+ int id: @array_expr_internal ref,
+ int index: int ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+array_expr_internal_is_semicolon(
+ int id: @array_expr_internal ref
+);
+
+array_type_reprs(
+ unique int id: @array_type_repr
+);
+
+#keyset[id]
+array_type_repr_const_args(
+ int id: @array_type_repr ref,
+ int const_arg: @const_arg ref
+);
+
+#keyset[id]
+array_type_repr_element_type_reprs(
+ int id: @array_type_repr ref,
+ int element_type_repr: @type_repr ref
+);
+
+asm_clobber_abis(
+ unique int id: @asm_clobber_abi
+);
+
+asm_consts(
+ unique int id: @asm_const
+);
+
+#keyset[id]
+asm_const_exprs(
+ int id: @asm_const ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+asm_const_is_const(
+ int id: @asm_const ref
+);
+
+asm_exprs(
+ unique int id: @asm_expr
+);
+
+#keyset[id, index]
+asm_expr_asm_pieces(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int asm_piece: @asm_piece ref
+);
+
+#keyset[id, index]
+asm_expr_attrs(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+asm_expr_templates(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int template: @expr ref
+);
+
+asm_labels(
+ unique int id: @asm_label
+);
+
+#keyset[id]
+asm_label_block_exprs(
+ int id: @asm_label ref,
+ int block_expr: @block_expr ref
+);
+
+asm_operand_nameds(
+ unique int id: @asm_operand_named
+);
+
+#keyset[id]
+asm_operand_named_asm_operands(
+ int id: @asm_operand_named ref,
+ int asm_operand: @asm_operand ref
+);
+
+#keyset[id]
+asm_operand_named_names(
+ int id: @asm_operand_named ref,
+ int name: @name ref
+);
+
+asm_options_lists(
+ unique int id: @asm_options_list
+);
+
+#keyset[id, index]
+asm_options_list_asm_options(
+ int id: @asm_options_list ref,
+ int index: int ref,
+ int asm_option: @asm_option ref
+);
+
+asm_reg_operands(
+ unique int id: @asm_reg_operand
+);
+
+#keyset[id]
+asm_reg_operand_asm_dir_specs(
+ int id: @asm_reg_operand ref,
+ int asm_dir_spec: @asm_dir_spec ref
+);
+
+#keyset[id]
+asm_reg_operand_asm_operand_exprs(
+ int id: @asm_reg_operand ref,
+ int asm_operand_expr: @asm_operand_expr ref
+);
+
+#keyset[id]
+asm_reg_operand_asm_reg_specs(
+ int id: @asm_reg_operand ref,
+ int asm_reg_spec: @asm_reg_spec ref
+);
+
+asm_syms(
+ unique int id: @asm_sym
+);
+
+#keyset[id]
+asm_sym_paths(
+ int id: @asm_sym ref,
+ int path: @path ref
+);
+
+assoc_type_args(
+ unique int id: @assoc_type_arg
+);
+
+#keyset[id]
+assoc_type_arg_const_args(
+ int id: @assoc_type_arg ref,
+ int const_arg: @const_arg ref
+);
+
+#keyset[id]
+assoc_type_arg_generic_arg_lists(
+ int id: @assoc_type_arg ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+assoc_type_arg_identifiers(
+ int id: @assoc_type_arg ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+assoc_type_arg_param_lists(
+ int id: @assoc_type_arg ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id]
+assoc_type_arg_ret_types(
+ int id: @assoc_type_arg ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+assoc_type_arg_return_type_syntaxes(
+ int id: @assoc_type_arg ref,
+ int return_type_syntax: @return_type_syntax ref
+);
+
+#keyset[id]
+assoc_type_arg_type_reprs(
+ int id: @assoc_type_arg ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+assoc_type_arg_type_bound_lists(
+ int id: @assoc_type_arg ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+await_exprs(
+ unique int id: @await_expr
+);
+
+#keyset[id, index]
+await_expr_attrs(
+ int id: @await_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+await_expr_exprs(
+ int id: @await_expr ref,
+ int expr: @expr ref
+);
+
+become_exprs(
+ unique int id: @become_expr
+);
+
+#keyset[id, index]
+become_expr_attrs(
+ int id: @become_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+become_expr_exprs(
+ int id: @become_expr ref,
+ int expr: @expr ref
+);
+
+binary_exprs(
+ unique int id: @binary_expr
+);
+
+#keyset[id, index]
+binary_expr_attrs(
+ int id: @binary_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+binary_expr_lhs(
+ int id: @binary_expr ref,
+ int lhs: @expr ref
+);
+
+#keyset[id]
+binary_expr_operator_names(
+ int id: @binary_expr ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+binary_expr_rhs(
+ int id: @binary_expr ref,
+ int rhs: @expr ref
+);
+
+box_pats(
+ unique int id: @box_pat
+);
+
+#keyset[id]
+box_pat_pats(
+ int id: @box_pat ref,
+ int pat: @pat ref
+);
+
+break_exprs(
+ unique int id: @break_expr
+);
+
+#keyset[id, index]
+break_expr_attrs(
+ int id: @break_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+break_expr_exprs(
+ int id: @break_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+break_expr_lifetimes(
+ int id: @break_expr ref,
+ int lifetime: @lifetime ref
+);
+
+@call_expr_base =
+ @call_expr
+| @method_call_expr
+;
+
+#keyset[id]
+call_expr_base_arg_lists(
+ int id: @call_expr_base ref,
+ int arg_list: @arg_list ref
+);
+
+#keyset[id, index]
+call_expr_base_attrs(
+ int id: @call_expr_base ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+cast_exprs(
+ unique int id: @cast_expr
+);
+
+#keyset[id, index]
+cast_expr_attrs(
+ int id: @cast_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+cast_expr_exprs(
+ int id: @cast_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+cast_expr_type_reprs(
+ int id: @cast_expr ref,
+ int type_repr: @type_repr ref
+);
+
+closure_exprs(
+ unique int id: @closure_expr
+);
+
+#keyset[id]
+closure_expr_bodies(
+ int id: @closure_expr ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+closure_expr_closure_binders(
+ int id: @closure_expr ref,
+ int closure_binder: @closure_binder ref
+);
+
+#keyset[id]
+closure_expr_is_async(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_const(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_gen(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_move(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_static(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_ret_types(
+ int id: @closure_expr ref,
+ int ret_type: @ret_type_repr ref
+);
+
+comments(
+ unique int id: @comment,
+ int parent: @ast_node ref,
+ string text: string ref
+);
+
+const_args(
+ unique int id: @const_arg
+);
+
+#keyset[id]
+const_arg_exprs(
+ int id: @const_arg ref,
+ int expr: @expr ref
+);
+
+const_block_pats(
+ unique int id: @const_block_pat
+);
+
+#keyset[id]
+const_block_pat_block_exprs(
+ int id: @const_block_pat ref,
+ int block_expr: @block_expr ref
+);
+
+#keyset[id]
+const_block_pat_is_const(
+ int id: @const_block_pat ref
+);
+
+const_params(
+ unique int id: @const_param
+);
+
+#keyset[id, index]
+const_param_attrs(
+ int id: @const_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+const_param_default_vals(
+ int id: @const_param ref,
+ int default_val: @const_arg ref
+);
+
+#keyset[id]
+const_param_is_const(
+ int id: @const_param ref
+);
+
+#keyset[id]
+const_param_names(
+ int id: @const_param ref,
+ int name: @name ref
+);
+
+#keyset[id]
+const_param_type_reprs(
+ int id: @const_param ref,
+ int type_repr: @type_repr ref
+);
+
+continue_exprs(
+ unique int id: @continue_expr
+);
+
+#keyset[id, index]
+continue_expr_attrs(
+ int id: @continue_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+continue_expr_lifetimes(
+ int id: @continue_expr ref,
+ int lifetime: @lifetime ref
+);
+
+dyn_trait_type_reprs(
+ unique int id: @dyn_trait_type_repr
+);
+
+#keyset[id]
+dyn_trait_type_repr_type_bound_lists(
+ int id: @dyn_trait_type_repr ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+expr_stmts(
+ unique int id: @expr_stmt
+);
+
+#keyset[id]
+expr_stmt_exprs(
+ int id: @expr_stmt ref,
+ int expr: @expr ref
+);
+
+field_exprs(
+ unique int id: @field_expr
+);
+
+#keyset[id, index]
+field_expr_attrs(
+ int id: @field_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+field_expr_containers(
+ int id: @field_expr ref,
+ int container: @expr ref
+);
+
+#keyset[id]
+field_expr_identifiers(
+ int id: @field_expr ref,
+ int identifier: @name_ref ref
+);
+
+fn_ptr_type_reprs(
+ unique int id: @fn_ptr_type_repr
+);
+
+#keyset[id]
+fn_ptr_type_repr_abis(
+ int id: @fn_ptr_type_repr ref,
+ int abi: @abi ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_async(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_const(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_unsafe(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_param_lists(
+ int id: @fn_ptr_type_repr ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_ret_types(
+ int id: @fn_ptr_type_repr ref,
+ int ret_type: @ret_type_repr ref
+);
+
+for_type_reprs(
+ unique int id: @for_type_repr
+);
+
+#keyset[id]
+for_type_repr_generic_param_lists(
+ int id: @for_type_repr ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+for_type_repr_type_reprs(
+ int id: @for_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+format_args_exprs(
+ unique int id: @format_args_expr
+);
+
+#keyset[id, index]
+format_args_expr_args(
+ int id: @format_args_expr ref,
+ int index: int ref,
+ int arg: @format_args_arg ref
+);
+
+#keyset[id, index]
+format_args_expr_attrs(
+ int id: @format_args_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+format_args_expr_templates(
+ int id: @format_args_expr ref,
+ int template: @expr ref
+);
+
+ident_pats(
+ unique int id: @ident_pat
+);
+
+#keyset[id, index]
+ident_pat_attrs(
+ int id: @ident_pat ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+ident_pat_is_mut(
+ int id: @ident_pat ref
+);
+
+#keyset[id]
+ident_pat_is_ref(
+ int id: @ident_pat ref
+);
+
+#keyset[id]
+ident_pat_names(
+ int id: @ident_pat ref,
+ int name: @name ref
+);
+
+#keyset[id]
+ident_pat_pats(
+ int id: @ident_pat ref,
+ int pat: @pat ref
+);
+
+if_exprs(
+ unique int id: @if_expr
+);
+
+#keyset[id, index]
+if_expr_attrs(
+ int id: @if_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+if_expr_conditions(
+ int id: @if_expr ref,
+ int condition: @expr ref
+);
+
+#keyset[id]
+if_expr_elses(
+ int id: @if_expr ref,
+ int else: @expr ref
+);
+
+#keyset[id]
+if_expr_thens(
+ int id: @if_expr ref,
+ int then: @block_expr ref
+);
+
+impl_trait_type_reprs(
+ unique int id: @impl_trait_type_repr
+);
+
+#keyset[id]
+impl_trait_type_repr_type_bound_lists(
+ int id: @impl_trait_type_repr ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+index_exprs(
+ unique int id: @index_expr
+);
+
+#keyset[id, index]
+index_expr_attrs(
+ int id: @index_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+index_expr_bases(
+ int id: @index_expr ref,
+ int base: @expr ref
+);
+
+#keyset[id]
+index_expr_indices(
+ int id: @index_expr ref,
+ int index: @expr ref
+);
+
+infer_type_reprs(
+ unique int id: @infer_type_repr
+);
+
+@item =
+ @adt
+| @const
+| @extern_block
+| @extern_crate
+| @function
+| @impl
+| @macro_call
+| @macro_def
+| @macro_rules
+| @module
+| @static
+| @trait
+| @trait_alias
+| @type_alias
+| @use
+;
+
+#keyset[id]
+item_attribute_macro_expansions(
+ int id: @item ref,
+ int attribute_macro_expansion: @macro_items ref
+);
+
+@labelable_expr =
+ @block_expr
+| @looping_expr
+;
+
+#keyset[id]
+labelable_expr_labels(
+ int id: @labelable_expr ref,
+ int label: @label ref
+);
+
+let_exprs(
+ unique int id: @let_expr
+);
+
+#keyset[id, index]
+let_expr_attrs(
+ int id: @let_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+let_expr_scrutinees(
+ int id: @let_expr ref,
+ int scrutinee: @expr ref
+);
+
+#keyset[id]
+let_expr_pats(
+ int id: @let_expr ref,
+ int pat: @pat ref
+);
+
+let_stmts(
+ unique int id: @let_stmt
+);
+
+#keyset[id, index]
+let_stmt_attrs(
+ int id: @let_stmt ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+let_stmt_initializers(
+ int id: @let_stmt ref,
+ int initializer: @expr ref
+);
+
+#keyset[id]
+let_stmt_let_elses(
+ int id: @let_stmt ref,
+ int let_else: @let_else ref
+);
+
+#keyset[id]
+let_stmt_pats(
+ int id: @let_stmt ref,
+ int pat: @pat ref
+);
+
+#keyset[id]
+let_stmt_type_reprs(
+ int id: @let_stmt ref,
+ int type_repr: @type_repr ref
+);
+
+lifetimes(
+ unique int id: @lifetime
+);
+
+#keyset[id]
+lifetime_texts(
+ int id: @lifetime ref,
+ string text: string ref
+);
+
+lifetime_args(
+ unique int id: @lifetime_arg
+);
+
+#keyset[id]
+lifetime_arg_lifetimes(
+ int id: @lifetime_arg ref,
+ int lifetime: @lifetime ref
+);
+
+lifetime_params(
+ unique int id: @lifetime_param
+);
+
+#keyset[id, index]
+lifetime_param_attrs(
+ int id: @lifetime_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+lifetime_param_lifetimes(
+ int id: @lifetime_param ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+lifetime_param_type_bound_lists(
+ int id: @lifetime_param ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+literal_exprs(
+ unique int id: @literal_expr
+);
+
+#keyset[id, index]
+literal_expr_attrs(
+ int id: @literal_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+literal_expr_text_values(
+ int id: @literal_expr ref,
+ string text_value: string ref
+);
+
+literal_pats(
+ unique int id: @literal_pat
+);
+
+#keyset[id]
+literal_pat_literals(
+ int id: @literal_pat ref,
+ int literal: @literal_expr ref
+);
+
+macro_block_exprs(
+ unique int id: @macro_block_expr
+);
+
+#keyset[id]
+macro_block_expr_tail_exprs(
+ int id: @macro_block_expr ref,
+ int tail_expr: @expr ref
+);
+
+#keyset[id, index]
+macro_block_expr_statements(
+ int id: @macro_block_expr ref,
+ int index: int ref,
+ int statement: @stmt ref
+);
+
+macro_exprs(
+ unique int id: @macro_expr
+);
+
+#keyset[id]
+macro_expr_macro_calls(
+ int id: @macro_expr ref,
+ int macro_call: @macro_call ref
+);
+
+macro_pats(
+ unique int id: @macro_pat
+);
+
+#keyset[id]
+macro_pat_macro_calls(
+ int id: @macro_pat ref,
+ int macro_call: @macro_call ref
+);
+
+macro_type_reprs(
+ unique int id: @macro_type_repr
+);
+
+#keyset[id]
+macro_type_repr_macro_calls(
+ int id: @macro_type_repr ref,
+ int macro_call: @macro_call ref
+);
+
+match_exprs(
+ unique int id: @match_expr
+);
+
+#keyset[id, index]
+match_expr_attrs(
+ int id: @match_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+match_expr_scrutinees(
+ int id: @match_expr ref,
+ int scrutinee: @expr ref
+);
+
+#keyset[id]
+match_expr_match_arm_lists(
+ int id: @match_expr ref,
+ int match_arm_list: @match_arm_list ref
+);
+
+name_refs(
+ unique int id: @name_ref
+);
+
+#keyset[id]
+name_ref_texts(
+ int id: @name_ref ref,
+ string text: string ref
+);
+
+never_type_reprs(
+ unique int id: @never_type_repr
+);
+
+offset_of_exprs(
+ unique int id: @offset_of_expr
+);
+
+#keyset[id, index]
+offset_of_expr_attrs(
+ int id: @offset_of_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+offset_of_expr_fields(
+ int id: @offset_of_expr ref,
+ int index: int ref,
+ int field: @name_ref ref
+);
+
+#keyset[id]
+offset_of_expr_type_reprs(
+ int id: @offset_of_expr ref,
+ int type_repr: @type_repr ref
+);
+
+or_pats(
+ unique int id: @or_pat
+);
+
+#keyset[id, index]
+or_pat_pats(
+ int id: @or_pat ref,
+ int index: int ref,
+ int pat: @pat ref
+);
+
+params(
+ unique int id: @param
+);
+
+#keyset[id]
+param_pats(
+ int id: @param ref,
+ int pat: @pat ref
+);
+
+paren_exprs(
+ unique int id: @paren_expr
+);
+
+#keyset[id, index]
+paren_expr_attrs(
+ int id: @paren_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+paren_expr_exprs(
+ int id: @paren_expr ref,
+ int expr: @expr ref
+);
+
+paren_pats(
+ unique int id: @paren_pat
+);
+
+#keyset[id]
+paren_pat_pats(
+ int id: @paren_pat ref,
+ int pat: @pat ref
+);
+
+paren_type_reprs(
+ unique int id: @paren_type_repr
+);
+
+#keyset[id]
+paren_type_repr_type_reprs(
+ int id: @paren_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+@path_ast_node =
+ @path_expr
+| @path_pat
+| @struct_expr
+| @struct_pat
+| @tuple_struct_pat
+;
+
+#keyset[id]
+path_ast_node_paths(
+ int id: @path_ast_node ref,
+ int path: @path ref
+);
+
+@path_expr_base =
+ @path_expr
+;
+
+path_type_reprs(
+ unique int id: @path_type_repr
+);
+
+#keyset[id]
+path_type_repr_paths(
+ int id: @path_type_repr ref,
+ int path: @path ref
+);
+
+prefix_exprs(
+ unique int id: @prefix_expr
+);
+
+#keyset[id, index]
+prefix_expr_attrs(
+ int id: @prefix_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+prefix_expr_exprs(
+ int id: @prefix_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+prefix_expr_operator_names(
+ int id: @prefix_expr ref,
+ string operator_name: string ref
+);
+
+ptr_type_reprs(
+ unique int id: @ptr_type_repr
+);
+
+#keyset[id]
+ptr_type_repr_is_const(
+ int id: @ptr_type_repr ref
+);
+
+#keyset[id]
+ptr_type_repr_is_mut(
+ int id: @ptr_type_repr ref
+);
+
+#keyset[id]
+ptr_type_repr_type_reprs(
+ int id: @ptr_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+range_exprs(
+ unique int id: @range_expr
+);
+
+#keyset[id, index]
+range_expr_attrs(
+ int id: @range_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+range_expr_ends(
+ int id: @range_expr ref,
+ int end: @expr ref
+);
+
+#keyset[id]
+range_expr_operator_names(
+ int id: @range_expr ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+range_expr_starts(
+ int id: @range_expr ref,
+ int start: @expr ref
+);
+
+range_pats(
+ unique int id: @range_pat
+);
+
+#keyset[id]
+range_pat_ends(
+ int id: @range_pat ref,
+ int end: @pat ref
+);
+
+#keyset[id]
+range_pat_operator_names(
+ int id: @range_pat ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+range_pat_starts(
+ int id: @range_pat ref,
+ int start: @pat ref
+);
+
+ref_exprs(
+ unique int id: @ref_expr
+);
+
+#keyset[id, index]
+ref_expr_attrs(
+ int id: @ref_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+ref_expr_exprs(
+ int id: @ref_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+ref_expr_is_const(
+ int id: @ref_expr ref
+);
+
+#keyset[id]
+ref_expr_is_mut(
+ int id: @ref_expr ref
+);
+
+#keyset[id]
+ref_expr_is_raw(
+ int id: @ref_expr ref
+);
+
+ref_pats(
+ unique int id: @ref_pat
+);
+
+#keyset[id]
+ref_pat_is_mut(
+ int id: @ref_pat ref
+);
+
+#keyset[id]
+ref_pat_pats(
+ int id: @ref_pat ref,
+ int pat: @pat ref
+);
+
+ref_type_reprs(
+ unique int id: @ref_type_repr
+);
+
+#keyset[id]
+ref_type_repr_is_mut(
+ int id: @ref_type_repr ref
+);
+
+#keyset[id]
+ref_type_repr_lifetimes(
+ int id: @ref_type_repr ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+ref_type_repr_type_reprs(
+ int id: @ref_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+rest_pats(
+ unique int id: @rest_pat
+);
+
+#keyset[id, index]
+rest_pat_attrs(
+ int id: @rest_pat ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+return_exprs(
+ unique int id: @return_expr
+);
+
+#keyset[id, index]
+return_expr_attrs(
+ int id: @return_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+return_expr_exprs(
+ int id: @return_expr ref,
+ int expr: @expr ref
+);
+
+self_params(
+ unique int id: @self_param
+);
+
+#keyset[id]
+self_param_is_ref(
+ int id: @self_param ref
+);
+
+#keyset[id]
+self_param_is_mut(
+ int id: @self_param ref
+);
+
+#keyset[id]
+self_param_lifetimes(
+ int id: @self_param ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+self_param_names(
+ int id: @self_param ref,
+ int name: @name ref
+);
+
+slice_pats(
+ unique int id: @slice_pat
+);
+
+#keyset[id, index]
+slice_pat_pats(
+ int id: @slice_pat ref,
+ int index: int ref,
+ int pat: @pat ref
+);
+
+slice_type_reprs(
+ unique int id: @slice_type_repr
+);
+
+#keyset[id]
+slice_type_repr_type_reprs(
+ int id: @slice_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+struct_field_lists(
+ unique int id: @struct_field_list
+);
+
+#keyset[id, index]
+struct_field_list_fields(
+ int id: @struct_field_list ref,
+ int index: int ref,
+ int field: @struct_field ref
+);
+
+try_exprs(
+ unique int id: @try_expr
+);
+
+#keyset[id, index]
+try_expr_attrs(
+ int id: @try_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+try_expr_exprs(
+ int id: @try_expr ref,
+ int expr: @expr ref
+);
+
+tuple_exprs(
+ unique int id: @tuple_expr
+);
+
+#keyset[id, index]
+tuple_expr_attrs(
+ int id: @tuple_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+tuple_expr_fields(
+ int id: @tuple_expr ref,
+ int index: int ref,
+ int field: @expr ref
+);
+
+tuple_field_lists(
+ unique int id: @tuple_field_list
+);
+
+#keyset[id, index]
+tuple_field_list_fields(
+ int id: @tuple_field_list ref,
+ int index: int ref,
+ int field: @tuple_field ref
+);
+
+tuple_pats(
+ unique int id: @tuple_pat
+);
+
+#keyset[id, index]
+tuple_pat_fields(
+ int id: @tuple_pat ref,
+ int index: int ref,
+ int field: @pat ref
+);
+
+tuple_type_reprs(
+ unique int id: @tuple_type_repr
+);
+
+#keyset[id, index]
+tuple_type_repr_fields(
+ int id: @tuple_type_repr ref,
+ int index: int ref,
+ int field: @type_repr ref
+);
+
+type_args(
+ unique int id: @type_arg
+);
+
+#keyset[id]
+type_arg_type_reprs(
+ int id: @type_arg ref,
+ int type_repr: @type_repr ref
+);
+
+type_params(
+ unique int id: @type_param
+);
+
+#keyset[id, index]
+type_param_attrs(
+ int id: @type_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+type_param_default_types(
+ int id: @type_param ref,
+ int default_type: @type_repr ref
+);
+
+#keyset[id]
+type_param_names(
+ int id: @type_param ref,
+ int name: @name ref
+);
+
+#keyset[id]
+type_param_type_bound_lists(
+ int id: @type_param ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+underscore_exprs(
+ unique int id: @underscore_expr
+);
+
+#keyset[id, index]
+underscore_expr_attrs(
+ int id: @underscore_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+variants(
+ unique int id: @variant
+);
+
+#keyset[id, index]
+variant_attrs(
+ int id: @variant ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+variant_discriminants(
+ int id: @variant ref,
+ int discriminant: @expr ref
+);
+
+#keyset[id]
+variant_field_lists(
+ int id: @variant ref,
+ int field_list: @field_list ref
+);
+
+#keyset[id]
+variant_names(
+ int id: @variant ref,
+ int name: @name ref
+);
+
+#keyset[id]
+variant_visibilities(
+ int id: @variant ref,
+ int visibility: @visibility ref
+);
+
+wildcard_pats(
+ unique int id: @wildcard_pat
+);
+
+yeet_exprs(
+ unique int id: @yeet_expr
+);
+
+#keyset[id, index]
+yeet_expr_attrs(
+ int id: @yeet_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+yeet_expr_exprs(
+ int id: @yeet_expr ref,
+ int expr: @expr ref
+);
+
+yield_exprs(
+ unique int id: @yield_expr
+);
+
+#keyset[id, index]
+yield_expr_attrs(
+ int id: @yield_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+yield_expr_exprs(
+ int id: @yield_expr ref,
+ int expr: @expr ref
+);
+
+@adt =
+ @enum
+| @struct
+| @union
+;
+
+#keyset[id, index]
+adt_derive_macro_expansions(
+ int id: @adt ref,
+ int index: int ref,
+ int derive_macro_expansion: @macro_items ref
+);
+
+block_exprs(
+ unique int id: @block_expr
+);
+
+#keyset[id, index]
+block_expr_attrs(
+ int id: @block_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+block_expr_is_async(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_const(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_gen(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_move(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_try(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_unsafe(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_stmt_lists(
+ int id: @block_expr ref,
+ int stmt_list: @stmt_list ref
+);
+
+call_exprs(
+ unique int id: @call_expr
+);
+
+#keyset[id]
+call_expr_functions(
+ int id: @call_expr ref,
+ int function: @expr ref
+);
+
+consts(
+ unique int id: @const
+);
+
+#keyset[id, index]
+const_attrs(
+ int id: @const ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+const_bodies(
+ int id: @const ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+const_generic_param_lists(
+ int id: @const ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+const_is_const(
+ int id: @const ref
+);
+
+#keyset[id]
+const_is_default(
+ int id: @const ref
+);
+
+#keyset[id]
+const_names(
+ int id: @const ref,
+ int name: @name ref
+);
+
+#keyset[id]
+const_type_reprs(
+ int id: @const ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+const_visibilities(
+ int id: @const ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+const_where_clauses(
+ int id: @const ref,
+ int where_clause: @where_clause ref
+);
+
+#keyset[id]
+const_has_implementation(
+ int id: @const ref
+);
+
+extern_blocks(
+ unique int id: @extern_block
+);
+
+#keyset[id]
+extern_block_abis(
+ int id: @extern_block ref,
+ int abi: @abi ref
+);
+
+#keyset[id, index]
+extern_block_attrs(
+ int id: @extern_block ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+extern_block_extern_item_lists(
+ int id: @extern_block ref,
+ int extern_item_list: @extern_item_list ref
+);
+
+#keyset[id]
+extern_block_is_unsafe(
+ int id: @extern_block ref
+);
+
+extern_crates(
+ unique int id: @extern_crate
+);
+
+#keyset[id, index]
+extern_crate_attrs(
+ int id: @extern_crate ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+extern_crate_identifiers(
+ int id: @extern_crate ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+extern_crate_renames(
+ int id: @extern_crate ref,
+ int rename: @rename ref
+);
+
+#keyset[id]
+extern_crate_visibilities(
+ int id: @extern_crate ref,
+ int visibility: @visibility ref
+);
+
+functions(
+ unique int id: @function
+);
+
+#keyset[id]
+function_abis(
+ int id: @function ref,
+ int abi: @abi ref
+);
+
+#keyset[id]
+function_bodies(
+ int id: @function ref,
+ int body: @block_expr ref
+);
+
+#keyset[id]
+function_generic_param_lists(
+ int id: @function ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+function_is_async(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_const(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_default(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_gen(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_unsafe(
+ int id: @function ref
+);
+
+#keyset[id]
+function_names(
+ int id: @function ref,
+ int name: @name ref
+);
+
+#keyset[id]
+function_ret_types(
+ int id: @function ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+function_visibilities(
+ int id: @function ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+function_where_clauses(
+ int id: @function ref,
+ int where_clause: @where_clause ref
+);
+
+#keyset[id]
+function_has_implementation(
+ int id: @function ref
+);
+
+impls(
+ unique int id: @impl
+);
+
+#keyset[id]
+impl_assoc_item_lists(
+ int id: @impl ref,
+ int assoc_item_list: @assoc_item_list ref
+);
+
+#keyset[id, index]
+impl_attrs(
+ int id: @impl ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+impl_generic_param_lists(
+ int id: @impl ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+impl_is_const(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_is_default(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_is_unsafe(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_self_ties(
+ int id: @impl ref,
+ int self_ty: @type_repr ref
+);
+
+#keyset[id]
+impl_traits(
+ int id: @impl ref,
+ int trait: @type_repr ref
+);
+
+#keyset[id]
+impl_visibilities(
+ int id: @impl ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+impl_where_clauses(
+ int id: @impl ref,
+ int where_clause: @where_clause ref
+);
+
+@looping_expr =
+ @for_expr
+| @loop_expr
+| @while_expr
+;
+
+#keyset[id]
+looping_expr_loop_bodies(
+ int id: @looping_expr ref,
+ int loop_body: @block_expr ref
+);
+
+macro_calls(
+ unique int id: @macro_call
+);
+
+#keyset[id, index]
+macro_call_attrs(
+ int id: @macro_call ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_call_paths(
+ int id: @macro_call ref,
+ int path: @path ref
+);
+
+#keyset[id]
+macro_call_token_trees(
+ int id: @macro_call ref,
+ int token_tree: @token_tree ref
+);
+
+#keyset[id]
+macro_call_macro_call_expansions(
+ int id: @macro_call ref,
+ int macro_call_expansion: @ast_node ref
+);
+
+macro_defs(
+ unique int id: @macro_def
+);
+
+#keyset[id]
+macro_def_args(
+ int id: @macro_def ref,
+ int args: @token_tree ref
+);
+
+#keyset[id, index]
+macro_def_attrs(
+ int id: @macro_def ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_def_bodies(
+ int id: @macro_def ref,
+ int body: @token_tree ref
+);
+
+#keyset[id]
+macro_def_names(
+ int id: @macro_def ref,
+ int name: @name ref
+);
+
+#keyset[id]
+macro_def_visibilities(
+ int id: @macro_def ref,
+ int visibility: @visibility ref
+);
+
+macro_rules(
+ unique int id: @macro_rules
+);
+
+#keyset[id, index]
+macro_rules_attrs(
+ int id: @macro_rules ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_rules_names(
+ int id: @macro_rules ref,
+ int name: @name ref
+);
+
+#keyset[id]
+macro_rules_token_trees(
+ int id: @macro_rules ref,
+ int token_tree: @token_tree ref
+);
+
+#keyset[id]
+macro_rules_visibilities(
+ int id: @macro_rules ref,
+ int visibility: @visibility ref
+);
+
+method_call_exprs(
+ unique int id: @method_call_expr
+);
+
+#keyset[id]
+method_call_expr_generic_arg_lists(
+ int id: @method_call_expr ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+method_call_expr_identifiers(
+ int id: @method_call_expr ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+method_call_expr_receivers(
+ int id: @method_call_expr ref,
+ int receiver: @expr ref
+);
+
+modules(
+ unique int id: @module
+);
+
+#keyset[id, index]
+module_attrs(
+ int id: @module ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+module_item_lists(
+ int id: @module ref,
+ int item_list: @item_list ref
+);
+
+#keyset[id]
+module_names(
+ int id: @module ref,
+ int name: @name ref
+);
+
+#keyset[id]
+module_visibilities(
+ int id: @module ref,
+ int visibility: @visibility ref
+);
+
+path_exprs(
+ unique int id: @path_expr
+);
+
+#keyset[id, index]
+path_expr_attrs(
+ int id: @path_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+path_pats(
+ unique int id: @path_pat
+);
+
+statics(
+ unique int id: @static
+);
+
+#keyset[id, index]
+static_attrs(
+ int id: @static ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+static_bodies(
+ int id: @static ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+static_is_mut(
+ int id: @static ref
+);
+
+#keyset[id]
+static_is_static(
+ int id: @static ref
+);
+
+#keyset[id]
+static_is_unsafe(
+ int id: @static ref
+);
+
+#keyset[id]
+static_names(
+ int id: @static ref,
+ int name: @name ref
+);
+
+#keyset[id]
+static_type_reprs(
+ int id: @static ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+static_visibilities(
+ int id: @static ref,
+ int visibility: @visibility ref
+);
+
+struct_exprs(
+ unique int id: @struct_expr
+);
+
+#keyset[id]
+struct_expr_struct_expr_field_lists(
+ int id: @struct_expr ref,
+ int struct_expr_field_list: @struct_expr_field_list ref
+);
+
+struct_pats(
+ unique int id: @struct_pat
+);
+
+#keyset[id]
+struct_pat_struct_pat_field_lists(
+ int id: @struct_pat ref,
+ int struct_pat_field_list: @struct_pat_field_list ref
+);
+
+traits(
+ unique int id: @trait
+);
+
+#keyset[id]
+trait_assoc_item_lists(
+ int id: @trait ref,
+ int assoc_item_list: @assoc_item_list ref
+);
+
+#keyset[id, index]
+trait_attrs(
+ int id: @trait ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+trait_generic_param_lists(
+ int id: @trait ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+trait_is_auto(
+ int id: @trait ref
+);
+
+#keyset[id]
+trait_is_unsafe(
+ int id: @trait ref
+);
+
+#keyset[id]
+trait_names(
+ int id: @trait ref,
+ int name: @name ref
+);
+
+#keyset[id]
+trait_type_bound_lists(
+ int id: @trait ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+trait_visibilities(
+ int id: @trait ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+trait_where_clauses(
+ int id: @trait ref,
+ int where_clause: @where_clause ref
+);
+
+trait_aliases(
+ unique int id: @trait_alias
+);
+
+#keyset[id, index]
+trait_alias_attrs(
+ int id: @trait_alias ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+trait_alias_generic_param_lists(
+ int id: @trait_alias ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+trait_alias_names(
+ int id: @trait_alias ref,
+ int name: @name ref
+);
+
+#keyset[id]
+trait_alias_type_bound_lists(
+ int id: @trait_alias ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+trait_alias_visibilities(
+ int id: @trait_alias ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+trait_alias_where_clauses(
+ int id: @trait_alias ref,
+ int where_clause: @where_clause ref
+);
+
+tuple_struct_pats(
+ unique int id: @tuple_struct_pat
+);
+
+#keyset[id, index]
+tuple_struct_pat_fields(
+ int id: @tuple_struct_pat ref,
+ int index: int ref,
+ int field: @pat ref
+);
+
+type_aliases(
+ unique int id: @type_alias
+);
+
+#keyset[id, index]
+type_alias_attrs(
+ int id: @type_alias ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+type_alias_generic_param_lists(
+ int id: @type_alias ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+type_alias_is_default(
+ int id: @type_alias ref
+);
+
+#keyset[id]
+type_alias_names(
+ int id: @type_alias ref,
+ int name: @name ref
+);
+
+#keyset[id]
+type_alias_type_reprs(
+ int id: @type_alias ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+type_alias_type_bound_lists(
+ int id: @type_alias ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+type_alias_visibilities(
+ int id: @type_alias ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+type_alias_where_clauses(
+ int id: @type_alias ref,
+ int where_clause: @where_clause ref
+);
+
+uses(
+ unique int id: @use
+);
+
+#keyset[id, index]
+use_attrs(
+ int id: @use ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+use_use_trees(
+ int id: @use ref,
+ int use_tree: @use_tree ref
+);
+
+#keyset[id]
+use_visibilities(
+ int id: @use ref,
+ int visibility: @visibility ref
+);
+
+enums(
+ unique int id: @enum
+);
+
+#keyset[id, index]
+enum_attrs(
+ int id: @enum ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+enum_generic_param_lists(
+ int id: @enum ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+enum_names(
+ int id: @enum ref,
+ int name: @name ref
+);
+
+#keyset[id]
+enum_variant_lists(
+ int id: @enum ref,
+ int variant_list: @variant_list ref
+);
+
+#keyset[id]
+enum_visibilities(
+ int id: @enum ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+enum_where_clauses(
+ int id: @enum ref,
+ int where_clause: @where_clause ref
+);
+
+for_exprs(
+ unique int id: @for_expr
+);
+
+#keyset[id, index]
+for_expr_attrs(
+ int id: @for_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+for_expr_iterables(
+ int id: @for_expr ref,
+ int iterable: @expr ref
+);
+
+#keyset[id]
+for_expr_pats(
+ int id: @for_expr ref,
+ int pat: @pat ref
+);
+
+loop_exprs(
+ unique int id: @loop_expr
+);
+
+#keyset[id, index]
+loop_expr_attrs(
+ int id: @loop_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+structs(
+ unique int id: @struct
+);
+
+#keyset[id, index]
+struct_attrs(
+ int id: @struct ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_field_lists_(
+ int id: @struct ref,
+ int field_list: @field_list ref
+);
+
+#keyset[id]
+struct_generic_param_lists(
+ int id: @struct ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+struct_names(
+ int id: @struct ref,
+ int name: @name ref
+);
+
+#keyset[id]
+struct_visibilities(
+ int id: @struct ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+struct_where_clauses(
+ int id: @struct ref,
+ int where_clause: @where_clause ref
+);
+
+unions(
+ unique int id: @union
+);
+
+#keyset[id, index]
+union_attrs(
+ int id: @union ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+union_generic_param_lists(
+ int id: @union ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+union_names(
+ int id: @union ref,
+ int name: @name ref
+);
+
+#keyset[id]
+union_struct_field_lists(
+ int id: @union ref,
+ int struct_field_list: @struct_field_list ref
+);
+
+#keyset[id]
+union_visibilities(
+ int id: @union ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+union_where_clauses(
+ int id: @union ref,
+ int where_clause: @where_clause ref
+);
+
+while_exprs(
+ unique int id: @while_expr
+);
+
+#keyset[id, index]
+while_expr_attrs(
+ int id: @while_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+while_expr_conditions(
+ int id: @while_expr ref,
+ int condition: @expr ref
+);
diff --git a/rust/ql/lib/upgrades/e3b3765116ecb8d796979f0b4787926cb8d691b5/rust.dbscheme b/rust/ql/lib/upgrades/e3b3765116ecb8d796979f0b4787926cb8d691b5/rust.dbscheme
new file mode 100644
index 000000000000..f72a3d8d021c
--- /dev/null
+++ b/rust/ql/lib/upgrades/e3b3765116ecb8d796979f0b4787926cb8d691b5/rust.dbscheme
@@ -0,0 +1,3638 @@
+// generated by codegen, do not edit
+
+// from ../shared/tree-sitter-extractor/src/generator/prefix.dbscheme
+/*- Files and folders -*/
+
+/**
+ * The location of an element.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_default(
+ unique int id: @location_default,
+ int file: @file ref,
+ int beginLine: int ref,
+ int beginColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+files(
+ unique int id: @file,
+ string name: string ref
+);
+
+folders(
+ unique int id: @folder,
+ string name: string ref
+);
+
+@container = @file | @folder
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref
+);
+
+/*- Empty location -*/
+
+empty_location(
+ int location: @location_default ref
+);
+
+/*- Source location prefix -*/
+
+/**
+ * The source location of the snapshot.
+ */
+sourceLocationPrefix(string prefix : string ref);
+
+/*- Diagnostic messages -*/
+
+diagnostics(
+ unique int id: @diagnostic,
+ int severity: int ref,
+ string error_tag: string ref,
+ string error_message: string ref,
+ string full_error_message: string ref,
+ int location: @location_default ref
+);
+
+/*- Diagnostic messages: severity -*/
+
+case @diagnostic.severity of
+ 10 = @diagnostic_debug
+| 20 = @diagnostic_info
+| 30 = @diagnostic_warning
+| 40 = @diagnostic_error
+;
+
+/*- YAML -*/
+
+#keyset[parent, idx]
+yaml (unique int id: @yaml_node,
+ int kind: int ref,
+ int parent: @yaml_node_parent ref,
+ int idx: int ref,
+ string tag: string ref,
+ string tostring: string ref);
+
+case @yaml_node.kind of
+ 0 = @yaml_scalar_node
+| 1 = @yaml_mapping_node
+| 2 = @yaml_sequence_node
+| 3 = @yaml_alias_node
+;
+
+@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node;
+
+@yaml_node_parent = @yaml_collection_node | @file;
+
+yaml_anchors (unique int node: @yaml_node ref,
+ string anchor: string ref);
+
+yaml_aliases (unique int alias: @yaml_alias_node ref,
+ string target: string ref);
+
+yaml_scalars (unique int scalar: @yaml_scalar_node ref,
+ int style: int ref,
+ string value: string ref);
+
+yaml_errors (unique int id: @yaml_error,
+ string message: string ref);
+
+yaml_locations(unique int locatable: @yaml_locatable ref,
+ int location: @location_default ref);
+
+@yaml_locatable = @yaml_node | @yaml_error;
+
+/*- Database metadata -*/
+databaseMetadata(
+ string metadataKey: string ref,
+ string value: string ref
+);
+
+
+// from prefix.dbscheme
+#keyset[id]
+locatable_locations(
+ int id: @locatable ref,
+ int location: @location_default ref
+);
+
+
+// from schema
+
+@element =
+ @extractor_step
+| @locatable
+| @named_crate
+| @unextracted
+;
+
+extractor_steps(
+ unique int id: @extractor_step,
+ string action: string ref,
+ int duration_ms: int ref
+);
+
+#keyset[id]
+extractor_step_files(
+ int id: @extractor_step ref,
+ int file: @file ref
+);
+
+@locatable =
+ @ast_node
+| @crate
+;
+
+named_crates(
+ unique int id: @named_crate,
+ string name: string ref,
+ int crate: @crate ref
+);
+
+@unextracted =
+ @missing
+| @unimplemented
+;
+
+@ast_node =
+ @abi
+| @addressable
+| @arg_list
+| @asm_dir_spec
+| @asm_operand
+| @asm_operand_expr
+| @asm_option
+| @asm_piece
+| @asm_reg_spec
+| @assoc_item
+| @assoc_item_list
+| @attr
+| @callable
+| @closure_binder
+| @expr
+| @extern_item
+| @extern_item_list
+| @field_list
+| @format_args_arg
+| @generic_arg
+| @generic_arg_list
+| @generic_param
+| @generic_param_list
+| @item_list
+| @label
+| @let_else
+| @macro_items
+| @match_arm
+| @match_arm_list
+| @match_guard
+| @meta
+| @name
+| @param_base
+| @param_list
+| @parenthesized_arg_list
+| @pat
+| @path
+| @path_segment
+| @rename
+| @resolvable
+| @ret_type_repr
+| @return_type_syntax
+| @source_file
+| @stmt
+| @stmt_list
+| @struct_expr_field
+| @struct_expr_field_list
+| @struct_field
+| @struct_pat_field
+| @struct_pat_field_list
+| @token
+| @token_tree
+| @tuple_field
+| @type_bound
+| @type_bound_list
+| @type_repr
+| @use_bound_generic_arg
+| @use_bound_generic_args
+| @use_tree
+| @use_tree_list
+| @variant_list
+| @visibility
+| @where_clause
+| @where_pred
+;
+
+crates(
+ unique int id: @crate
+);
+
+#keyset[id]
+crate_names(
+ int id: @crate ref,
+ string name: string ref
+);
+
+#keyset[id]
+crate_versions(
+ int id: @crate ref,
+ string version: string ref
+);
+
+#keyset[id, index]
+crate_cfg_options(
+ int id: @crate ref,
+ int index: int ref,
+ string cfg_option: string ref
+);
+
+#keyset[id, index]
+crate_named_dependencies(
+ int id: @crate ref,
+ int index: int ref,
+ int named_dependency: @named_crate ref
+);
+
+missings(
+ unique int id: @missing
+);
+
+unimplementeds(
+ unique int id: @unimplemented
+);
+
+abis(
+ unique int id: @abi
+);
+
+#keyset[id]
+abi_abi_strings(
+ int id: @abi ref,
+ string abi_string: string ref
+);
+
+@addressable =
+ @item
+| @variant
+;
+
+#keyset[id]
+addressable_extended_canonical_paths(
+ int id: @addressable ref,
+ string extended_canonical_path: string ref
+);
+
+#keyset[id]
+addressable_crate_origins(
+ int id: @addressable ref,
+ string crate_origin: string ref
+);
+
+arg_lists(
+ unique int id: @arg_list
+);
+
+#keyset[id, index]
+arg_list_args(
+ int id: @arg_list ref,
+ int index: int ref,
+ int arg: @expr ref
+);
+
+asm_dir_specs(
+ unique int id: @asm_dir_spec
+);
+
+@asm_operand =
+ @asm_const
+| @asm_label
+| @asm_reg_operand
+| @asm_sym
+;
+
+asm_operand_exprs(
+ unique int id: @asm_operand_expr
+);
+
+#keyset[id]
+asm_operand_expr_in_exprs(
+ int id: @asm_operand_expr ref,
+ int in_expr: @expr ref
+);
+
+#keyset[id]
+asm_operand_expr_out_exprs(
+ int id: @asm_operand_expr ref,
+ int out_expr: @expr ref
+);
+
+asm_options(
+ unique int id: @asm_option
+);
+
+#keyset[id]
+asm_option_is_raw(
+ int id: @asm_option ref
+);
+
+@asm_piece =
+ @asm_clobber_abi
+| @asm_operand_named
+| @asm_options_list
+;
+
+asm_reg_specs(
+ unique int id: @asm_reg_spec
+);
+
+#keyset[id]
+asm_reg_spec_identifiers(
+ int id: @asm_reg_spec ref,
+ int identifier: @name_ref ref
+);
+
+@assoc_item =
+ @const
+| @function
+| @macro_call
+| @type_alias
+;
+
+assoc_item_lists(
+ unique int id: @assoc_item_list
+);
+
+#keyset[id, index]
+assoc_item_list_assoc_items(
+ int id: @assoc_item_list ref,
+ int index: int ref,
+ int assoc_item: @assoc_item ref
+);
+
+#keyset[id, index]
+assoc_item_list_attrs(
+ int id: @assoc_item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+attrs(
+ unique int id: @attr
+);
+
+#keyset[id]
+attr_meta(
+ int id: @attr ref,
+ int meta: @meta ref
+);
+
+@callable =
+ @closure_expr
+| @function
+;
+
+#keyset[id]
+callable_param_lists(
+ int id: @callable ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id, index]
+callable_attrs(
+ int id: @callable ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+closure_binders(
+ unique int id: @closure_binder
+);
+
+#keyset[id]
+closure_binder_generic_param_lists(
+ int id: @closure_binder ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+@expr =
+ @array_expr_internal
+| @asm_expr
+| @await_expr
+| @become_expr
+| @binary_expr
+| @break_expr
+| @call_expr_base
+| @cast_expr
+| @closure_expr
+| @continue_expr
+| @field_expr
+| @format_args_expr
+| @if_expr
+| @index_expr
+| @labelable_expr
+| @let_expr
+| @literal_expr
+| @macro_block_expr
+| @macro_expr
+| @match_expr
+| @offset_of_expr
+| @paren_expr
+| @path_expr_base
+| @prefix_expr
+| @range_expr
+| @ref_expr
+| @return_expr
+| @struct_expr
+| @try_expr
+| @tuple_expr
+| @underscore_expr
+| @yeet_expr
+| @yield_expr
+;
+
+@extern_item =
+ @function
+| @macro_call
+| @static
+| @type_alias
+;
+
+extern_item_lists(
+ unique int id: @extern_item_list
+);
+
+#keyset[id, index]
+extern_item_list_attrs(
+ int id: @extern_item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+extern_item_list_extern_items(
+ int id: @extern_item_list ref,
+ int index: int ref,
+ int extern_item: @extern_item ref
+);
+
+@field_list =
+ @struct_field_list
+| @tuple_field_list
+;
+
+format_args_args(
+ unique int id: @format_args_arg
+);
+
+#keyset[id]
+format_args_arg_exprs(
+ int id: @format_args_arg ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+format_args_arg_names(
+ int id: @format_args_arg ref,
+ int name: @name ref
+);
+
+@generic_arg =
+ @assoc_type_arg
+| @const_arg
+| @lifetime_arg
+| @type_arg
+;
+
+generic_arg_lists(
+ unique int id: @generic_arg_list
+);
+
+#keyset[id, index]
+generic_arg_list_generic_args(
+ int id: @generic_arg_list ref,
+ int index: int ref,
+ int generic_arg: @generic_arg ref
+);
+
+@generic_param =
+ @const_param
+| @lifetime_param
+| @type_param
+;
+
+generic_param_lists(
+ unique int id: @generic_param_list
+);
+
+#keyset[id, index]
+generic_param_list_generic_params(
+ int id: @generic_param_list ref,
+ int index: int ref,
+ int generic_param: @generic_param ref
+);
+
+item_lists(
+ unique int id: @item_list
+);
+
+#keyset[id, index]
+item_list_attrs(
+ int id: @item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+item_list_items(
+ int id: @item_list ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+labels(
+ unique int id: @label
+);
+
+#keyset[id]
+label_lifetimes(
+ int id: @label ref,
+ int lifetime: @lifetime ref
+);
+
+let_elses(
+ unique int id: @let_else
+);
+
+#keyset[id]
+let_else_block_exprs(
+ int id: @let_else ref,
+ int block_expr: @block_expr ref
+);
+
+macro_items(
+ unique int id: @macro_items
+);
+
+#keyset[id, index]
+macro_items_items(
+ int id: @macro_items ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+match_arms(
+ unique int id: @match_arm
+);
+
+#keyset[id, index]
+match_arm_attrs(
+ int id: @match_arm ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+match_arm_exprs(
+ int id: @match_arm ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+match_arm_guards(
+ int id: @match_arm ref,
+ int guard: @match_guard ref
+);
+
+#keyset[id]
+match_arm_pats(
+ int id: @match_arm ref,
+ int pat: @pat ref
+);
+
+match_arm_lists(
+ unique int id: @match_arm_list
+);
+
+#keyset[id, index]
+match_arm_list_arms(
+ int id: @match_arm_list ref,
+ int index: int ref,
+ int arm: @match_arm ref
+);
+
+#keyset[id, index]
+match_arm_list_attrs(
+ int id: @match_arm_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+match_guards(
+ unique int id: @match_guard
+);
+
+#keyset[id]
+match_guard_conditions(
+ int id: @match_guard ref,
+ int condition: @expr ref
+);
+
+meta(
+ unique int id: @meta
+);
+
+#keyset[id]
+meta_exprs(
+ int id: @meta ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+meta_is_unsafe(
+ int id: @meta ref
+);
+
+#keyset[id]
+meta_paths(
+ int id: @meta ref,
+ int path: @path ref
+);
+
+#keyset[id]
+meta_token_trees(
+ int id: @meta ref,
+ int token_tree: @token_tree ref
+);
+
+names(
+ unique int id: @name
+);
+
+#keyset[id]
+name_texts(
+ int id: @name ref,
+ string text: string ref
+);
+
+@param_base =
+ @param
+| @self_param
+;
+
+#keyset[id, index]
+param_base_attrs(
+ int id: @param_base ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+param_base_type_reprs(
+ int id: @param_base ref,
+ int type_repr: @type_repr ref
+);
+
+param_lists(
+ unique int id: @param_list
+);
+
+#keyset[id, index]
+param_list_params(
+ int id: @param_list ref,
+ int index: int ref,
+ int param: @param ref
+);
+
+#keyset[id]
+param_list_self_params(
+ int id: @param_list ref,
+ int self_param: @self_param ref
+);
+
+parenthesized_arg_lists(
+ unique int id: @parenthesized_arg_list
+);
+
+#keyset[id, index]
+parenthesized_arg_list_type_args(
+ int id: @parenthesized_arg_list ref,
+ int index: int ref,
+ int type_arg: @type_arg ref
+);
+
+@pat =
+ @box_pat
+| @const_block_pat
+| @ident_pat
+| @literal_pat
+| @macro_pat
+| @or_pat
+| @paren_pat
+| @path_pat
+| @range_pat
+| @ref_pat
+| @rest_pat
+| @slice_pat
+| @struct_pat
+| @tuple_pat
+| @tuple_struct_pat
+| @wildcard_pat
+;
+
+paths(
+ unique int id: @path
+);
+
+#keyset[id]
+path_qualifiers(
+ int id: @path ref,
+ int qualifier: @path ref
+);
+
+#keyset[id]
+path_segments_(
+ int id: @path ref,
+ int segment: @path_segment ref
+);
+
+path_segments(
+ unique int id: @path_segment
+);
+
+#keyset[id]
+path_segment_generic_arg_lists(
+ int id: @path_segment ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+path_segment_identifiers(
+ int id: @path_segment ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+path_segment_parenthesized_arg_lists(
+ int id: @path_segment ref,
+ int parenthesized_arg_list: @parenthesized_arg_list ref
+);
+
+#keyset[id]
+path_segment_ret_types(
+ int id: @path_segment ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+path_segment_return_type_syntaxes(
+ int id: @path_segment ref,
+ int return_type_syntax: @return_type_syntax ref
+);
+
+#keyset[id]
+path_segment_type_reprs(
+ int id: @path_segment ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+path_segment_trait_type_reprs(
+ int id: @path_segment ref,
+ int trait_type_repr: @path_type_repr ref
+);
+
+renames(
+ unique int id: @rename
+);
+
+#keyset[id]
+rename_names(
+ int id: @rename ref,
+ int name: @name ref
+);
+
+@resolvable =
+ @method_call_expr
+| @path_ast_node
+;
+
+#keyset[id]
+resolvable_resolved_paths(
+ int id: @resolvable ref,
+ string resolved_path: string ref
+);
+
+#keyset[id]
+resolvable_resolved_crate_origins(
+ int id: @resolvable ref,
+ string resolved_crate_origin: string ref
+);
+
+ret_type_reprs(
+ unique int id: @ret_type_repr
+);
+
+#keyset[id]
+ret_type_repr_type_reprs(
+ int id: @ret_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+return_type_syntaxes(
+ unique int id: @return_type_syntax
+);
+
+source_files(
+ unique int id: @source_file
+);
+
+#keyset[id, index]
+source_file_attrs(
+ int id: @source_file ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+source_file_items(
+ int id: @source_file ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+@stmt =
+ @expr_stmt
+| @item
+| @let_stmt
+;
+
+stmt_lists(
+ unique int id: @stmt_list
+);
+
+#keyset[id, index]
+stmt_list_attrs(
+ int id: @stmt_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+stmt_list_statements(
+ int id: @stmt_list ref,
+ int index: int ref,
+ int statement: @stmt ref
+);
+
+#keyset[id]
+stmt_list_tail_exprs(
+ int id: @stmt_list ref,
+ int tail_expr: @expr ref
+);
+
+struct_expr_fields(
+ unique int id: @struct_expr_field
+);
+
+#keyset[id, index]
+struct_expr_field_attrs(
+ int id: @struct_expr_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_expr_field_exprs(
+ int id: @struct_expr_field ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+struct_expr_field_identifiers(
+ int id: @struct_expr_field ref,
+ int identifier: @name_ref ref
+);
+
+struct_expr_field_lists(
+ unique int id: @struct_expr_field_list
+);
+
+#keyset[id, index]
+struct_expr_field_list_attrs(
+ int id: @struct_expr_field_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+struct_expr_field_list_fields(
+ int id: @struct_expr_field_list ref,
+ int index: int ref,
+ int field: @struct_expr_field ref
+);
+
+#keyset[id]
+struct_expr_field_list_spreads(
+ int id: @struct_expr_field_list ref,
+ int spread: @expr ref
+);
+
+struct_fields(
+ unique int id: @struct_field
+);
+
+#keyset[id, index]
+struct_field_attrs(
+ int id: @struct_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_field_defaults(
+ int id: @struct_field ref,
+ int default: @expr ref
+);
+
+#keyset[id]
+struct_field_is_unsafe(
+ int id: @struct_field ref
+);
+
+#keyset[id]
+struct_field_names(
+ int id: @struct_field ref,
+ int name: @name ref
+);
+
+#keyset[id]
+struct_field_type_reprs(
+ int id: @struct_field ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+struct_field_visibilities(
+ int id: @struct_field ref,
+ int visibility: @visibility ref
+);
+
+struct_pat_fields(
+ unique int id: @struct_pat_field
+);
+
+#keyset[id, index]
+struct_pat_field_attrs(
+ int id: @struct_pat_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_pat_field_identifiers(
+ int id: @struct_pat_field ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+struct_pat_field_pats(
+ int id: @struct_pat_field ref,
+ int pat: @pat ref
+);
+
+struct_pat_field_lists(
+ unique int id: @struct_pat_field_list
+);
+
+#keyset[id, index]
+struct_pat_field_list_fields(
+ int id: @struct_pat_field_list ref,
+ int index: int ref,
+ int field: @struct_pat_field ref
+);
+
+#keyset[id]
+struct_pat_field_list_rest_pats(
+ int id: @struct_pat_field_list ref,
+ int rest_pat: @rest_pat ref
+);
+
+@token =
+ @comment
+;
+
+token_trees(
+ unique int id: @token_tree
+);
+
+tuple_fields(
+ unique int id: @tuple_field
+);
+
+#keyset[id, index]
+tuple_field_attrs(
+ int id: @tuple_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+tuple_field_type_reprs(
+ int id: @tuple_field ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+tuple_field_visibilities(
+ int id: @tuple_field ref,
+ int visibility: @visibility ref
+);
+
+type_bounds(
+ unique int id: @type_bound
+);
+
+#keyset[id]
+type_bound_is_async(
+ int id: @type_bound ref
+);
+
+#keyset[id]
+type_bound_is_const(
+ int id: @type_bound ref
+);
+
+#keyset[id]
+type_bound_lifetimes(
+ int id: @type_bound ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+type_bound_type_reprs(
+ int id: @type_bound ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+type_bound_use_bound_generic_args(
+ int id: @type_bound ref,
+ int use_bound_generic_args: @use_bound_generic_args ref
+);
+
+type_bound_lists(
+ unique int id: @type_bound_list
+);
+
+#keyset[id, index]
+type_bound_list_bounds(
+ int id: @type_bound_list ref,
+ int index: int ref,
+ int bound: @type_bound ref
+);
+
+@type_repr =
+ @array_type_repr
+| @dyn_trait_type_repr
+| @fn_ptr_type_repr
+| @for_type_repr
+| @impl_trait_type_repr
+| @infer_type_repr
+| @macro_type_repr
+| @never_type_repr
+| @paren_type_repr
+| @path_type_repr
+| @ptr_type_repr
+| @ref_type_repr
+| @slice_type_repr
+| @tuple_type_repr
+;
+
+@use_bound_generic_arg =
+ @lifetime
+| @name_ref
+;
+
+use_bound_generic_args(
+ unique int id: @use_bound_generic_args
+);
+
+#keyset[id, index]
+use_bound_generic_args_use_bound_generic_args(
+ int id: @use_bound_generic_args ref,
+ int index: int ref,
+ int use_bound_generic_arg: @use_bound_generic_arg ref
+);
+
+use_trees(
+ unique int id: @use_tree
+);
+
+#keyset[id]
+use_tree_is_glob(
+ int id: @use_tree ref
+);
+
+#keyset[id]
+use_tree_paths(
+ int id: @use_tree ref,
+ int path: @path ref
+);
+
+#keyset[id]
+use_tree_renames(
+ int id: @use_tree ref,
+ int rename: @rename ref
+);
+
+#keyset[id]
+use_tree_use_tree_lists(
+ int id: @use_tree ref,
+ int use_tree_list: @use_tree_list ref
+);
+
+use_tree_lists(
+ unique int id: @use_tree_list
+);
+
+#keyset[id, index]
+use_tree_list_use_trees(
+ int id: @use_tree_list ref,
+ int index: int ref,
+ int use_tree: @use_tree ref
+);
+
+variant_lists(
+ unique int id: @variant_list
+);
+
+#keyset[id, index]
+variant_list_variants(
+ int id: @variant_list ref,
+ int index: int ref,
+ int variant: @variant ref
+);
+
+visibilities(
+ unique int id: @visibility
+);
+
+#keyset[id]
+visibility_paths(
+ int id: @visibility ref,
+ int path: @path ref
+);
+
+where_clauses(
+ unique int id: @where_clause
+);
+
+#keyset[id, index]
+where_clause_predicates(
+ int id: @where_clause ref,
+ int index: int ref,
+ int predicate: @where_pred ref
+);
+
+where_preds(
+ unique int id: @where_pred
+);
+
+#keyset[id]
+where_pred_generic_param_lists(
+ int id: @where_pred ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+where_pred_lifetimes(
+ int id: @where_pred ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+where_pred_type_reprs(
+ int id: @where_pred ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+where_pred_type_bound_lists(
+ int id: @where_pred ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+array_expr_internals(
+ unique int id: @array_expr_internal
+);
+
+#keyset[id, index]
+array_expr_internal_attrs(
+ int id: @array_expr_internal ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+array_expr_internal_exprs(
+ int id: @array_expr_internal ref,
+ int index: int ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+array_expr_internal_is_semicolon(
+ int id: @array_expr_internal ref
+);
+
+array_type_reprs(
+ unique int id: @array_type_repr
+);
+
+#keyset[id]
+array_type_repr_const_args(
+ int id: @array_type_repr ref,
+ int const_arg: @const_arg ref
+);
+
+#keyset[id]
+array_type_repr_element_type_reprs(
+ int id: @array_type_repr ref,
+ int element_type_repr: @type_repr ref
+);
+
+asm_clobber_abis(
+ unique int id: @asm_clobber_abi
+);
+
+asm_consts(
+ unique int id: @asm_const
+);
+
+#keyset[id]
+asm_const_exprs(
+ int id: @asm_const ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+asm_const_is_const(
+ int id: @asm_const ref
+);
+
+asm_exprs(
+ unique int id: @asm_expr
+);
+
+#keyset[id, index]
+asm_expr_asm_pieces(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int asm_piece: @asm_piece ref
+);
+
+#keyset[id, index]
+asm_expr_attrs(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+asm_expr_templates(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int template: @expr ref
+);
+
+asm_labels(
+ unique int id: @asm_label
+);
+
+#keyset[id]
+asm_label_block_exprs(
+ int id: @asm_label ref,
+ int block_expr: @block_expr ref
+);
+
+asm_operand_nameds(
+ unique int id: @asm_operand_named
+);
+
+#keyset[id]
+asm_operand_named_asm_operands(
+ int id: @asm_operand_named ref,
+ int asm_operand: @asm_operand ref
+);
+
+#keyset[id]
+asm_operand_named_names(
+ int id: @asm_operand_named ref,
+ int name: @name ref
+);
+
+asm_options_lists(
+ unique int id: @asm_options_list
+);
+
+#keyset[id, index]
+asm_options_list_asm_options(
+ int id: @asm_options_list ref,
+ int index: int ref,
+ int asm_option: @asm_option ref
+);
+
+asm_reg_operands(
+ unique int id: @asm_reg_operand
+);
+
+#keyset[id]
+asm_reg_operand_asm_dir_specs(
+ int id: @asm_reg_operand ref,
+ int asm_dir_spec: @asm_dir_spec ref
+);
+
+#keyset[id]
+asm_reg_operand_asm_operand_exprs(
+ int id: @asm_reg_operand ref,
+ int asm_operand_expr: @asm_operand_expr ref
+);
+
+#keyset[id]
+asm_reg_operand_asm_reg_specs(
+ int id: @asm_reg_operand ref,
+ int asm_reg_spec: @asm_reg_spec ref
+);
+
+asm_syms(
+ unique int id: @asm_sym
+);
+
+#keyset[id]
+asm_sym_paths(
+ int id: @asm_sym ref,
+ int path: @path ref
+);
+
+assoc_type_args(
+ unique int id: @assoc_type_arg
+);
+
+#keyset[id]
+assoc_type_arg_const_args(
+ int id: @assoc_type_arg ref,
+ int const_arg: @const_arg ref
+);
+
+#keyset[id]
+assoc_type_arg_generic_arg_lists(
+ int id: @assoc_type_arg ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+assoc_type_arg_identifiers(
+ int id: @assoc_type_arg ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+assoc_type_arg_param_lists(
+ int id: @assoc_type_arg ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id]
+assoc_type_arg_ret_types(
+ int id: @assoc_type_arg ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+assoc_type_arg_return_type_syntaxes(
+ int id: @assoc_type_arg ref,
+ int return_type_syntax: @return_type_syntax ref
+);
+
+#keyset[id]
+assoc_type_arg_type_reprs(
+ int id: @assoc_type_arg ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+assoc_type_arg_type_bound_lists(
+ int id: @assoc_type_arg ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+await_exprs(
+ unique int id: @await_expr
+);
+
+#keyset[id, index]
+await_expr_attrs(
+ int id: @await_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+await_expr_exprs(
+ int id: @await_expr ref,
+ int expr: @expr ref
+);
+
+become_exprs(
+ unique int id: @become_expr
+);
+
+#keyset[id, index]
+become_expr_attrs(
+ int id: @become_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+become_expr_exprs(
+ int id: @become_expr ref,
+ int expr: @expr ref
+);
+
+binary_exprs(
+ unique int id: @binary_expr
+);
+
+#keyset[id, index]
+binary_expr_attrs(
+ int id: @binary_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+binary_expr_lhs(
+ int id: @binary_expr ref,
+ int lhs: @expr ref
+);
+
+#keyset[id]
+binary_expr_operator_names(
+ int id: @binary_expr ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+binary_expr_rhs(
+ int id: @binary_expr ref,
+ int rhs: @expr ref
+);
+
+box_pats(
+ unique int id: @box_pat
+);
+
+#keyset[id]
+box_pat_pats(
+ int id: @box_pat ref,
+ int pat: @pat ref
+);
+
+break_exprs(
+ unique int id: @break_expr
+);
+
+#keyset[id, index]
+break_expr_attrs(
+ int id: @break_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+break_expr_exprs(
+ int id: @break_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+break_expr_lifetimes(
+ int id: @break_expr ref,
+ int lifetime: @lifetime ref
+);
+
+@call_expr_base =
+ @call_expr
+| @method_call_expr
+;
+
+#keyset[id]
+call_expr_base_arg_lists(
+ int id: @call_expr_base ref,
+ int arg_list: @arg_list ref
+);
+
+#keyset[id, index]
+call_expr_base_attrs(
+ int id: @call_expr_base ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+cast_exprs(
+ unique int id: @cast_expr
+);
+
+#keyset[id, index]
+cast_expr_attrs(
+ int id: @cast_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+cast_expr_exprs(
+ int id: @cast_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+cast_expr_type_reprs(
+ int id: @cast_expr ref,
+ int type_repr: @type_repr ref
+);
+
+closure_exprs(
+ unique int id: @closure_expr
+);
+
+#keyset[id]
+closure_expr_bodies(
+ int id: @closure_expr ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+closure_expr_closure_binders(
+ int id: @closure_expr ref,
+ int closure_binder: @closure_binder ref
+);
+
+#keyset[id]
+closure_expr_is_async(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_const(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_gen(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_move(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_static(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_ret_types(
+ int id: @closure_expr ref,
+ int ret_type: @ret_type_repr ref
+);
+
+comments(
+ unique int id: @comment,
+ int parent: @ast_node ref,
+ string text: string ref
+);
+
+const_args(
+ unique int id: @const_arg
+);
+
+#keyset[id]
+const_arg_exprs(
+ int id: @const_arg ref,
+ int expr: @expr ref
+);
+
+const_block_pats(
+ unique int id: @const_block_pat
+);
+
+#keyset[id]
+const_block_pat_block_exprs(
+ int id: @const_block_pat ref,
+ int block_expr: @block_expr ref
+);
+
+#keyset[id]
+const_block_pat_is_const(
+ int id: @const_block_pat ref
+);
+
+const_params(
+ unique int id: @const_param
+);
+
+#keyset[id, index]
+const_param_attrs(
+ int id: @const_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+const_param_default_vals(
+ int id: @const_param ref,
+ int default_val: @const_arg ref
+);
+
+#keyset[id]
+const_param_is_const(
+ int id: @const_param ref
+);
+
+#keyset[id]
+const_param_names(
+ int id: @const_param ref,
+ int name: @name ref
+);
+
+#keyset[id]
+const_param_type_reprs(
+ int id: @const_param ref,
+ int type_repr: @type_repr ref
+);
+
+continue_exprs(
+ unique int id: @continue_expr
+);
+
+#keyset[id, index]
+continue_expr_attrs(
+ int id: @continue_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+continue_expr_lifetimes(
+ int id: @continue_expr ref,
+ int lifetime: @lifetime ref
+);
+
+dyn_trait_type_reprs(
+ unique int id: @dyn_trait_type_repr
+);
+
+#keyset[id]
+dyn_trait_type_repr_type_bound_lists(
+ int id: @dyn_trait_type_repr ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+expr_stmts(
+ unique int id: @expr_stmt
+);
+
+#keyset[id]
+expr_stmt_exprs(
+ int id: @expr_stmt ref,
+ int expr: @expr ref
+);
+
+field_exprs(
+ unique int id: @field_expr
+);
+
+#keyset[id, index]
+field_expr_attrs(
+ int id: @field_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+field_expr_containers(
+ int id: @field_expr ref,
+ int container: @expr ref
+);
+
+#keyset[id]
+field_expr_identifiers(
+ int id: @field_expr ref,
+ int identifier: @name_ref ref
+);
+
+fn_ptr_type_reprs(
+ unique int id: @fn_ptr_type_repr
+);
+
+#keyset[id]
+fn_ptr_type_repr_abis(
+ int id: @fn_ptr_type_repr ref,
+ int abi: @abi ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_async(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_const(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_unsafe(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_param_lists(
+ int id: @fn_ptr_type_repr ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_ret_types(
+ int id: @fn_ptr_type_repr ref,
+ int ret_type: @ret_type_repr ref
+);
+
+for_type_reprs(
+ unique int id: @for_type_repr
+);
+
+#keyset[id]
+for_type_repr_generic_param_lists(
+ int id: @for_type_repr ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+for_type_repr_type_reprs(
+ int id: @for_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+format_args_exprs(
+ unique int id: @format_args_expr
+);
+
+#keyset[id, index]
+format_args_expr_args(
+ int id: @format_args_expr ref,
+ int index: int ref,
+ int arg: @format_args_arg ref
+);
+
+#keyset[id, index]
+format_args_expr_attrs(
+ int id: @format_args_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+format_args_expr_templates(
+ int id: @format_args_expr ref,
+ int template: @expr ref
+);
+
+ident_pats(
+ unique int id: @ident_pat
+);
+
+#keyset[id, index]
+ident_pat_attrs(
+ int id: @ident_pat ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+ident_pat_is_mut(
+ int id: @ident_pat ref
+);
+
+#keyset[id]
+ident_pat_is_ref(
+ int id: @ident_pat ref
+);
+
+#keyset[id]
+ident_pat_names(
+ int id: @ident_pat ref,
+ int name: @name ref
+);
+
+#keyset[id]
+ident_pat_pats(
+ int id: @ident_pat ref,
+ int pat: @pat ref
+);
+
+if_exprs(
+ unique int id: @if_expr
+);
+
+#keyset[id, index]
+if_expr_attrs(
+ int id: @if_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+if_expr_conditions(
+ int id: @if_expr ref,
+ int condition: @expr ref
+);
+
+#keyset[id]
+if_expr_elses(
+ int id: @if_expr ref,
+ int else: @expr ref
+);
+
+#keyset[id]
+if_expr_thens(
+ int id: @if_expr ref,
+ int then: @block_expr ref
+);
+
+impl_trait_type_reprs(
+ unique int id: @impl_trait_type_repr
+);
+
+#keyset[id]
+impl_trait_type_repr_type_bound_lists(
+ int id: @impl_trait_type_repr ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+index_exprs(
+ unique int id: @index_expr
+);
+
+#keyset[id, index]
+index_expr_attrs(
+ int id: @index_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+index_expr_bases(
+ int id: @index_expr ref,
+ int base: @expr ref
+);
+
+#keyset[id]
+index_expr_indices(
+ int id: @index_expr ref,
+ int index: @expr ref
+);
+
+infer_type_reprs(
+ unique int id: @infer_type_repr
+);
+
+@item =
+ @adt
+| @const
+| @extern_block
+| @extern_crate
+| @function
+| @impl
+| @macro_call
+| @macro_def
+| @macro_rules
+| @module
+| @static
+| @trait
+| @trait_alias
+| @type_alias
+| @use
+;
+
+#keyset[id]
+item_attribute_macro_expansions(
+ int id: @item ref,
+ int attribute_macro_expansion: @macro_items ref
+);
+
+@labelable_expr =
+ @block_expr
+| @looping_expr
+;
+
+#keyset[id]
+labelable_expr_labels(
+ int id: @labelable_expr ref,
+ int label: @label ref
+);
+
+let_exprs(
+ unique int id: @let_expr
+);
+
+#keyset[id, index]
+let_expr_attrs(
+ int id: @let_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+let_expr_scrutinees(
+ int id: @let_expr ref,
+ int scrutinee: @expr ref
+);
+
+#keyset[id]
+let_expr_pats(
+ int id: @let_expr ref,
+ int pat: @pat ref
+);
+
+let_stmts(
+ unique int id: @let_stmt
+);
+
+#keyset[id, index]
+let_stmt_attrs(
+ int id: @let_stmt ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+let_stmt_initializers(
+ int id: @let_stmt ref,
+ int initializer: @expr ref
+);
+
+#keyset[id]
+let_stmt_let_elses(
+ int id: @let_stmt ref,
+ int let_else: @let_else ref
+);
+
+#keyset[id]
+let_stmt_pats(
+ int id: @let_stmt ref,
+ int pat: @pat ref
+);
+
+#keyset[id]
+let_stmt_type_reprs(
+ int id: @let_stmt ref,
+ int type_repr: @type_repr ref
+);
+
+lifetimes(
+ unique int id: @lifetime
+);
+
+#keyset[id]
+lifetime_texts(
+ int id: @lifetime ref,
+ string text: string ref
+);
+
+lifetime_args(
+ unique int id: @lifetime_arg
+);
+
+#keyset[id]
+lifetime_arg_lifetimes(
+ int id: @lifetime_arg ref,
+ int lifetime: @lifetime ref
+);
+
+lifetime_params(
+ unique int id: @lifetime_param
+);
+
+#keyset[id, index]
+lifetime_param_attrs(
+ int id: @lifetime_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+lifetime_param_lifetimes(
+ int id: @lifetime_param ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+lifetime_param_type_bound_lists(
+ int id: @lifetime_param ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+literal_exprs(
+ unique int id: @literal_expr
+);
+
+#keyset[id, index]
+literal_expr_attrs(
+ int id: @literal_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+literal_expr_text_values(
+ int id: @literal_expr ref,
+ string text_value: string ref
+);
+
+literal_pats(
+ unique int id: @literal_pat
+);
+
+#keyset[id]
+literal_pat_literals(
+ int id: @literal_pat ref,
+ int literal: @literal_expr ref
+);
+
+macro_block_exprs(
+ unique int id: @macro_block_expr
+);
+
+#keyset[id]
+macro_block_expr_tail_exprs(
+ int id: @macro_block_expr ref,
+ int tail_expr: @expr ref
+);
+
+#keyset[id, index]
+macro_block_expr_statements(
+ int id: @macro_block_expr ref,
+ int index: int ref,
+ int statement: @stmt ref
+);
+
+macro_exprs(
+ unique int id: @macro_expr
+);
+
+#keyset[id]
+macro_expr_macro_calls(
+ int id: @macro_expr ref,
+ int macro_call: @macro_call ref
+);
+
+macro_pats(
+ unique int id: @macro_pat
+);
+
+#keyset[id]
+macro_pat_macro_calls(
+ int id: @macro_pat ref,
+ int macro_call: @macro_call ref
+);
+
+macro_type_reprs(
+ unique int id: @macro_type_repr
+);
+
+#keyset[id]
+macro_type_repr_macro_calls(
+ int id: @macro_type_repr ref,
+ int macro_call: @macro_call ref
+);
+
+match_exprs(
+ unique int id: @match_expr
+);
+
+#keyset[id, index]
+match_expr_attrs(
+ int id: @match_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+match_expr_scrutinees(
+ int id: @match_expr ref,
+ int scrutinee: @expr ref
+);
+
+#keyset[id]
+match_expr_match_arm_lists(
+ int id: @match_expr ref,
+ int match_arm_list: @match_arm_list ref
+);
+
+name_refs(
+ unique int id: @name_ref
+);
+
+#keyset[id]
+name_ref_texts(
+ int id: @name_ref ref,
+ string text: string ref
+);
+
+never_type_reprs(
+ unique int id: @never_type_repr
+);
+
+offset_of_exprs(
+ unique int id: @offset_of_expr
+);
+
+#keyset[id, index]
+offset_of_expr_attrs(
+ int id: @offset_of_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+offset_of_expr_fields(
+ int id: @offset_of_expr ref,
+ int index: int ref,
+ int field: @name_ref ref
+);
+
+#keyset[id]
+offset_of_expr_type_reprs(
+ int id: @offset_of_expr ref,
+ int type_repr: @type_repr ref
+);
+
+or_pats(
+ unique int id: @or_pat
+);
+
+#keyset[id, index]
+or_pat_pats(
+ int id: @or_pat ref,
+ int index: int ref,
+ int pat: @pat ref
+);
+
+params(
+ unique int id: @param
+);
+
+#keyset[id]
+param_pats(
+ int id: @param ref,
+ int pat: @pat ref
+);
+
+paren_exprs(
+ unique int id: @paren_expr
+);
+
+#keyset[id, index]
+paren_expr_attrs(
+ int id: @paren_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+paren_expr_exprs(
+ int id: @paren_expr ref,
+ int expr: @expr ref
+);
+
+paren_pats(
+ unique int id: @paren_pat
+);
+
+#keyset[id]
+paren_pat_pats(
+ int id: @paren_pat ref,
+ int pat: @pat ref
+);
+
+paren_type_reprs(
+ unique int id: @paren_type_repr
+);
+
+#keyset[id]
+paren_type_repr_type_reprs(
+ int id: @paren_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+@path_ast_node =
+ @path_expr
+| @path_pat
+| @struct_expr
+| @struct_pat
+| @tuple_struct_pat
+;
+
+#keyset[id]
+path_ast_node_paths(
+ int id: @path_ast_node ref,
+ int path: @path ref
+);
+
+@path_expr_base =
+ @path_expr
+;
+
+path_type_reprs(
+ unique int id: @path_type_repr
+);
+
+#keyset[id]
+path_type_repr_paths(
+ int id: @path_type_repr ref,
+ int path: @path ref
+);
+
+prefix_exprs(
+ unique int id: @prefix_expr
+);
+
+#keyset[id, index]
+prefix_expr_attrs(
+ int id: @prefix_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+prefix_expr_exprs(
+ int id: @prefix_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+prefix_expr_operator_names(
+ int id: @prefix_expr ref,
+ string operator_name: string ref
+);
+
+ptr_type_reprs(
+ unique int id: @ptr_type_repr
+);
+
+#keyset[id]
+ptr_type_repr_is_const(
+ int id: @ptr_type_repr ref
+);
+
+#keyset[id]
+ptr_type_repr_is_mut(
+ int id: @ptr_type_repr ref
+);
+
+#keyset[id]
+ptr_type_repr_type_reprs(
+ int id: @ptr_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+range_exprs(
+ unique int id: @range_expr
+);
+
+#keyset[id, index]
+range_expr_attrs(
+ int id: @range_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+range_expr_ends(
+ int id: @range_expr ref,
+ int end: @expr ref
+);
+
+#keyset[id]
+range_expr_operator_names(
+ int id: @range_expr ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+range_expr_starts(
+ int id: @range_expr ref,
+ int start: @expr ref
+);
+
+range_pats(
+ unique int id: @range_pat
+);
+
+#keyset[id]
+range_pat_ends(
+ int id: @range_pat ref,
+ int end: @pat ref
+);
+
+#keyset[id]
+range_pat_operator_names(
+ int id: @range_pat ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+range_pat_starts(
+ int id: @range_pat ref,
+ int start: @pat ref
+);
+
+ref_exprs(
+ unique int id: @ref_expr
+);
+
+#keyset[id, index]
+ref_expr_attrs(
+ int id: @ref_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+ref_expr_exprs(
+ int id: @ref_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+ref_expr_is_const(
+ int id: @ref_expr ref
+);
+
+#keyset[id]
+ref_expr_is_mut(
+ int id: @ref_expr ref
+);
+
+#keyset[id]
+ref_expr_is_raw(
+ int id: @ref_expr ref
+);
+
+ref_pats(
+ unique int id: @ref_pat
+);
+
+#keyset[id]
+ref_pat_is_mut(
+ int id: @ref_pat ref
+);
+
+#keyset[id]
+ref_pat_pats(
+ int id: @ref_pat ref,
+ int pat: @pat ref
+);
+
+ref_type_reprs(
+ unique int id: @ref_type_repr
+);
+
+#keyset[id]
+ref_type_repr_is_mut(
+ int id: @ref_type_repr ref
+);
+
+#keyset[id]
+ref_type_repr_lifetimes(
+ int id: @ref_type_repr ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+ref_type_repr_type_reprs(
+ int id: @ref_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+rest_pats(
+ unique int id: @rest_pat
+);
+
+#keyset[id, index]
+rest_pat_attrs(
+ int id: @rest_pat ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+return_exprs(
+ unique int id: @return_expr
+);
+
+#keyset[id, index]
+return_expr_attrs(
+ int id: @return_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+return_expr_exprs(
+ int id: @return_expr ref,
+ int expr: @expr ref
+);
+
+self_params(
+ unique int id: @self_param
+);
+
+#keyset[id]
+self_param_is_ref(
+ int id: @self_param ref
+);
+
+#keyset[id]
+self_param_is_mut(
+ int id: @self_param ref
+);
+
+#keyset[id]
+self_param_lifetimes(
+ int id: @self_param ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+self_param_names(
+ int id: @self_param ref,
+ int name: @name ref
+);
+
+slice_pats(
+ unique int id: @slice_pat
+);
+
+#keyset[id, index]
+slice_pat_pats(
+ int id: @slice_pat ref,
+ int index: int ref,
+ int pat: @pat ref
+);
+
+slice_type_reprs(
+ unique int id: @slice_type_repr
+);
+
+#keyset[id]
+slice_type_repr_type_reprs(
+ int id: @slice_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+struct_field_lists(
+ unique int id: @struct_field_list
+);
+
+#keyset[id, index]
+struct_field_list_fields(
+ int id: @struct_field_list ref,
+ int index: int ref,
+ int field: @struct_field ref
+);
+
+try_exprs(
+ unique int id: @try_expr
+);
+
+#keyset[id, index]
+try_expr_attrs(
+ int id: @try_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+try_expr_exprs(
+ int id: @try_expr ref,
+ int expr: @expr ref
+);
+
+tuple_exprs(
+ unique int id: @tuple_expr
+);
+
+#keyset[id, index]
+tuple_expr_attrs(
+ int id: @tuple_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+tuple_expr_fields(
+ int id: @tuple_expr ref,
+ int index: int ref,
+ int field: @expr ref
+);
+
+tuple_field_lists(
+ unique int id: @tuple_field_list
+);
+
+#keyset[id, index]
+tuple_field_list_fields(
+ int id: @tuple_field_list ref,
+ int index: int ref,
+ int field: @tuple_field ref
+);
+
+tuple_pats(
+ unique int id: @tuple_pat
+);
+
+#keyset[id, index]
+tuple_pat_fields(
+ int id: @tuple_pat ref,
+ int index: int ref,
+ int field: @pat ref
+);
+
+tuple_type_reprs(
+ unique int id: @tuple_type_repr
+);
+
+#keyset[id, index]
+tuple_type_repr_fields(
+ int id: @tuple_type_repr ref,
+ int index: int ref,
+ int field: @type_repr ref
+);
+
+type_args(
+ unique int id: @type_arg
+);
+
+#keyset[id]
+type_arg_type_reprs(
+ int id: @type_arg ref,
+ int type_repr: @type_repr ref
+);
+
+type_params(
+ unique int id: @type_param
+);
+
+#keyset[id, index]
+type_param_attrs(
+ int id: @type_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+type_param_default_types(
+ int id: @type_param ref,
+ int default_type: @type_repr ref
+);
+
+#keyset[id]
+type_param_names(
+ int id: @type_param ref,
+ int name: @name ref
+);
+
+#keyset[id]
+type_param_type_bound_lists(
+ int id: @type_param ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+underscore_exprs(
+ unique int id: @underscore_expr
+);
+
+#keyset[id, index]
+underscore_expr_attrs(
+ int id: @underscore_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+variants(
+ unique int id: @variant
+);
+
+#keyset[id, index]
+variant_attrs(
+ int id: @variant ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+variant_discriminants(
+ int id: @variant ref,
+ int discriminant: @expr ref
+);
+
+#keyset[id]
+variant_field_lists(
+ int id: @variant ref,
+ int field_list: @field_list ref
+);
+
+#keyset[id]
+variant_names(
+ int id: @variant ref,
+ int name: @name ref
+);
+
+#keyset[id]
+variant_visibilities(
+ int id: @variant ref,
+ int visibility: @visibility ref
+);
+
+wildcard_pats(
+ unique int id: @wildcard_pat
+);
+
+yeet_exprs(
+ unique int id: @yeet_expr
+);
+
+#keyset[id, index]
+yeet_expr_attrs(
+ int id: @yeet_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+yeet_expr_exprs(
+ int id: @yeet_expr ref,
+ int expr: @expr ref
+);
+
+yield_exprs(
+ unique int id: @yield_expr
+);
+
+#keyset[id, index]
+yield_expr_attrs(
+ int id: @yield_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+yield_expr_exprs(
+ int id: @yield_expr ref,
+ int expr: @expr ref
+);
+
+@adt =
+ @enum
+| @struct
+| @union
+;
+
+#keyset[id, index]
+adt_derive_macro_expansions(
+ int id: @adt ref,
+ int index: int ref,
+ int derive_macro_expansion: @macro_items ref
+);
+
+block_exprs(
+ unique int id: @block_expr
+);
+
+#keyset[id, index]
+block_expr_attrs(
+ int id: @block_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+block_expr_is_async(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_const(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_gen(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_move(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_try(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_unsafe(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_stmt_lists(
+ int id: @block_expr ref,
+ int stmt_list: @stmt_list ref
+);
+
+call_exprs(
+ unique int id: @call_expr
+);
+
+#keyset[id]
+call_expr_functions(
+ int id: @call_expr ref,
+ int function: @expr ref
+);
+
+consts(
+ unique int id: @const
+);
+
+#keyset[id, index]
+const_attrs(
+ int id: @const ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+const_bodies(
+ int id: @const ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+const_generic_param_lists(
+ int id: @const ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+const_is_const(
+ int id: @const ref
+);
+
+#keyset[id]
+const_is_default(
+ int id: @const ref
+);
+
+#keyset[id]
+const_names(
+ int id: @const ref,
+ int name: @name ref
+);
+
+#keyset[id]
+const_type_reprs(
+ int id: @const ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+const_visibilities(
+ int id: @const ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+const_where_clauses(
+ int id: @const ref,
+ int where_clause: @where_clause ref
+);
+
+#keyset[id]
+const_has_implementation(
+ int id: @const ref
+);
+
+extern_blocks(
+ unique int id: @extern_block
+);
+
+#keyset[id]
+extern_block_abis(
+ int id: @extern_block ref,
+ int abi: @abi ref
+);
+
+#keyset[id, index]
+extern_block_attrs(
+ int id: @extern_block ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+extern_block_extern_item_lists(
+ int id: @extern_block ref,
+ int extern_item_list: @extern_item_list ref
+);
+
+#keyset[id]
+extern_block_is_unsafe(
+ int id: @extern_block ref
+);
+
+extern_crates(
+ unique int id: @extern_crate
+);
+
+#keyset[id, index]
+extern_crate_attrs(
+ int id: @extern_crate ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+extern_crate_identifiers(
+ int id: @extern_crate ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+extern_crate_renames(
+ int id: @extern_crate ref,
+ int rename: @rename ref
+);
+
+#keyset[id]
+extern_crate_visibilities(
+ int id: @extern_crate ref,
+ int visibility: @visibility ref
+);
+
+functions(
+ unique int id: @function
+);
+
+#keyset[id]
+function_abis(
+ int id: @function ref,
+ int abi: @abi ref
+);
+
+#keyset[id]
+function_bodies(
+ int id: @function ref,
+ int body: @block_expr ref
+);
+
+#keyset[id]
+function_generic_param_lists(
+ int id: @function ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+function_is_async(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_const(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_default(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_gen(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_unsafe(
+ int id: @function ref
+);
+
+#keyset[id]
+function_names(
+ int id: @function ref,
+ int name: @name ref
+);
+
+#keyset[id]
+function_ret_types(
+ int id: @function ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+function_visibilities(
+ int id: @function ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+function_where_clauses(
+ int id: @function ref,
+ int where_clause: @where_clause ref
+);
+
+#keyset[id]
+function_has_implementation(
+ int id: @function ref
+);
+
+impls(
+ unique int id: @impl
+);
+
+#keyset[id]
+impl_assoc_item_lists(
+ int id: @impl ref,
+ int assoc_item_list: @assoc_item_list ref
+);
+
+#keyset[id, index]
+impl_attrs(
+ int id: @impl ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+impl_generic_param_lists(
+ int id: @impl ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+impl_is_const(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_is_default(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_is_unsafe(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_self_ties(
+ int id: @impl ref,
+ int self_ty: @type_repr ref
+);
+
+#keyset[id]
+impl_traits(
+ int id: @impl ref,
+ int trait: @type_repr ref
+);
+
+#keyset[id]
+impl_visibilities(
+ int id: @impl ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+impl_where_clauses(
+ int id: @impl ref,
+ int where_clause: @where_clause ref
+);
+
+@looping_expr =
+ @for_expr
+| @loop_expr
+| @while_expr
+;
+
+#keyset[id]
+looping_expr_loop_bodies(
+ int id: @looping_expr ref,
+ int loop_body: @block_expr ref
+);
+
+macro_calls(
+ unique int id: @macro_call
+);
+
+#keyset[id, index]
+macro_call_attrs(
+ int id: @macro_call ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_call_paths(
+ int id: @macro_call ref,
+ int path: @path ref
+);
+
+#keyset[id]
+macro_call_token_trees(
+ int id: @macro_call ref,
+ int token_tree: @token_tree ref
+);
+
+#keyset[id]
+macro_call_macro_call_expansions(
+ int id: @macro_call ref,
+ int macro_call_expansion: @ast_node ref
+);
+
+macro_defs(
+ unique int id: @macro_def
+);
+
+#keyset[id]
+macro_def_args(
+ int id: @macro_def ref,
+ int args: @token_tree ref
+);
+
+#keyset[id, index]
+macro_def_attrs(
+ int id: @macro_def ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_def_bodies(
+ int id: @macro_def ref,
+ int body: @token_tree ref
+);
+
+#keyset[id]
+macro_def_names(
+ int id: @macro_def ref,
+ int name: @name ref
+);
+
+#keyset[id]
+macro_def_visibilities(
+ int id: @macro_def ref,
+ int visibility: @visibility ref
+);
+
+macro_rules(
+ unique int id: @macro_rules
+);
+
+#keyset[id, index]
+macro_rules_attrs(
+ int id: @macro_rules ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_rules_names(
+ int id: @macro_rules ref,
+ int name: @name ref
+);
+
+#keyset[id]
+macro_rules_token_trees(
+ int id: @macro_rules ref,
+ int token_tree: @token_tree ref
+);
+
+#keyset[id]
+macro_rules_visibilities(
+ int id: @macro_rules ref,
+ int visibility: @visibility ref
+);
+
+method_call_exprs(
+ unique int id: @method_call_expr
+);
+
+#keyset[id]
+method_call_expr_generic_arg_lists(
+ int id: @method_call_expr ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+method_call_expr_identifiers(
+ int id: @method_call_expr ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+method_call_expr_receivers(
+ int id: @method_call_expr ref,
+ int receiver: @expr ref
+);
+
+modules(
+ unique int id: @module
+);
+
+#keyset[id, index]
+module_attrs(
+ int id: @module ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+module_item_lists(
+ int id: @module ref,
+ int item_list: @item_list ref
+);
+
+#keyset[id]
+module_names(
+ int id: @module ref,
+ int name: @name ref
+);
+
+#keyset[id]
+module_visibilities(
+ int id: @module ref,
+ int visibility: @visibility ref
+);
+
+path_exprs(
+ unique int id: @path_expr
+);
+
+#keyset[id, index]
+path_expr_attrs(
+ int id: @path_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+path_pats(
+ unique int id: @path_pat
+);
+
+statics(
+ unique int id: @static
+);
+
+#keyset[id, index]
+static_attrs(
+ int id: @static ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+static_bodies(
+ int id: @static ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+static_is_mut(
+ int id: @static ref
+);
+
+#keyset[id]
+static_is_static(
+ int id: @static ref
+);
+
+#keyset[id]
+static_is_unsafe(
+ int id: @static ref
+);
+
+#keyset[id]
+static_names(
+ int id: @static ref,
+ int name: @name ref
+);
+
+#keyset[id]
+static_type_reprs(
+ int id: @static ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+static_visibilities(
+ int id: @static ref,
+ int visibility: @visibility ref
+);
+
+struct_exprs(
+ unique int id: @struct_expr
+);
+
+#keyset[id]
+struct_expr_struct_expr_field_lists(
+ int id: @struct_expr ref,
+ int struct_expr_field_list: @struct_expr_field_list ref
+);
+
+struct_pats(
+ unique int id: @struct_pat
+);
+
+#keyset[id]
+struct_pat_struct_pat_field_lists(
+ int id: @struct_pat ref,
+ int struct_pat_field_list: @struct_pat_field_list ref
+);
+
+traits(
+ unique int id: @trait
+);
+
+#keyset[id]
+trait_assoc_item_lists(
+ int id: @trait ref,
+ int assoc_item_list: @assoc_item_list ref
+);
+
+#keyset[id, index]
+trait_attrs(
+ int id: @trait ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+trait_generic_param_lists(
+ int id: @trait ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+trait_is_auto(
+ int id: @trait ref
+);
+
+#keyset[id]
+trait_is_unsafe(
+ int id: @trait ref
+);
+
+#keyset[id]
+trait_names(
+ int id: @trait ref,
+ int name: @name ref
+);
+
+#keyset[id]
+trait_type_bound_lists(
+ int id: @trait ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+trait_visibilities(
+ int id: @trait ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+trait_where_clauses(
+ int id: @trait ref,
+ int where_clause: @where_clause ref
+);
+
+trait_aliases(
+ unique int id: @trait_alias
+);
+
+#keyset[id, index]
+trait_alias_attrs(
+ int id: @trait_alias ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+trait_alias_generic_param_lists(
+ int id: @trait_alias ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+trait_alias_names(
+ int id: @trait_alias ref,
+ int name: @name ref
+);
+
+#keyset[id]
+trait_alias_type_bound_lists(
+ int id: @trait_alias ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+trait_alias_visibilities(
+ int id: @trait_alias ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+trait_alias_where_clauses(
+ int id: @trait_alias ref,
+ int where_clause: @where_clause ref
+);
+
+tuple_struct_pats(
+ unique int id: @tuple_struct_pat
+);
+
+#keyset[id, index]
+tuple_struct_pat_fields(
+ int id: @tuple_struct_pat ref,
+ int index: int ref,
+ int field: @pat ref
+);
+
+type_aliases(
+ unique int id: @type_alias
+);
+
+#keyset[id, index]
+type_alias_attrs(
+ int id: @type_alias ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+type_alias_generic_param_lists(
+ int id: @type_alias ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+type_alias_is_default(
+ int id: @type_alias ref
+);
+
+#keyset[id]
+type_alias_names(
+ int id: @type_alias ref,
+ int name: @name ref
+);
+
+#keyset[id]
+type_alias_type_reprs(
+ int id: @type_alias ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+type_alias_type_bound_lists(
+ int id: @type_alias ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+type_alias_visibilities(
+ int id: @type_alias ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+type_alias_where_clauses(
+ int id: @type_alias ref,
+ int where_clause: @where_clause ref
+);
+
+uses(
+ unique int id: @use
+);
+
+#keyset[id, index]
+use_attrs(
+ int id: @use ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+use_use_trees(
+ int id: @use ref,
+ int use_tree: @use_tree ref
+);
+
+#keyset[id]
+use_visibilities(
+ int id: @use ref,
+ int visibility: @visibility ref
+);
+
+enums(
+ unique int id: @enum
+);
+
+#keyset[id, index]
+enum_attrs(
+ int id: @enum ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+enum_generic_param_lists(
+ int id: @enum ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+enum_names(
+ int id: @enum ref,
+ int name: @name ref
+);
+
+#keyset[id]
+enum_variant_lists(
+ int id: @enum ref,
+ int variant_list: @variant_list ref
+);
+
+#keyset[id]
+enum_visibilities(
+ int id: @enum ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+enum_where_clauses(
+ int id: @enum ref,
+ int where_clause: @where_clause ref
+);
+
+for_exprs(
+ unique int id: @for_expr
+);
+
+#keyset[id, index]
+for_expr_attrs(
+ int id: @for_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+for_expr_iterables(
+ int id: @for_expr ref,
+ int iterable: @expr ref
+);
+
+#keyset[id]
+for_expr_pats(
+ int id: @for_expr ref,
+ int pat: @pat ref
+);
+
+loop_exprs(
+ unique int id: @loop_expr
+);
+
+#keyset[id, index]
+loop_expr_attrs(
+ int id: @loop_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+structs(
+ unique int id: @struct
+);
+
+#keyset[id, index]
+struct_attrs(
+ int id: @struct ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_field_lists_(
+ int id: @struct ref,
+ int field_list: @field_list ref
+);
+
+#keyset[id]
+struct_generic_param_lists(
+ int id: @struct ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+struct_names(
+ int id: @struct ref,
+ int name: @name ref
+);
+
+#keyset[id]
+struct_visibilities(
+ int id: @struct ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+struct_where_clauses(
+ int id: @struct ref,
+ int where_clause: @where_clause ref
+);
+
+unions(
+ unique int id: @union
+);
+
+#keyset[id, index]
+union_attrs(
+ int id: @union ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+union_generic_param_lists(
+ int id: @union ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+union_names(
+ int id: @union ref,
+ int name: @name ref
+);
+
+#keyset[id]
+union_struct_field_lists(
+ int id: @union ref,
+ int struct_field_list: @struct_field_list ref
+);
+
+#keyset[id]
+union_visibilities(
+ int id: @union ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+union_where_clauses(
+ int id: @union ref,
+ int where_clause: @where_clause ref
+);
+
+while_exprs(
+ unique int id: @while_expr
+);
+
+#keyset[id, index]
+while_expr_attrs(
+ int id: @while_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+while_expr_conditions(
+ int id: @while_expr ref,
+ int condition: @expr ref
+);
diff --git a/rust/ql/lib/upgrades/e3b3765116ecb8d796979f0b4787926cb8d691b5/upgrade.properties b/rust/ql/lib/upgrades/e3b3765116ecb8d796979f0b4787926cb8d691b5/upgrade.properties
new file mode 100644
index 000000000000..9b83871fb9b6
--- /dev/null
+++ b/rust/ql/lib/upgrades/e3b3765116ecb8d796979f0b4787926cb8d691b5/upgrade.properties
@@ -0,0 +1,2 @@
+description: Add databaseMetadata relation
+compatibility: full
diff --git a/shared/tree-sitter-extractor/src/generator/mod.rs b/shared/tree-sitter-extractor/src/generator/mod.rs
index fc0abc7f2737..e4bd1ac4eb0d 100644
--- a/shared/tree-sitter-extractor/src/generator/mod.rs
+++ b/shared/tree-sitter-extractor/src/generator/mod.rs
@@ -17,7 +17,6 @@ pub fn generate(
languages: Vec,
dbscheme_path: PathBuf,
ql_library_path: PathBuf,
- overlay_support: bool,
) -> std::io::Result<()> {
let dbscheme_file = File::create(dbscheme_path).map_err(|e| {
tracing::error!("Failed to create dbscheme file: {}", e);
@@ -33,16 +32,6 @@ pub fn generate(
writeln!(dbscheme_writer, include_str!("prefix.dbscheme"))?;
- // Eventually all languages will have the metadata relation (for overlay support), at which
- // point this could be moved to prefix.dbscheme.
- if overlay_support {
- writeln!(dbscheme_writer, "/*- Database metadata -*/",)?;
- dbscheme::write(
- &mut dbscheme_writer,
- &[dbscheme::Entry::Table(create_database_metadata())],
- )?;
- }
-
let mut ql_writer = LineWriter::new(File::create(ql_library_path)?);
writeln!(
ql_writer,
@@ -60,14 +49,12 @@ pub fn generate(
})],
)?;
- if overlay_support {
- ql::write(
- &mut ql_writer,
- &[ql::TopLevel::Predicate(
- ql_gen::create_is_overlay_predicate(),
- )],
- )?;
- }
+ ql::write(
+ &mut ql_writer,
+ &[ql::TopLevel::Predicate(
+ ql_gen::create_is_overlay_predicate(),
+ )],
+ )?;
for language in languages {
let prefix = node_types::to_snake_case(&language.name);
@@ -113,20 +100,19 @@ pub fn generate(
ql::TopLevel::Class(ql_gen::create_reserved_word_class(&reserved_word_name)),
];
- if overlay_support {
- body.push(ql::TopLevel::Predicate(
- ql_gen::create_get_node_file_predicate(&ast_node_name, &node_location_table_name),
- ));
- body.push(ql::TopLevel::Predicate(
- ql_gen::create_discard_file_predicate(),
- ));
- body.push(ql::TopLevel::Predicate(
- ql_gen::create_discardable_ast_node_predicate(&ast_node_name),
- ));
- body.push(ql::TopLevel::Predicate(
- ql_gen::create_discard_ast_node_predicate(&ast_node_name),
- ));
- }
+ // Overlay discard predicates
+ body.push(ql::TopLevel::Predicate(
+ ql_gen::create_get_node_file_predicate(&ast_node_name, &node_location_table_name),
+ ));
+ body.push(ql::TopLevel::Predicate(
+ ql_gen::create_discard_file_predicate(),
+ ));
+ body.push(ql::TopLevel::Predicate(
+ ql_gen::create_discardable_ast_node_predicate(&ast_node_name),
+ ));
+ body.push(ql::TopLevel::Predicate(
+ ql_gen::create_discard_ast_node_predicate(&ast_node_name),
+ ));
body.append(&mut ql_gen::convert_nodes(&nodes));
ql::write(
@@ -478,26 +464,3 @@ fn create_token_case<'a>(name: &'a str, token_kinds: Map<&'a str, usize>) -> dbs
branches,
}
}
-
-fn create_database_metadata() -> dbscheme::Table<'static> {
- dbscheme::Table {
- name: "databaseMetadata",
- keysets: None,
- columns: vec![
- dbscheme::Column {
- db_type: dbscheme::DbColumnType::String,
- name: "metadataKey",
- unique: false,
- ql_type: ql::Type::String,
- ql_type_is_ref: true,
- },
- dbscheme::Column {
- db_type: dbscheme::DbColumnType::String,
- name: "value",
- unique: false,
- ql_type: ql::Type::String,
- ql_type_is_ref: true,
- },
- ],
- }
-}
diff --git a/shared/tree-sitter-extractor/src/generator/prefix.dbscheme b/shared/tree-sitter-extractor/src/generator/prefix.dbscheme
index 96c7feaaf192..16921105a720 100644
--- a/shared/tree-sitter-extractor/src/generator/prefix.dbscheme
+++ b/shared/tree-sitter-extractor/src/generator/prefix.dbscheme
@@ -104,3 +104,9 @@ yaml_locations(unique int locatable: @yaml_locatable ref,
int location: @location_default ref);
@yaml_locatable = @yaml_node | @yaml_error;
+
+/*- Database metadata -*/
+databaseMetadata(
+ string metadataKey: string ref,
+ string value: string ref
+);