From 1f4b5628c191ad9fa3029938067a7a62c2d8b781 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 16 Jun 2025 17:54:52 +0200 Subject: [PATCH 1/6] Rust: expand attribute macros on `AssocItem` --- .../downgrade.ql | 7 + .../old.dbscheme | 3621 +++++++++++++++++ .../rust.dbscheme | 3616 ++++++++++++++++ .../upgrade.properties | 5 + rust/extractor/src/generated/.generated.list | 2 +- rust/extractor/src/generated/top.rs | 291 +- rust/extractor/src/translate/base.rs | 54 +- rust/ql/.generated.list | 27 +- rust/ql/.gitattributes | 3 + .../macro-expansion/attributes/src/lib.rs | 21 + .../macro-expansion/calls/Cargo.toml | 2 + .../macro-expansion/calls/src/lib.rs | 23 + .../macro-expansion/test.expected | 16 + rust/ql/lib/codeql/rust/elements.qll | 1 + .../ql/lib/codeql/rust/elements/AssocItem.qll | 2 +- .../codeql/rust/elements/ExpandableItem.qll | 13 + rust/ql/lib/codeql/rust/elements/Item.qll | 2 +- .../elements/internal/ExpandableItemImpl.qll | 19 + .../elements/internal/generated/AssocItem.qll | 4 +- .../internal/generated/ExpandableItem.qll | 38 + .../rust/elements/internal/generated/Item.qll | 21 +- .../internal/generated/ParentChild.qll | 59 +- .../rust/elements/internal/generated/Raw.qll | 44 +- .../elements/internal/generated/Synth.qll | 55 +- rust/ql/lib/rust.dbscheme | 33 +- .../old.dbscheme | 3616 ++++++++++++++++ .../rust.dbscheme | 3621 +++++++++++++++++ .../upgrade.properties | 5 + .../extractor-tests/generated/Const/Const.ql | 25 +- .../generated/Function/Function.ql | 26 +- .../generated/MacroCall/MacroCall.ql | 20 +- .../generated/TypeAlias/TypeAlias.ql | 28 +- rust/schema/annotations.py | 5 +- rust/schema/prelude.py | 7 + 34 files changed, 15122 insertions(+), 210 deletions(-) create mode 100644 rust/downgrades/ecb8241bf0be2db7cde671a45c2912c72672422a/downgrade.ql create mode 100644 rust/downgrades/ecb8241bf0be2db7cde671a45c2912c72672422a/old.dbscheme create mode 100644 rust/downgrades/ecb8241bf0be2db7cde671a45c2912c72672422a/rust.dbscheme create mode 100644 rust/downgrades/ecb8241bf0be2db7cde671a45c2912c72672422a/upgrade.properties create mode 100644 rust/ql/lib/codeql/rust/elements/ExpandableItem.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/ExpandableItemImpl.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/generated/ExpandableItem.qll create mode 100644 rust/ql/lib/upgrades/aa9a0bda17c76b804ad9e108d43da15f6beaf2a7/old.dbscheme create mode 100644 rust/ql/lib/upgrades/aa9a0bda17c76b804ad9e108d43da15f6beaf2a7/rust.dbscheme create mode 100644 rust/ql/lib/upgrades/aa9a0bda17c76b804ad9e108d43da15f6beaf2a7/upgrade.properties diff --git a/rust/downgrades/ecb8241bf0be2db7cde671a45c2912c72672422a/downgrade.ql b/rust/downgrades/ecb8241bf0be2db7cde671a45c2912c72672422a/downgrade.ql new file mode 100644 index 000000000000..c8a99cfa544b --- /dev/null +++ b/rust/downgrades/ecb8241bf0be2db7cde671a45c2912c72672422a/downgrade.ql @@ -0,0 +1,7 @@ +class Element extends @element { + string toString() { none() } +} + +query predicate new_item_attribute_macro_expansions(Element id, Element attribute_macro_expansion) { + expandable_item_attribute_macro_expansions(id, attribute_macro_expansion) and id instanceof @item +} diff --git a/rust/downgrades/ecb8241bf0be2db7cde671a45c2912c72672422a/old.dbscheme b/rust/downgrades/ecb8241bf0be2db7cde671a45c2912c72672422a/old.dbscheme new file mode 100644 index 000000000000..ecb8241bf0be --- /dev/null +++ b/rust/downgrades/ecb8241bf0be2db7cde671a45c2912c72672422a/old.dbscheme @@ -0,0 +1,3621 @@ +// 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_list +| @attr +| @callable +| @closure_binder +| @expandable_item +| @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_def +| @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_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 +); + +@expandable_item = + @assoc_item +| @item +; + +#keyset[id] +expandable_item_attribute_macro_expansions( + int id: @expandable_item ref, + int attribute_macro_expansion: @macro_items 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_def = + @struct +| @union +| @variant +; + +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_item = + @const +| @function +| @macro_call +| @type_alias +; + +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 = + @const +| @enum +| @extern_block +| @extern_crate +| @function +| @impl +| @macro_call +| @macro_def +| @macro_rules +| @module +| @static +| @struct +| @trait +| @trait_alias +| @type_alias +| @union +| @use +; + +@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 +); + +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_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_has_implementation( + int id: @const 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 +); + +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 +); + +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 +); + +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 +); + +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 +); + +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 +); + +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 +); + +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/ecb8241bf0be2db7cde671a45c2912c72672422a/rust.dbscheme b/rust/downgrades/ecb8241bf0be2db7cde671a45c2912c72672422a/rust.dbscheme new file mode 100644 index 000000000000..aa9a0bda17c7 --- /dev/null +++ b/rust/downgrades/ecb8241bf0be2db7cde671a45c2912c72672422a/rust.dbscheme @@ -0,0 +1,3616 @@ +// 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_def +| @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_def = + @struct +| @union +| @variant +; + +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 = + @const +| @enum +| @extern_block +| @extern_crate +| @function +| @impl +| @macro_call +| @macro_def +| @macro_rules +| @module +| @static +| @struct +| @trait +| @trait_alias +| @type_alias +| @union +| @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 +); + +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_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_has_implementation( + int id: @const 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 +); + +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 +); + +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 +); + +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 +); + +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 +); + +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 +); + +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 +); + +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/ecb8241bf0be2db7cde671a45c2912c72672422a/upgrade.properties b/rust/downgrades/ecb8241bf0be2db7cde671a45c2912c72672422a/upgrade.properties new file mode 100644 index 000000000000..6df623dd2b3c --- /dev/null +++ b/rust/downgrades/ecb8241bf0be2db7cde671a45c2912c72672422a/upgrade.properties @@ -0,0 +1,5 @@ +description: Restrict `expandable_item_attribute_macro_expansions` to `item_attribute_macro_expansions` +compatibility: partial + +expandable_item_attribute_macro_expansions.rel: delete +item_attribute_macro_expansions.rel: run downgrade.ql new_item_attribute_macro_expansions diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index 121c5b5a7aae..2f067cb056d2 100644 --- a/rust/extractor/src/generated/.generated.list +++ b/rust/extractor/src/generated/.generated.list @@ -1,2 +1,2 @@ mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 -top.rs 69c1fcaf0efea87feb898f32fdb7bcb842a22119b69ecedd61c2d946eb7e67de 69c1fcaf0efea87feb898f32fdb7bcb842a22119b69ecedd61c2d946eb7e67de +top.rs 4e4563824a0e0323d940c204b39beebb6a664dfce032026bf6f5209b86fe3ca7 4e4563824a0e0323d940c204b39beebb6a664dfce032026bf6f5209b86fe3ca7 diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index fd9b0ca6b91e..dbdc13a315c8 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -693,42 +693,6 @@ impl From> for trap::Label { } } -#[derive(Debug)] -pub struct AssocItem { - _unused: () -} - -impl trap::TrapClass for AssocItem { - fn class_name() -> &'static str { "AssocItem" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme AssocItem is a subclass of AstNode - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme AssocItem is a subclass of Locatable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme AssocItem is a subclass of Element - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct AssocItemList { pub id: trap::TrapId, @@ -919,6 +883,48 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct ExpandableItem { + _unused: () +} + +impl ExpandableItem { + pub fn emit_attribute_macro_expansion(id: trap::Label, value: trap::Label, out: &mut trap::Writer) { + out.add_tuple("expandable_item_attribute_macro_expansions", vec![id.into(), value.into()]); + } +} + +impl trap::TrapClass for ExpandableItem { + fn class_name() -> &'static str { "ExpandableItem" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme ExpandableItem is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme ExpandableItem is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme ExpandableItem is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct Expr { _unused: () @@ -4091,6 +4097,51 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct AssocItem { + _unused: () +} + +impl trap::TrapClass for AssocItem { + fn class_name() -> &'static str { "AssocItem" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme AssocItem is a subclass of ExpandableItem + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme AssocItem is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme AssocItem is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme AssocItem is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct AssocTypeArg { pub id: trap::TrapId, @@ -5760,12 +5811,6 @@ pub struct Item { _unused: () } -impl Item { - pub fn emit_attribute_macro_expansion(id: trap::Label, value: trap::Label, out: &mut trap::Writer) { - out.add_tuple("item_attribute_macro_expansions", vec![id.into(), value.into()]); - } -} - impl trap::TrapClass for Item { fn class_name() -> &'static str { "Item" } } @@ -5815,6 +5860,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Item is a subclass of ExpandableItem + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct LabelableExpr { _unused: () @@ -9103,6 +9157,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Const is a subclass of ExpandableItem + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + impl From> for trap::Label { fn from(value: trap::Label) -> Self { // SAFETY: this is safe because in the dbscheme Const is a subclass of AstNode @@ -9254,6 +9317,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Enum is a subclass of ExpandableItem + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct ExternBlock { pub id: trap::TrapId, @@ -9343,6 +9415,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme ExternBlock is a subclass of ExpandableItem + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct ExternCrate { pub id: trap::TrapId, @@ -9432,6 +9513,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme ExternCrate is a subclass of ExpandableItem + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct Function { pub id: trap::TrapId, @@ -9522,6 +9612,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Function is a subclass of ExpandableItem + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + impl From> for trap::Label { fn from(value: trap::Label) -> Self { // SAFETY: this is safe because in the dbscheme Function is a subclass of AstNode @@ -9707,6 +9806,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Impl is a subclass of ExpandableItem + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct LoopingExpr { _unused: () @@ -9807,6 +9915,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MacroCall is a subclass of ExpandableItem + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + impl From> for trap::Label { fn from(value: trap::Label) -> Self { // SAFETY: this is safe because in the dbscheme MacroCall is a subclass of AstNode @@ -9963,6 +10080,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MacroDef is a subclass of ExpandableItem + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct MacroRules { pub id: trap::TrapId, @@ -10052,6 +10178,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MacroRules is a subclass of ExpandableItem + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct MethodCallExpr { pub id: trap::TrapId, @@ -10234,6 +10369,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Module is a subclass of ExpandableItem + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct PathExpr { pub id: trap::TrapId, @@ -10515,6 +10659,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Static is a subclass of ExpandableItem + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct Struct { pub id: trap::TrapId, @@ -10612,6 +10765,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Struct is a subclass of ExpandableItem + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + impl From> for trap::Label { fn from(value: trap::Label) -> Self { // SAFETY: this is safe because in the dbscheme Struct is a subclass of VariantDef @@ -10892,6 +11054,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Trait is a subclass of ExpandableItem + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct TraitAlias { pub id: trap::TrapId, @@ -10989,6 +11160,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme TraitAlias is a subclass of ExpandableItem + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct TupleStructPat { pub id: trap::TrapId, @@ -11130,6 +11310,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme TypeAlias is a subclass of ExpandableItem + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + impl From> for trap::Label { fn from(value: trap::Label) -> Self { // SAFETY: this is safe because in the dbscheme TypeAlias is a subclass of AstNode @@ -11290,6 +11479,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Union is a subclass of ExpandableItem + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + impl From> for trap::Label { fn from(value: trap::Label) -> Self { // SAFETY: this is safe because in the dbscheme Union is a subclass of VariantDef @@ -11384,6 +11582,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Use is a subclass of ExpandableItem + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct ForExpr { pub id: trap::TrapId, diff --git a/rust/extractor/src/translate/base.rs b/rust/extractor/src/translate/base.rs index 9e9123c45709..ed88256cdf33 100644 --- a/rust/extractor/src/translate/base.rs +++ b/rust/extractor/src/translate/base.rs @@ -26,7 +26,12 @@ use ra_ap_syntax::{ macro_rules! pre_emit { (Item, $self:ident, $node:ident) => { if let Some(label) = $self.prepare_item_expansion($node) { - return Some(label); + return Some(label.into()); + } + }; + (AssocItem, $self:ident, $node:ident) => { + if let Some(label) = $self.prepare_item_expansion(&$node.clone().into()) { + return Some(label.into()); } }; ($($_:tt)*) => {}; @@ -60,7 +65,13 @@ macro_rules! post_emit { $self.extract_canonical_origin_of_enum_variant($node, $label); }; (Item, $self:ident, $node:ident, $label:ident) => { - $self.emit_item_expansion($node, $label); + $self.emit_item_expansion($node, From::>::from($label)); + }; + (AssocItem, $self:ident, $node:ident, $label:ident) => { + $self.emit_item_expansion( + &$node.clone().into(), + From::>::from($label), + ); }; // TODO canonical origin of other items (PathExpr, $self:ident, $node:ident, $label:ident) => { @@ -694,10 +705,21 @@ impl<'a> Translator<'a> { } } + fn is_attribute_macro_target(&self, node: &ast::Item) -> bool { + // rust-analyzer considers as an `attr_macro_call` also a plain macro call, but we want to + // process that differently (in `extract_macro_call_expanded`) + !matches!(node, ast::Item::MacroCall(_)) + && self.semantics.is_some_and(|semantics| { + let file = semantics.hir_file_for(node.syntax()); + let node = InFile::new(file, node); + semantics.is_attr_macro_call(node) + }) + } + pub(crate) fn prepare_item_expansion( &mut self, node: &ast::Item, - ) -> Option> { + ) -> Option> { if self.source_kind == SourceKind::Library { // if the item expands via an attribute macro, we want to only emit the expansion if let Some(expanded) = self.emit_attribute_macro_expansion(node) { @@ -714,13 +736,10 @@ impl<'a> Translator<'a> { expanded.into(), &mut self.trap.writer, ); - return Some(label.into()); + return Some(label); } } - let semantics = self.semantics.as_ref()?; - let file = semantics.hir_file_for(node.syntax()); - let node = InFile::new(file, node); - if semantics.is_attr_macro_call(node) { + if self.is_attribute_macro_target(node) { self.macro_context_depth += 1; } None @@ -730,10 +749,7 @@ impl<'a> Translator<'a> { &mut self, node: &ast::Item, ) -> Option> { - let semantics = self.semantics?; - let file = semantics.hir_file_for(node.syntax()); - let infile_node = InFile::new(file, node); - if !semantics.is_attr_macro_call(infile_node) { + if !self.is_attribute_macro_target(node) { return None; } self.macro_context_depth -= 1; @@ -743,7 +759,7 @@ impl<'a> Translator<'a> { } let ExpandResult { value: expanded, .. - } = semantics.expand_attr_macro(node)?; + } = self.semantics.and_then(|s| s.expand_attr_macro(node))?; self.emit_macro_expansion_parse_errors(node, &expanded); let macro_items = ast::MacroItems::cast(expanded).or_else(|| { let message = "attribute macro expansion cannot be cast to MacroItems".to_owned(); @@ -760,9 +776,17 @@ impl<'a> Translator<'a> { self.emit_macro_items(¯o_items) } - pub(crate) fn emit_item_expansion(&mut self, node: &ast::Item, label: Label) { + pub(crate) fn emit_item_expansion( + &mut self, + node: &ast::Item, + label: Label, + ) { if let Some(expanded) = self.emit_attribute_macro_expansion(node) { - generated::Item::emit_attribute_macro_expansion(label, expanded, &mut self.trap.writer); + generated::ExpandableItem::emit_attribute_macro_expansion( + label, + expanded, + &mut self.trap.writer, + ); } } diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 7c60da3abb77..af723110b1b6 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -20,7 +20,7 @@ lib/codeql/rust/elements/AsmPiece.qll 8650bf07246fac95533876db66178e4b30ed3210de lib/codeql/rust/elements/AsmRegOperand.qll 27abfffe1fc99e243d9b915f9a9694510133e5f72100ec0df53796d27a45de0c 8919ab83081dae2970adb6033340c6a18751ffd6a8157cf8c55916ac4253c791 lib/codeql/rust/elements/AsmRegSpec.qll 77483fc3d1de8761564e2f7b57ecf1300d67de50b66c11144bb4e3e0059ebfd6 521f8dd0af859b7eef6ab2edab2f422c9ff65aa11bad065cfba2ec082e0c786b lib/codeql/rust/elements/AsmSym.qll ba29b59ae2a4aa68bdc09e61b324fd26e8b7e188af852345676fc5434d818eef 10ba571059888f13f71ac5e75d20b58f3aa6eecead0d4c32a7617018c7c72e0e -lib/codeql/rust/elements/AssocItem.qll 89e547c3ce2f49b5eb29063c5d9263a52810838a8cfb30b25bee108166be65a1 238fc6f33c18e02ae023af627afa2184fa8e6055d78ab0936bd1b6180bccb699 +lib/codeql/rust/elements/AssocItem.qll 353ebc96f33394da0a63ac1d8d3a38f0334fb60d38ba5bf9e53e56bd928fa32d 01faf8a312aeec0f59670b5991434ae284ab0702d2f056c1dc9e9d161949bfed lib/codeql/rust/elements/AssocItemList.qll 5d2660e199e59647e3a8b6234531428f6e0a236ed2ced3c9fede13e7f83a5ba5 a2a8e87ab8978f77a70e4c0a8cc7322c522fc4a7a05116646a2b97a2f47428a4 lib/codeql/rust/elements/AssocTypeArg.qll 6ceeec7a0ec78a6f8b2e74c0798d4727ad350cebde954b4ffe442b06e08eb4aa d615f5cd696892518387d20f04dae240fb10ee7c9577028fb6f2a51cd9f5b9e4 lib/codeql/rust/elements/AstNode.qll 5ee6355afb1cafd6dfe408b8c21836a1ba2aeb709fb618802aa09f9342646084 dee708f19c1b333cbd9609819db3dfdb48a0c90d26266c380f31357b1e2d6141 @@ -47,6 +47,7 @@ lib/codeql/rust/elements/Crate.qll 1426960e6f36195e42ea5ea321405c1a72fccd40cd6c0 lib/codeql/rust/elements/DynTraitTypeRepr.qll e4d27112d27ae93c621defd2c976fd4e90663ab7f6115e83ae4fe8106cb5e015 eb9fde89698588f3b7116f62388c54e937f99559b22c93d11a5596e754560072 lib/codeql/rust/elements/Element.qll 0b62d139fef54ed2cf2e2334806aa9bfbc036c9c2085d558f15a42cc3fa84c48 24b999b93df79383ef27ede46e38da752868c88a07fe35fcff5d526684ba7294 lib/codeql/rust/elements/Enum.qll accb97d0bd8c0f41df873d41886f606b6ae4cd1ffa38b70fe9504cfb89d0bd7d b456103ac992e384165d151eb0f169499be4961c3ec35b94a32201b5e4e22189 +lib/codeql/rust/elements/ExpandableItem.qll a285721540a25f08f3bd143f807a2b8ead1a589024e5b58fb130bc7fcff43f27 be0730db9aadb8f23f5ccb32285a24a259f77ba448c10e62a9ad3fe8b94eb262 lib/codeql/rust/elements/Expr.qll e5d65e805ccf440d64d331e55df4c4144ab8c8f63f367382494714087659ffe8 2bbc1e5d3a65f413ec33d9822fa451fbdbe32349158db58cc0bfcfafb0e21bda lib/codeql/rust/elements/ExprStmt.qll 00ac4c7d0192b9e8b0f28d5ae59c27729ff5a831ca11938ea3e677a262337a64 7cc02aa5346cd7c50d75ca63cd6501097b0a3979eb2ed838adff114fe17d35a3 lib/codeql/rust/elements/ExternBlock.qll 96c70d0761ec385fe17aa7228e15fd1711949d5abba5877a1c2f4c180d202125 38ad458868a368d437b2dda44307d788a85c887f45ea76c99adbfc9a53f14d81 @@ -74,7 +75,7 @@ lib/codeql/rust/elements/Impl.qll ce5225fd97b184db7235bcf2561cf23c679de2fc96feca lib/codeql/rust/elements/ImplTraitTypeRepr.qll 1d559b16c659f447a1bde94cc656718f20f133f767060437b755ac81eea9f852 de69c596701f0af4db28c5802d092a39c88a90bf42ea85aea25eecb79417e454 lib/codeql/rust/elements/IndexExpr.qll 0e2e9f018d06ae72be0fc4ddbc019a9aacd8a06f42b4c4431760bd149e7f2290 2bcfd557abd53a48e48de7915c4f2089107c62dfb3e732a904848248dfd3727b lib/codeql/rust/elements/InferTypeRepr.qll 1b8bdcb574a7b6e7dd49f4cfb96655a6ccc355744b424b8c2593fe8218090d53 c20a2a5b0346dc277721deb450e732a47812c8e872ffb60aaba351b1708e9477 -lib/codeql/rust/elements/Item.qll 59d2ac7b5b111579951bf42f68834ecf6dab47a5fb342ed0841c905b977923ab 0d220ec12a373098b26e6cb3a7b327b2d0c1882c3d9b6de00f4df1e8d00bae68 +lib/codeql/rust/elements/Item.qll 283637747974c8e96b92b353a6e6675ed68eed1757c8ccb356307fd867606777 41855c37d8602b8881075b418abdffb5c9f4303bf86acc128dbcc1610110cc2f lib/codeql/rust/elements/ItemList.qll b302d25a7570504e88bfcedf7afc99d25740f320ab27a4a9def1ae66569a4c15 4012a5e43639fa39d5313356ff3ab56c4bb567add1ce012bfede4835406a9571 lib/codeql/rust/elements/Label.qll a31d41db351af7f99a55b26cdbbc7f13b4e96b660a74e2f1cc90c17ee8df8d73 689f87cb056c8a2aefe1a0bfc2486a32feb44eb3175803c61961a6aeee53d66e lib/codeql/rust/elements/LabelableExpr.qll 598be487cd051b004ab95cbbc3029100069dc9955851c492029d80f230e56f0d 92c49b3cfdaba07982f950e18a8d62dae4e96f5d9ae0d7d2f4292628361f0ddc @@ -258,6 +259,7 @@ lib/codeql/rust/elements/internal/CrateConstructor.qll 2a3710ed6ff4ffdbc773ac16e lib/codeql/rust/elements/internal/DynTraitTypeReprConstructor.qll 6964e6c80fb7f5e283c1d15562cef18ed097452b7fcbc04eff780c7646675c7a f03c4830bf1b958fdfb6563136fa21c911b2e41ce1d1caee14ec572c7232866d lib/codeql/rust/elements/internal/DynTraitTypeReprImpl.qll 635b491538a2ede0b2cf8ecaa1cea21e115a707dec4e023fcdbc1f7197615e8c 7a0dc718656631e08c4becc53174af42fbaaa639e252fb087d4317f5add840dc lib/codeql/rust/elements/internal/EnumConstructor.qll eca1a13937faacb1db50e4cf69d175f992f2204a5aaed9144bb6f3cb63814ac5 1bafba78b2729fdb052a25a1ba3f4f70871564aa4df632b4a1d467858a437924 +lib/codeql/rust/elements/internal/ExpandableItemImpl.qll 8744ac626aed1febbaae83ac71484be65f5bbe259113db874304630537bda616 d2187af4900e74f751ba2c3a35ebfc97f0ea8cbfee14552175a7fdb6f024c20c lib/codeql/rust/elements/internal/ExprImpl.qll ab20ee174e2e786f34af6e5dedf3ec071bb89fc266b3e91df6377f72aa38d3f2 f68192700f449bf1c229cfbaabd5353c7c559941c915d5a0c88752cf9844194b lib/codeql/rust/elements/internal/ExprStmtConstructor.qll dd6bb06a7d48c12f630aafd611621cc50ce0f3e7d9abba5484a695f90879264b dc8b6ec8acc314e041ae71868803630c5d4cab488c72c1ea929bb756e1847c52 lib/codeql/rust/elements/internal/ExprStmtImpl.qll 420221c64245b490dab85f4e50d6b408cf488349869eb87312c166e185ad8145 2c2a4c71eea8c1ad8823e8e22780fadebb38ae502b3a7b9b062923a188fef692 @@ -479,7 +481,7 @@ lib/codeql/rust/elements/internal/generated/AsmPiece.qll 17f425727781cdda3a2ec59 lib/codeql/rust/elements/internal/generated/AsmRegOperand.qll e1412c7a9135669cb3e07f82dcf2bebc2ea28958d9ffb9520ae48d299344997c d81f18570703c9eb300241bd1900b7969d12d71cec0a3ce55c33f7d586600c24 lib/codeql/rust/elements/internal/generated/AsmRegSpec.qll 73a24744f62dd6dfa28a0978087828f009fb0619762798f5e0965003fff1e8ec fdb8fd2f89b64086a2ca873c683c02a68d088bb01007d534617d0b7f67fde2cb lib/codeql/rust/elements/internal/generated/AsmSym.qll 476ee9ad15db015c43633072175bca3822af30c379ee10eb8ffc091c88d573f6 9f24baf36506eb959e9077dc5ba1cddbc4d93e3d8cba6e357dff5f9780d1e492 -lib/codeql/rust/elements/internal/generated/AssocItem.qll fad035ba1dab733489690538fbb94ac85072b96b6c2f3e8bcd58a129b9707a26 d9988025b12b8682be83ce9df8c31ce236214683fc50facd4a658f68645248cb +lib/codeql/rust/elements/internal/generated/AssocItem.qll e15e5794e75c7bcfe2527514330edc06abe2eef6fe505af3bce1d28d30a347f9 3b96bbedda8bfe7fd68f41a632271b3f1a0c1b2360a42076e49a4fb27c3df932 lib/codeql/rust/elements/internal/generated/AssocItemList.qll 52900dcf32ef749a3bd285b4a01ff337df3c52255fe2698c9c1547c40652f3b9 10709dd626a527c37186b02c4ea738a9edb6c9e97b87370de206d3eb9941575b lib/codeql/rust/elements/internal/generated/AssocTypeArg.qll a93a42278263bb0c9692aca507108e25f99292aef2a9822501b31489c4ce620d afd9559e0c799988ef7ff1957a5a9ebc4fb92c6e960cbe7fecf12a0a484fef08 lib/codeql/rust/elements/internal/generated/AstNode.qll 1cbfae6a732a1de54b56669ee69d875b0e1d15e58d9aa621df9337c59db5619d 37e16a0c70ae69c5dc1b6df241b9acca96a6326d6cca15456699c44a81c93666 @@ -506,6 +508,7 @@ lib/codeql/rust/elements/internal/generated/Crate.qll 37f3760d7c0c1c3ca809d07daf lib/codeql/rust/elements/internal/generated/DynTraitTypeRepr.qll b2e0e728b6708923b862d9d8d6104d13f572da17e393ec1485b8465e4bfdc206 4a87ea9669c55c4905ce4e781b680f674989591b0cb56af1e9fa1058c13300b3 lib/codeql/rust/elements/internal/generated/Element.qll d56d22c060fa929464f837b1e16475a4a2a2e42d68235a014f7369bcb48431db 0e48426ca72179f675ac29aa49bbaadb8b1d27b08ad5cbc72ec5a005c291848e lib/codeql/rust/elements/internal/generated/Enum.qll ad2a79ae52665f88a41ee045adce4e60beb43483547d958f8230b9917824f0a1 cb12e304d04dffb4d8fb838eb9dbecf00fa8ac18fbf3edc37ee049ad248a4f67 +lib/codeql/rust/elements/internal/generated/ExpandableItem.qll 3ceb3b62eae98d78c254c74e3d3b1dddbdf30d80c892ed283dd11e15fb1334df c9b2fe2c52daa59b8cb2f5470ac0bc387735ea24ad936e06ff8984f829fd6d1e lib/codeql/rust/elements/internal/generated/Expr.qll 5fa34f2ed21829a1509417440dae42d416234ff43433002974328e7aabb8f30f 46f3972c7413b7db28a3ea8acb5a50a74b6dd9b658e8725f6953a8829ac912f8 lib/codeql/rust/elements/internal/generated/ExprStmt.qll d1112230015fbeb216b43407a268dc2ccd0f9e0836ab2dca4800c51b38fa1d7d 4a80562dcc55efa5e72c6c3b1d6747ab44fe494e76faff2b8f6e9f10a4b08b5b lib/codeql/rust/elements/internal/generated/ExternBlock.qll e7faac92297a53ac6e0420eec36255a54f360eeb962bf663a00da709407832dd 5ff32c54ec7097d43cc3311492090b9b90f411eead3bc849f258858f29405e81 @@ -534,7 +537,7 @@ lib/codeql/rust/elements/internal/generated/Impl.qll 5afadb7f80c5ffbd5cd3816c678 lib/codeql/rust/elements/internal/generated/ImplTraitTypeRepr.qll e376a2e34ba51df403d42b02afe25140543e3e53aaf04b9ea118eb575acb4644 dc3a7e3eac758423c90a9803cc40dfdf53818bd62ee894982cd636f6b1596dfc lib/codeql/rust/elements/internal/generated/IndexExpr.qll cf951fc40f6690e966b4dc78fa9a6221aa5c6cade44759dcb52254f799292d11 1572e71918cc4e0b7e028331b6d98c9db23100a3646cd3874d1915e06ab6211d lib/codeql/rust/elements/internal/generated/InferTypeRepr.qll 4f101c1cb1278e919f9195cac4aa0c768e304c1881394b500874e7627e62d6c4 dca3f85d0a78ecc8bf030b4324f0d219ffff60784a2ecf565a4257e888dea0ff -lib/codeql/rust/elements/internal/generated/Item.qll 03077c9d2f3200ebbc5df5d31f7d9b78a3ae25957ac46899a19a93684b2d7306 6492e341b9d9270c0181da0a5330f588238ced81657041ad1ad343db2bdf210b +lib/codeql/rust/elements/internal/generated/Item.qll a0219d40ecb7964883e0cf6c6e04994d55b2c4e82944ef3e331f52144493398c 4551433225679e687fa94f97cfc25348202f0edf7f2d7b3e098a91d803381a83 lib/codeql/rust/elements/internal/generated/ItemList.qll 1571a3ab0f2c7c0d8384549f8eac7f6e6863c42f3ec5d5ea5e01fc26b9f1056f 7b2cade995505f214df9bb2d73143a28b2499f76d88abc56ae8fcc59bf709204 lib/codeql/rust/elements/internal/generated/Label.qll 6630fe16e9d2de6c759ff2684f5b9950bc8566a1525c835c131ebb26f3eea63e 671143775e811fd88ec90961837a6c0ee4db96e54f42efd80c5ae2571661f108 lib/codeql/rust/elements/internal/generated/LabelableExpr.qll 896fd165b438b60d7169e8f30fa2a94946490c4d284e1bbadfec4253b909ee6c 5c6b029ea0b22cf096df2b15fe6f9384ad3e65b50b253cae7f19a2e5ffb04a58 @@ -577,7 +580,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll eaa0cd4402d3665013d47e lib/codeql/rust/elements/internal/generated/ParenExpr.qll 812d2ff65079277f39f15c084657a955a960a7c1c0e96dd60472a58d56b945eb eb8c607f43e1fcbb41f37a10de203a1db806690e10ff4f04d48ed874189cb0eb lib/codeql/rust/elements/internal/generated/ParenPat.qll 24f9dc7fce75827d6fddb856cd48f80168143151b27295c0bab6db5a06567a09 ebadbc6f5498e9ed754b39893ce0763840409a0721036a25b56e1ead7dcc09aa lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll 03f5c5b96a37adeb845352d7fcea3e098da9050e534972d14ac0f70d60a2d776 ed3d6e5d02086523087adebce4e89e35461eb95f2a66d1d4100fe23fc691b126 -lib/codeql/rust/elements/internal/generated/ParentChild.qll 5278b74de04d54708f078fd813d83ae5f934fa12d420b188c1334e3a7c3b8324 61cf70eb649f241e2fcd5e0ba34df63f3a14f07032811b9ae151721783a0fd20 +lib/codeql/rust/elements/internal/generated/ParentChild.qll 7078ece21f185a3e6e02b4f4e8f6fa650d26fe7225199244d46669d71ec3b66d c424e838c43b5de9357e99bbd8a6da3a339533433d7b2d5b8aa17a7d4bc5e7f8 lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll d901fdc8142a5b8847cc98fc2afcfd16428b8ace4fbffb457e761b5fd3901a77 5dbb0aea5a13f937da666ccb042494af8f11e776ade1459d16b70a4dd193f9fb lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll 9b12afb46fc5a9ad3a811b05472621bbecccb900c47504feb7f29d96b28421ca bcacbffc36fb3e0c9b26523b5963af0ffa9fd6b19f00a2a31bdb2316071546bd @@ -592,7 +595,7 @@ lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll 8d0ea4f6c7f8203340bf lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll 80826a6a6868a803aa2372e31c52a03e1811a3f1f2abdb469f91ca0bfdd9ecb6 34ee1e208c1690cba505dff2c588837c0cd91e185e2a87d1fe673191962276a9 -lib/codeql/rust/elements/internal/generated/Raw.qll b6e439cc24f8c02fe73301cd2bc16d59dfd28e2a8a201388d8318c43937309e2 62139c3df2f6c4dca1c897b1384233ff0151b7e5fb1c41a178c5e8e41b5e7f05 +lib/codeql/rust/elements/internal/generated/Raw.qll 33ecfe8cb145c9987b8fb62919e68fd28c2e568b76ecea307da90bbf65e75c88 21e20e24c51d6502e8eb8ca55e74f5da17b009aa4b26f64813c06be75a5c7679 lib/codeql/rust/elements/internal/generated/RefExpr.qll 7d995884e3dc1c25fc719f5d7253179344d63650e217e9ff6530285fe7a57f64 f2c3c12551deea4964b66553fb9b6423ee16fec53bd63db4796191aa60dc6c66 lib/codeql/rust/elements/internal/generated/RefPat.qll 456ede39837463ee22a630ec7ab6c8630d3664a8ea206fcc6e4f199e92fa564c 5622062765f32930465ba6b170e986706f159f6070f48adee3c20e24e8df4e05 lib/codeql/rust/elements/internal/generated/RefTypeRepr.qll 5b0663a6d234572fb3e467e276d019415caa95ef006438cc59b7af4e1783161e 0e27c8a8f0e323c0e4d6db01fca821bf07c0864d293cdf96fa891b10820c1e4b @@ -618,7 +621,7 @@ lib/codeql/rust/elements/internal/generated/StructFieldList.qll 5da528a51a6a5db9 lib/codeql/rust/elements/internal/generated/StructPat.qll c76fa005c2fd0448a8803233e1e8818c4123301eb66ac5cf69d0b9eaafc61e98 6e0dffccdce24bca20e87d5ba0f0995c9a1ae8983283e71e7dbfcf6fffc67a58 lib/codeql/rust/elements/internal/generated/StructPatField.qll 5b5c7302dbc4a902ca8e69ff31875c867e295a16a626ba3cef29cd0aa248f179 4e192a0df79947f5cb0d47fdbbba7986137a6a40a1be92ae119873e2fad67edf lib/codeql/rust/elements/internal/generated/StructPatFieldList.qll 1a95a1bd9f64fb18e9571657cf2d02a8b13c747048a1f0f74baf31b91f0392ad fc274e414ff4ed54386046505920de92755ad0b4d39a7523cdffa4830bd53b37 -lib/codeql/rust/elements/internal/generated/Synth.qll eb248f4e57985ec8eabf9ed5cfb8ba8f5ebd6ca17fb712c992811bced0e342d4 bbcbdba484d3b977a0d6b9158c5fa506f59ced2ad3ae8239d536bf826bfb7e31 +lib/codeql/rust/elements/internal/generated/Synth.qll e4771b110a5089b1ece7b7738c31580e598d75ec0f92340e8c2c7c79bf3955a2 5d64c80b46d6aa2675e1ee215a44643be83476409d2bad4b433056a5d37778d8 lib/codeql/rust/elements/internal/generated/SynthConstructors.qll bcc7f617b775ac0c7f04b1cc333ed7cc0bd91f1fabc8baa03c824d1df03f6076 bcc7f617b775ac0c7f04b1cc333ed7cc0bd91f1fabc8baa03c824d1df03f6076 lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b lib/codeql/rust/elements/internal/generated/TokenTree.qll 1a3c4f5f30659738641abdd28cb793dab3cfde484196b59656fc0a2767e53511 de2ebb210c7759ef7a6f7ee9f805e1cac879221287281775fc80ba34a5492edf @@ -656,7 +659,7 @@ lib/codeql/rust/elements/internal/generated/WhileExpr.qll 0353aab87c49569e1fbf58 lib/codeql/rust/elements/internal/generated/WildcardPat.qll d74b70b57a0a66bfae017a329352a5b27a6b9e73dd5521d627f680e810c6c59e 4b913b548ba27ff3c82fcd32cf996ff329cb57d176d3bebd0fcef394486ea499 lib/codeql/rust/elements/internal/generated/YeetExpr.qll cac328200872a35337b4bcb15c851afb4743f82c080f9738d295571eb01d7392 94af734eea08129b587fed849b643e7572800e8330c0b57d727d41abda47930b lib/codeql/rust/elements/internal/generated/YieldExpr.qll 37e5f0c1e373a22bbc53d8b7f2c0e1f476e5be5080b8437c5e964f4e83fad79a 4a9a68643401637bf48e5c2b2f74a6bf0ddcb4ff76f6bffb61d436b685621e85 -lib/codeql/rust/elements.qll da721d51bc659921998521579df5bff6172d9079d8e243c2b65a5b9eb441b52e da721d51bc659921998521579df5bff6172d9079d8e243c2b65a5b9eb441b52e +lib/codeql/rust/elements.qll 5f3bc7b5ec773dc261a7a7b2965db13bbf086af19840b18ac568a7e841ff4de6 5f3bc7b5ec773dc261a7a7b2965db13bbf086af19840b18ac568a7e841ff4de6 test/extractor-tests/generated/Abi/Abi.ql 7f6e7dc4af86eca3ebdc79b10373988cd0871bd78b51997d3cffd969105e5fdd 2f936b6ca005c6157c755121584410c03e4a3949c23bee302fbe05ee10ce118f test/extractor-tests/generated/Abi/Abi_getAbiString.ql a496762fcec5a0887b87023bbf93e9b650f02e20113e25c44d6e4281ae8f5335 14109c7ce11ba25e3cd6e7f1b3fcb4cb00622f2a4eac91bfe43145c5f366bc52 test/extractor-tests/generated/ArgList/ArgList.ql e412927756e72165d0e7c5c9bd3fca89d08197bbf760db8fb7683c64bb2229bc 043dba8506946fbb87753e22c387987d7eded6ddb963aa067f9e60ef9024d684 @@ -748,7 +751,7 @@ test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParam.ql c87b61e80dd62 test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParamList.ql 68ce501516094512dd5bfed42a785474583a91312f704087cba801b02ba7b834 eacbf89d63159e7decfd84c2a1dc5c067dfce56a8157fbb52bc133e9702d266d test/extractor-tests/generated/ClosureExpr/ClosureExpr_getRetType.ql c95bc7306b2d77aa05a6501b6321e6f1e7a48b7ad422ba082635ab20014288ae fe72d44c9819b42fff49b9092a9fb2bfafde6d3b9e4967547fb5298822f30bc3 test/extractor-tests/generated/Comment/Comment.ql 5428b8417a737f88f0d55d87de45c4693d81f03686f03da11dc5369e163d977b 8948c1860cde198d49cff7c74741f554a9e89f8af97bb94de80f3c62e1e29244 -test/extractor-tests/generated/Const/Const.ql 7f9c9ce5b04391ff8f0d419a62972292b1d9811a978cceb129ef5a0f68a02fab c6c1dfa688248310cadd2d6d71d1a70a2b48f5b29ea2078f4dd51db59a0021c0 +test/extractor-tests/generated/Const/Const.ql 8fb93d4b85ceb00c7025557722883589f51e73ae1cb13f405553ae1d4d1f766a 9e522945427ff5209656df11a97ce1fdb9d6f0b7c67b2f540c152523ba7d21f6 test/extractor-tests/generated/Const/Const_getAttr.ql bd6296dab00065db39663db8d09fe62146838875206ff9d8595d06d6439f5043 34cb55ca6d1f44e27d82a8b624f16f9408bae2485c85da94cc76327eed168577 test/extractor-tests/generated/Const/Const_getAttributeMacroExpansion.ql 82e86399d5cd72621dc8d9cd9f310d3dc7f2ecf208149dab0d202047ccbbd2f8 33df8c5b5044f49ec244e183c61c3b81fabd987f590ba6da4e18e08231343dc8 test/extractor-tests/generated/Const/Const_getBody.ql f50f79b7f42bb1043b79ec96f999fa4740c8014e6969a25812d5d023d7a5a5d8 90e5060ba9757f1021429ed4ec4913bc78747f3fc415456ef7e7fc284b8a0026 @@ -834,7 +837,7 @@ test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql 27 test/extractor-tests/generated/FormatArgsExpr/Format_getArgumentRef.ql 634efdffaae4199aa9d95652cf081a8dc26e88224e24678845f8a67dc24ce090 d0302fee5c50403214771d5c6b896ba7c6e52be10c9bea59720ef2bb954e6f40 test/extractor-tests/generated/FormatArgsExpr/Format_getPrecisionArgument.ql 0d2140f84d0220b0c72c48c6bd272f4cfe1863d1797eddd16a6e238552a61e4d f4fe9b29697041e30764fa3dea44f125546bfb648f32c3474a1e922a4255c534 test/extractor-tests/generated/FormatArgsExpr/Format_getWidthArgument.ql 01ef27dd0bfab273e1ddc57ada0e079ece8a2bfd195ce413261006964b444093 acd0161f86010759417015c5b58044467a7f760f288ec4e8525458c54ae9a715 -test/extractor-tests/generated/Function/Function.ql 66e6a81a80cdf30652f00fae1b060e93b9d7c61b08cb3d3c1cac16cad445e769 97ace9f51b9ae933c79484b06b92355164ff3582cadfc6e3bac5c00072cdeff3 +test/extractor-tests/generated/Function/Function.ql ec159b90102b39adc151fa810d1cb206394df93c69e9c749514cb2de8f66468e 86fd03741d6dbb8c416b19ef7d00fe411869439725a4f24f546f6fcb03499159 test/extractor-tests/generated/Function/Function_getAbi.ql e5c9c97de036ddd51cae5d99d41847c35c6b2eabbbd145f4467cb501edc606d8 0b81511528bd0ef9e63b19edfc3cb638d8af43eb87d018fad69d6ef8f8221454 test/extractor-tests/generated/Function/Function_getAttr.ql 44067ee11bdec8e91774ff10de0704a8c5c1b60816d587378e86bf3d82e1f660 b4bebf9441bda1f2d1e34e9261e07a7468cbabf53cf8047384f3c8b11869f04e test/extractor-tests/generated/Function/Function_getAttributeMacroExpansion.ql 17a346a9e5d28af99522520d1af3852db4cae01fb3d290a65c5f84d8d039c345 36fb06b55370828d9bc379cf5fad7f383cdb6f6db6f7377660276943ab0e1ec8 @@ -916,7 +919,7 @@ test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.ql 0267f54077640f3d test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr.ql 03144a5448de91801037f3c1e6d29a230e18f9c077c718e5c3801a31cf593977 9a035e3f119b0e0c88fc4c775a032220a01680fbea2cc7f8e98180205b9bb8da test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr_getStatement.ql 415a762768df2c850d21742daab5e53cd248dc3dc9652414b99737f1d5c5824b bdd2ba6c004ada34f26dac3bbc7abcd5fe250c77a97faa7fd71fb54a0dd4743a test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr_getTailExpr.ql 8f6604c09e85da1a19b0f87340cebeb1cdf4e94b208305c7393082d88cf0b032 5081d9db5b38454fad1daad2f8972661bd2fb4cce2c815a560a15f8a7b9cfcee -test/extractor-tests/generated/MacroCall/MacroCall.ql 992e338a9c1353030f4bb31cae6ae4a1b957052e28c8753bae5b6d33dbe03fe9 863fbfd712a4f9ed613abb64ecb814b0a72b9ab65c50aa0dc5279d319249ae6a +test/extractor-tests/generated/MacroCall/MacroCall.ql 6c30f104a452ca3b2f219b2e67bbb1b76886751e48e221caa5af90ffa9331553 db6024cb5d4a680d2bb5a9601290f838c170124ee4a407f4b54fc1aa9435819e test/extractor-tests/generated/MacroCall/MacroCall_getAttr.ql c22a2a29d705e85b03a6586d1eda1a2f4f99f95f7dfeb4e6908ec3188b5ad0ad 9b8d9dcc2116a123c15c520a880efab73ade20e08197c64bc3ed0c50902c4672 test/extractor-tests/generated/MacroCall/MacroCall_getAttributeMacroExpansion.ql 60cf2c12ec7fc3b25ed2a75bb7f3da5689469a65a418ba68db0ab26d0c227967 7f71c88c67834f82ef4bda93a678a084d41e9acb86808c3257b37dfc6c2908d2 test/extractor-tests/generated/MacroCall/MacroCall_getCrateOrigin.ql 3030e87de6f773d510882ee4469146f6008898e23a4a4ccabcbaa7da1a4e765e a10fe67315eda1c59d726d538ead34f35ccffc3e121eeda74c286d49a4ce4f54 @@ -1180,7 +1183,7 @@ test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedCrateOri test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedPath.ql 150898b6e55cc74b9ddb947f136b5a7f538ee5598928c5724d80e3ddf93ae499 66e0bd7b32df8f5bbe229cc02be6a07cb9ec0fe8b444dad3f5b32282a90551ee test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr.ql 2f99917a95a85a932f423cba5a619a51cada8e704b93c54b0a8cb5d7a1129fa1 759bd02347c898139ac7dabe207988eea125be24d3e4c2282b791ec810c16ea7 test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr_getField.ql 615acfcbc475b5c2ffa8e46d023fc2e19d29ee879b4949644a7f0b25c33125e6 81b037af5dcb8a0489a7a81a0ad668ca781b71d4406c123c4f1c4f558722f13e -test/extractor-tests/generated/TypeAlias/TypeAlias.ql 5cbf0b82a25a492c153b4663e5a2c0bea4b15ff53fa22ba1217edaf3bb48c6af d28e6a9eafff3fb84a6f38e3c79ad0d54cb08c7609cd43c968efd3fbc4154957 +test/extractor-tests/generated/TypeAlias/TypeAlias.ql c106db713031eb0a72c065b70103ab1d6661bc51a4133166032fbbe8956ef487 2f8487a19bb8ee5ad797aa3c669773c82f16d26048c421dad979979fd4767d84 test/extractor-tests/generated/TypeAlias/TypeAlias_getAttr.ql ecf4b45ef4876e46252785d2e42b11207e65757cdb26e60decafd765e7b03b49 21bb4d635d3d38abd731b9ad1a2b871f8e0788f48a03e9572823abeea0ea9382 test/extractor-tests/generated/TypeAlias/TypeAlias_getAttributeMacroExpansion.ql fa2f0867039866e6405a735f9251de182429d3f1fdf00a749c7cfc3e3d62a7bb 56083d34fffd07a43b5736479b4d3b191d138415759639e9dd60789fefe5cb6f test/extractor-tests/generated/TypeAlias/TypeAlias_getCrateOrigin.ql cd66db5b43bcb46a6cf6db8c262fd524017ef67cdb67c010af61fab303e3bc65 2aebae618448530ec537709c5381359ea98399db83eeae3be88825ebefa1829d diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index 65c3aae0e9e1..263e8c4cecff 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -49,6 +49,7 @@ /lib/codeql/rust/elements/DynTraitTypeRepr.qll linguist-generated /lib/codeql/rust/elements/Element.qll linguist-generated /lib/codeql/rust/elements/Enum.qll linguist-generated +/lib/codeql/rust/elements/ExpandableItem.qll linguist-generated /lib/codeql/rust/elements/Expr.qll linguist-generated /lib/codeql/rust/elements/ExprStmt.qll linguist-generated /lib/codeql/rust/elements/ExternBlock.qll linguist-generated @@ -260,6 +261,7 @@ /lib/codeql/rust/elements/internal/DynTraitTypeReprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/DynTraitTypeReprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/EnumConstructor.qll linguist-generated +/lib/codeql/rust/elements/internal/ExpandableItemImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ExprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ExprStmtConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ExprStmtImpl.qll linguist-generated @@ -508,6 +510,7 @@ /lib/codeql/rust/elements/internal/generated/DynTraitTypeRepr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/Element.qll linguist-generated /lib/codeql/rust/elements/internal/generated/Enum.qll linguist-generated +/lib/codeql/rust/elements/internal/generated/ExpandableItem.qll linguist-generated /lib/codeql/rust/elements/internal/generated/Expr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/ExprStmt.qll linguist-generated /lib/codeql/rust/elements/internal/generated/ExternBlock.qll linguist-generated diff --git a/rust/ql/integration-tests/macro-expansion/attributes/src/lib.rs b/rust/ql/integration-tests/macro-expansion/attributes/src/lib.rs index 682083aa10ae..ac700ff27170 100644 --- a/rust/ql/integration-tests/macro-expansion/attributes/src/lib.rs +++ b/rust/ql/integration-tests/macro-expansion/attributes/src/lib.rs @@ -14,3 +14,24 @@ fn bar() {} #[repeat(0)] fn baz() {} + +struct S; + +impl S { + #[repeat(2)] + pub fn bzz() {} +} + +fn use_all() { + foo_0(); + foo_1(); + foo_2(); + bar_0_0(); + bar_0_1(); + bar_0_2(); + bar_1_0(); + bar_1_1(); + bar_1_2(); + S::bzz_0(); + S::bzz_1(); +} diff --git a/rust/ql/integration-tests/macro-expansion/calls/Cargo.toml b/rust/ql/integration-tests/macro-expansion/calls/Cargo.toml index d38cf944489e..2ba55bad2028 100644 --- a/rust/ql/integration-tests/macro-expansion/calls/Cargo.toml +++ b/rust/ql/integration-tests/macro-expansion/calls/Cargo.toml @@ -4,3 +4,5 @@ version = "0.1.0" edition = "2024" [dependencies] +proc_macros = { path = "../proc_macros" } +log = "0.4.27" diff --git a/rust/ql/integration-tests/macro-expansion/calls/src/lib.rs b/rust/ql/integration-tests/macro-expansion/calls/src/lib.rs index df3fccb7c40a..a705ae9d4790 100644 --- a/rust/ql/integration-tests/macro-expansion/calls/src/lib.rs +++ b/rust/ql/integration-tests/macro-expansion/calls/src/lib.rs @@ -28,3 +28,26 @@ include!("included.rs"); #[doc = include_str!("some.txt")] // this doesn't expand since 0.0.274 fn documented() {} + +macro_rules! my_int { + () => { i32 }; +} + +fn answer() -> my_int!() { // this didn't expand in 0.0.274..0.0.287 + let a: my_int!() = 42; // this is fine + a as my_int!() // this is fine too +} + + +type MyInt = my_int!(); // this didn't expand in 0.0.274..0.0.287 + +struct MyStruct { + field: my_int!(), // this didn't expand in 0.0.274..0.0.287 +} + +impl S { + #[proc_macros::repeat(1)] + fn f(self) { + log::info!("hello!"); + } +} diff --git a/rust/ql/integration-tests/macro-expansion/test.expected b/rust/ql/integration-tests/macro-expansion/test.expected index 24d95c99b351..1454964816d2 100644 --- a/rust/ql/integration-tests/macro-expansion/test.expected +++ b/rust/ql/integration-tests/macro-expansion/test.expected @@ -16,6 +16,9 @@ attribute_macros | attributes/src/lib.rs:12:1:13:10 | fn bar_1 | 0 | attributes/src/lib.rs:13:1:13:10 | fn bar_1_0 | | attributes/src/lib.rs:12:1:13:10 | fn bar_1 | 1 | attributes/src/lib.rs:13:1:13:10 | fn bar_1_1 | | attributes/src/lib.rs:12:1:13:10 | fn bar_1 | 2 | attributes/src/lib.rs:13:1:13:10 | fn bar_1_2 | +| attributes/src/lib.rs:21:5:22:19 | fn bzz | 0 | attributes/src/lib.rs:22:5:22:18 | fn bzz_0 | +| attributes/src/lib.rs:21:5:22:19 | fn bzz | 1 | attributes/src/lib.rs:22:5:22:18 | fn bzz_1 | +| calls/src/lib.rs:49:5:52:5 | fn f | 0 | calls/src/lib.rs:50:5:51:29 | fn f_0 | macro_calls | attributes/src/lib.rs:5:9:5:34 | concat!... | attributes/src/lib.rs:5:17:5:34 | "Hello world!" | | attributes/src/lib.rs:5:9:5:34 | concat!... | attributes/src/lib.rs:5:17:5:34 | "Hello world!" | @@ -30,5 +33,18 @@ macro_calls | calls/src/lib.rs:27:1:27:24 | concat!... | calls/src/lib.rs:27:1:27:24 | "Hello world!" | | calls/src/lib.rs:27:1:27:24 | include!... | calls/src/lib.rs:27:1:27:24 | MacroItems | | calls/src/lib.rs:29:9:29:32 | include_str!... | calls/src/lib.rs:29:22:29:31 | "" | +| calls/src/lib.rs:36:16:36:24 | my_int!... | calls/src/lib.rs:36:16:36:24 | i32 | +| calls/src/lib.rs:37:12:37:20 | my_int!... | calls/src/lib.rs:37:12:37:20 | i32 | +| calls/src/lib.rs:38:10:38:18 | my_int!... | calls/src/lib.rs:38:10:38:18 | i32 | +| calls/src/lib.rs:42:14:42:22 | my_int!... | calls/src/lib.rs:42:14:42:22 | i32 | +| calls/src/lib.rs:45:12:45:20 | my_int!... | calls/src/lib.rs:45:12:45:20 | i32 | +| calls/src/lib.rs:49:5:49:29 | ...::__log_logger!... | calls/src/lib.rs:49:5:49:29 | { ... } | +| calls/src/lib.rs:49:5:49:29 | ...::module_path!... | calls/src/lib.rs:49:5:49:29 | "module::path" | +| calls/src/lib.rs:49:5:49:29 | ...::module_path!... | calls/src/lib.rs:49:5:49:29 | "module::path" | +| calls/src/lib.rs:51:9:51:27 | ...::info!... | calls/src/lib.rs:51:20:51:27 | MacroBlockExpr | +| calls/src/lib.rs:51:20:51:27 | ...::__log!... | calls/src/lib.rs:51:20:51:27 | MacroBlockExpr | +| calls/src/lib.rs:51:20:51:27 | ...::format_args!... | calls/src/lib.rs:51:20:51:27 | FormatArgsExpr | +| calls/src/lib.rs:51:20:51:27 | ...::log!... | calls/src/lib.rs:51:20:51:27 | MacroBlockExpr | unexpanded_macro_calls | attributes/src/lib.rs:5:9:5:35 | concat!... | +| calls/src/lib.rs:51:9:51:28 | ...::info!... | diff --git a/rust/ql/lib/codeql/rust/elements.qll b/rust/ql/lib/codeql/rust/elements.qll index 4456cb4b44ae..9f13008fba91 100644 --- a/rust/ql/lib/codeql/rust/elements.qll +++ b/rust/ql/lib/codeql/rust/elements.qll @@ -52,6 +52,7 @@ import codeql.rust.elements.Crate import codeql.rust.elements.DynTraitTypeRepr import codeql.rust.elements.Element import codeql.rust.elements.Enum +import codeql.rust.elements.ExpandableItem import codeql.rust.elements.Expr import codeql.rust.elements.ExprStmt import codeql.rust.elements.ExternBlock diff --git a/rust/ql/lib/codeql/rust/elements/AssocItem.qll b/rust/ql/lib/codeql/rust/elements/AssocItem.qll index 80c1ecafd7e7..397f9010f7b7 100644 --- a/rust/ql/lib/codeql/rust/elements/AssocItem.qll +++ b/rust/ql/lib/codeql/rust/elements/AssocItem.qll @@ -4,7 +4,7 @@ */ private import internal.AssocItemImpl -import codeql.rust.elements.AstNode +import codeql.rust.elements.ExpandableItem /** * An associated item in a `Trait` or `Impl`. diff --git a/rust/ql/lib/codeql/rust/elements/ExpandableItem.qll b/rust/ql/lib/codeql/rust/elements/ExpandableItem.qll new file mode 100644 index 000000000000..75fd78f9ebec --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/ExpandableItem.qll @@ -0,0 +1,13 @@ +// generated by codegen, do not edit +/** + * This module provides the public class `ExpandableItem`. + */ + +private import internal.ExpandableItemImpl +import codeql.rust.elements.AstNode +import codeql.rust.elements.MacroItems + +/** + * Something that can be expanded by an attribute macro + */ +final class ExpandableItem = Impl::ExpandableItem; diff --git a/rust/ql/lib/codeql/rust/elements/Item.qll b/rust/ql/lib/codeql/rust/elements/Item.qll index c299b3d0b65a..27439b0005e6 100644 --- a/rust/ql/lib/codeql/rust/elements/Item.qll +++ b/rust/ql/lib/codeql/rust/elements/Item.qll @@ -5,7 +5,7 @@ private import internal.ItemImpl import codeql.rust.elements.Addressable -import codeql.rust.elements.MacroItems +import codeql.rust.elements.ExpandableItem import codeql.rust.elements.Stmt /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/ExpandableItemImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ExpandableItemImpl.qll new file mode 100644 index 000000000000..aba6b93f6bea --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/ExpandableItemImpl.qll @@ -0,0 +1,19 @@ +// generated by codegen, remove this comment if you wish to edit this file +/** + * This module provides a hand-modifiable wrapper around the generated class `ExpandableItem`. + * + * INTERNAL: Do not use. + */ + +private import codeql.rust.elements.internal.generated.ExpandableItem + +/** + * INTERNAL: This module contains the customizable definition of `ExpandableItem` and should not + * be referenced directly. + */ +module Impl { + /** + * Something that can be expanded by an attribute macro + */ + class ExpandableItem extends Generated::ExpandableItem { } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AssocItem.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AssocItem.qll index d63e9824efd5..9bcf9263add8 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AssocItem.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AssocItem.qll @@ -6,7 +6,7 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw -import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl +import codeql.rust.elements.internal.ExpandableItemImpl::Impl as ExpandableItemImpl /** * INTERNAL: This module contains the fully generated definition of `AssocItem` and should not @@ -24,5 +24,5 @@ module Generated { * INTERNAL: Do not reference the `Generated::AssocItem` class directly. * Use the subclass `AssocItem`, where the following predicates are available. */ - class AssocItem extends Synth::TAssocItem, AstNodeImpl::AstNode { } + class AssocItem extends Synth::TAssocItem, ExpandableItemImpl::ExpandableItem { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ExpandableItem.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ExpandableItem.qll new file mode 100644 index 000000000000..1b536741caee --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ExpandableItem.qll @@ -0,0 +1,38 @@ +// generated by codegen, do not edit +/** + * This module provides the generated definition of `ExpandableItem`. + * INTERNAL: Do not import directly. + */ + +private import codeql.rust.elements.internal.generated.Synth +private import codeql.rust.elements.internal.generated.Raw +import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl +import codeql.rust.elements.MacroItems + +/** + * INTERNAL: This module contains the fully generated definition of `ExpandableItem` and should not + * be referenced directly. + */ +module Generated { + /** + * Something that can be expanded by an attribute macro + * INTERNAL: Do not reference the `Generated::ExpandableItem` class directly. + * Use the subclass `ExpandableItem`, where the following predicates are available. + */ + class ExpandableItem extends Synth::TExpandableItem, AstNodeImpl::AstNode { + /** + * Gets the attribute macro expansion of this expandable item, if it exists. + */ + MacroItems getAttributeMacroExpansion() { + result = + Synth::convertMacroItemsFromRaw(Synth::convertExpandableItemToRaw(this) + .(Raw::ExpandableItem) + .getAttributeMacroExpansion()) + } + + /** + * Holds if `getAttributeMacroExpansion()` exists. + */ + final predicate hasAttributeMacroExpansion() { exists(this.getAttributeMacroExpansion()) } + } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Item.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Item.qll index bf360984e082..959c80cc1e5f 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Item.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Item.qll @@ -7,7 +7,7 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.internal.AddressableImpl::Impl as AddressableImpl -import codeql.rust.elements.MacroItems +import codeql.rust.elements.internal.ExpandableItemImpl::Impl as ExpandableItemImpl import codeql.rust.elements.internal.StmtImpl::Impl as StmtImpl /** @@ -27,20 +27,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::Item` class directly. * Use the subclass `Item`, where the following predicates are available. */ - class Item extends Synth::TItem, StmtImpl::Stmt, AddressableImpl::Addressable { - /** - * Gets the attribute macro expansion of this item, if it exists. - */ - MacroItems getAttributeMacroExpansion() { - result = - Synth::convertMacroItemsFromRaw(Synth::convertItemToRaw(this) - .(Raw::Item) - .getAttributeMacroExpansion()) - } - - /** - * Holds if `getAttributeMacroExpansion()` exists. - */ - final predicate hasAttributeMacroExpansion() { exists(this.getAttributeMacroExpansion()) } - } + class Item extends Synth::TItem, StmtImpl::Stmt, AddressableImpl::Addressable, + ExpandableItemImpl::ExpandableItem + { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll index 5c8e5f868204..0db7bfd4e1b6 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -305,19 +305,6 @@ private module Impl { ) } - private Element getImmediateChildOfAssocItem(AssocItem e, int index, string partialPredicateCall) { - exists(int b, int bAstNode, int n | - b = 0 and - bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and - n = bAstNode and - ( - none() - or - result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) - ) - ) - } - private Element getImmediateChildOfAssocItemList( AssocItemList e, int index, string partialPredicateCall ) { @@ -397,6 +384,26 @@ private module Impl { ) } + private Element getImmediateChildOfExpandableItem( + ExpandableItem e, int index, string partialPredicateCall + ) { + exists(int b, int bAstNode, int n, int nAttributeMacroExpansion | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + nAttributeMacroExpansion = n + 1 and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or + index = n and + result = e.getAttributeMacroExpansion() and + partialPredicateCall = "AttributeMacroExpansion()" + ) + ) + } + private Element getImmediateChildOfExpr(Expr e, int index, string partialPredicateCall) { exists(int b, int bAstNode, int n | b = 0 and @@ -1617,6 +1624,20 @@ private module Impl { ) } + private Element getImmediateChildOfAssocItem(AssocItem e, int index, string partialPredicateCall) { + exists(int b, int bExpandableItem, int n | + b = 0 and + bExpandableItem = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpandableItem(e, i, _)) | i) and + n = bExpandableItem and + ( + none() + or + result = getImmediateChildOfExpandableItem(e, index - b, partialPredicateCall) + ) + ) + } + private Element getImmediateChildOfAssocTypeArg( AssocTypeArg e, int index, string partialPredicateCall ) { @@ -2184,13 +2205,15 @@ private module Impl { } private Element getImmediateChildOfItem(Item e, int index, string partialPredicateCall) { - exists(int b, int bStmt, int bAddressable, int n, int nAttributeMacroExpansion | + exists(int b, int bStmt, int bAddressable, int bExpandableItem, int n | b = 0 and bStmt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfStmt(e, i, _)) | i) and bAddressable = bStmt + 1 + max(int i | i = -1 or exists(getImmediateChildOfAddressable(e, i, _)) | i) and - n = bAddressable and - nAttributeMacroExpansion = n + 1 and + bExpandableItem = + bAddressable + 1 + + max(int i | i = -1 or exists(getImmediateChildOfExpandableItem(e, i, _)) | i) and + n = bExpandableItem and ( none() or @@ -2198,9 +2221,7 @@ private module Impl { or result = getImmediateChildOfAddressable(e, index - bStmt, partialPredicateCall) or - index = n and - result = e.getAttributeMacroExpansion() and - partialPredicateCall = "AttributeMacroExpansion()" + result = getImmediateChildOfExpandableItem(e, index - bAddressable, partialPredicateCall) ) ) } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index 503691bb83be..dae2704ddd17 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -265,18 +265,6 @@ module Raw { NameRef getIdentifier() { asm_reg_spec_identifiers(this, result) } } - /** - * INTERNAL: Do not use. - * An associated item in a `Trait` or `Impl`. - * - * For example: - * ```rust - * trait T {fn foo(&self);} - * // ^^^^^^^^^^^^^ - * ``` - */ - class AssocItem extends @assoc_item, AstNode { } - /** * INTERNAL: Do not use. * A list of `AssocItem` elements, as appearing in a `Trait` or `Impl`. @@ -355,6 +343,19 @@ module Raw { GenericParamList getGenericParamList() { closure_binder_generic_param_lists(this, result) } } + /** + * INTERNAL: Do not use. + * Something that can be expanded by an attribute macro + */ + class ExpandableItem extends @expandable_item, AstNode { + /** + * Gets the attribute macro expansion of this expandable item, if it exists. + */ + MacroItems getAttributeMacroExpansion() { + expandable_item_attribute_macro_expansions(this, result) + } + } + /** * INTERNAL: Do not use. * The base class for expressions. @@ -1699,6 +1700,18 @@ module Raw { Path getPath() { asm_sym_paths(this, result) } } + /** + * INTERNAL: Do not use. + * An associated item in a `Trait` or `Impl`. + * + * For example: + * ```rust + * trait T {fn foo(&self);} + * // ^^^^^^^^^^^^^ + * ``` + */ + class AssocItem extends @assoc_item, ExpandableItem { } + /** * INTERNAL: Do not use. * An associated type argument in a path. @@ -2465,12 +2478,7 @@ module Raw { * enum E {} * ``` */ - class Item extends @item, Stmt, Addressable { - /** - * Gets the attribute macro expansion of this item, if it exists. - */ - MacroItems getAttributeMacroExpansion() { item_attribute_macro_expansions(this, result) } - } + class Item extends @item, Stmt, Addressable, ExpandableItem { } /** * INTERNAL: Do not use. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll index 04588e2861e7..ae13373c658e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll @@ -713,17 +713,17 @@ module Synth { */ class TAstNode = TAbi or TAddressable or TArgList or TAsmDirSpec or TAsmOperand or TAsmOperandExpr or - TAsmOption or TAsmPiece or TAsmRegSpec or TAssocItem or TAssocItemList or TAttr or - TCallable or TClosureBinder or TExpr or TExternItem or TExternItemList or TFieldList or - TFormatArgsArg or TGenericArg or TGenericArgList or TGenericParam or TGenericParamList or - TItemList or TLabel or TLetElse or TMacroItems or TMatchArm or TMatchArmList or - TMatchGuard or TMeta or TName or TParamBase or TParamList or TParenthesizedArgList or - TPat or TPath or TPathSegment or TRename or TResolvable or TRetTypeRepr or - TReturnTypeSyntax or TSourceFile or TStmt or TStmtList or TStructExprField or - TStructExprFieldList or TStructField or TStructPatField or TStructPatFieldList or TToken or - TTokenTree or TTupleField or TTypeBound or TTypeBoundList or TTypeRepr or - TUseBoundGenericArg or TUseBoundGenericArgs or TUseTree or TUseTreeList or TVariantDef or - TVariantList or TVisibility or TWhereClause or TWherePred; + TAsmOption or TAsmPiece or TAsmRegSpec or TAssocItemList or TAttr or TCallable or + TClosureBinder or TExpandableItem or TExpr or TExternItem or TExternItemList or + TFieldList or TFormatArgsArg or TGenericArg or TGenericArgList or TGenericParam or + TGenericParamList or TItemList or TLabel or TLetElse or TMacroItems or TMatchArm or + TMatchArmList or TMatchGuard or TMeta or TName or TParamBase or TParamList or + TParenthesizedArgList or TPat or TPath or TPathSegment or TRename or TResolvable or + TRetTypeRepr or TReturnTypeSyntax or TSourceFile or TStmt or TStmtList or + TStructExprField or TStructExprFieldList or TStructField or TStructPatField or + TStructPatFieldList or TToken or TTokenTree or TTupleField or TTypeBound or + TTypeBoundList or TTypeRepr or TUseBoundGenericArg or TUseBoundGenericArgs or TUseTree or + TUseTreeList or TVariantDef or TVariantList or TVisibility or TWhereClause or TWherePred; /** * INTERNAL: Do not use. @@ -735,6 +735,11 @@ module Synth { */ class TCallable = TClosureExpr or TFunction; + /** + * INTERNAL: Do not use. + */ + class TExpandableItem = TAssocItem or TItem; + /** * INTERNAL: Do not use. */ @@ -1937,8 +1942,6 @@ module Synth { or result = convertAsmRegSpecFromRaw(e) or - result = convertAssocItemFromRaw(e) - or result = convertAssocItemListFromRaw(e) or result = convertAttrFromRaw(e) @@ -1947,6 +1950,8 @@ module Synth { or result = convertClosureBinderFromRaw(e) or + result = convertExpandableItemFromRaw(e) + or result = convertExprFromRaw(e) or result = convertExternItemFromRaw(e) @@ -2084,6 +2089,16 @@ module Synth { result = convertUnextractedFromRaw(e) } + /** + * INTERNAL: Do not use. + * Converts a raw DB element to a synthesized `TExpandableItem`, if possible. + */ + TExpandableItem convertExpandableItemFromRaw(Raw::Element e) { + result = convertAssocItemFromRaw(e) + or + result = convertItemFromRaw(e) + } + /** * INTERNAL: Do not use. * Converts a raw DB element to a synthesized `TExpr`, if possible. @@ -3537,8 +3552,6 @@ module Synth { or result = convertAsmRegSpecToRaw(e) or - result = convertAssocItemToRaw(e) - or result = convertAssocItemListToRaw(e) or result = convertAttrToRaw(e) @@ -3547,6 +3560,8 @@ module Synth { or result = convertClosureBinderToRaw(e) or + result = convertExpandableItemToRaw(e) + or result = convertExprToRaw(e) or result = convertExternItemToRaw(e) @@ -3684,6 +3699,16 @@ module Synth { result = convertUnextractedToRaw(e) } + /** + * INTERNAL: Do not use. + * Converts a synthesized `TExpandableItem` to a raw DB element, if possible. + */ + Raw::Element convertExpandableItemToRaw(TExpandableItem e) { + result = convertAssocItemToRaw(e) + or + result = convertItemToRaw(e) + } + /** * INTERNAL: Do not use. * Converts a synthesized `TExpr` to a raw DB element, if possible. diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index aa9a0bda17c7..ecb8241bf0be 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -164,11 +164,11 @@ named_crates( | @asm_option | @asm_piece | @asm_reg_spec -| @assoc_item | @assoc_item_list | @attr | @callable | @closure_binder +| @expandable_item | @expr | @extern_item | @extern_item_list @@ -350,13 +350,6 @@ asm_reg_spec_identifiers( int identifier: @name_ref ref ); -@assoc_item = - @const -| @function -| @macro_call -| @type_alias -; - assoc_item_lists( unique int id: @assoc_item_list ); @@ -413,6 +406,17 @@ closure_binder_generic_param_lists( int generic_param_list: @generic_param_list ref ); +@expandable_item = + @assoc_item +| @item +; + +#keyset[id] +expandable_item_attribute_macro_expansions( + int id: @expandable_item ref, + int attribute_macro_expansion: @macro_items ref +); + @expr = @array_expr_internal | @asm_expr @@ -1379,6 +1383,13 @@ asm_sym_paths( int path: @path ref ); +@assoc_item = + @const +| @function +| @macro_call +| @type_alias +; + assoc_type_args( unique int id: @assoc_type_arg ); @@ -1936,12 +1947,6 @@ infer_type_reprs( | @use ; -#keyset[id] -item_attribute_macro_expansions( - int id: @item ref, - int attribute_macro_expansion: @macro_items ref -); - @labelable_expr = @block_expr | @looping_expr diff --git a/rust/ql/lib/upgrades/aa9a0bda17c76b804ad9e108d43da15f6beaf2a7/old.dbscheme b/rust/ql/lib/upgrades/aa9a0bda17c76b804ad9e108d43da15f6beaf2a7/old.dbscheme new file mode 100644 index 000000000000..aa9a0bda17c7 --- /dev/null +++ b/rust/ql/lib/upgrades/aa9a0bda17c76b804ad9e108d43da15f6beaf2a7/old.dbscheme @@ -0,0 +1,3616 @@ +// 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_def +| @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_def = + @struct +| @union +| @variant +; + +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 = + @const +| @enum +| @extern_block +| @extern_crate +| @function +| @impl +| @macro_call +| @macro_def +| @macro_rules +| @module +| @static +| @struct +| @trait +| @trait_alias +| @type_alias +| @union +| @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 +); + +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_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_has_implementation( + int id: @const 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 +); + +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 +); + +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 +); + +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 +); + +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 +); + +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 +); + +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 +); + +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/aa9a0bda17c76b804ad9e108d43da15f6beaf2a7/rust.dbscheme b/rust/ql/lib/upgrades/aa9a0bda17c76b804ad9e108d43da15f6beaf2a7/rust.dbscheme new file mode 100644 index 000000000000..ecb8241bf0be --- /dev/null +++ b/rust/ql/lib/upgrades/aa9a0bda17c76b804ad9e108d43da15f6beaf2a7/rust.dbscheme @@ -0,0 +1,3621 @@ +// 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_list +| @attr +| @callable +| @closure_binder +| @expandable_item +| @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_def +| @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_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 +); + +@expandable_item = + @assoc_item +| @item +; + +#keyset[id] +expandable_item_attribute_macro_expansions( + int id: @expandable_item ref, + int attribute_macro_expansion: @macro_items 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_def = + @struct +| @union +| @variant +; + +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_item = + @const +| @function +| @macro_call +| @type_alias +; + +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 = + @const +| @enum +| @extern_block +| @extern_crate +| @function +| @impl +| @macro_call +| @macro_def +| @macro_rules +| @module +| @static +| @struct +| @trait +| @trait_alias +| @type_alias +| @union +| @use +; + +@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 +); + +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_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_has_implementation( + int id: @const 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 +); + +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 +); + +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 +); + +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 +); + +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 +); + +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 +); + +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 +); + +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/aa9a0bda17c76b804ad9e108d43da15f6beaf2a7/upgrade.properties b/rust/ql/lib/upgrades/aa9a0bda17c76b804ad9e108d43da15f6beaf2a7/upgrade.properties new file mode 100644 index 000000000000..44fa5d906d75 --- /dev/null +++ b/rust/ql/lib/upgrades/aa9a0bda17c76b804ad9e108d43da15f6beaf2a7/upgrade.properties @@ -0,0 +1,5 @@ +description: Generalize `item_attribute_macro_expansions` to `expandable_item_attribute_macro_expansions` +compatibility: partial + +expandable_item_attribute_macro_expansions.rel: reorder item_attribute_macro_expansions.rel (@item id, @macro_items attribute_macro_expansion) id attribute_macro_expansion +item_attribute_macro_expansions.rel: delete diff --git a/rust/ql/test/extractor-tests/generated/Const/Const.ql b/rust/ql/test/extractor-tests/generated/Const/Const.ql index 0bd52702c245..f59d5611d84a 100644 --- a/rust/ql/test/extractor-tests/generated/Const/Const.ql +++ b/rust/ql/test/extractor-tests/generated/Const/Const.ql @@ -3,24 +3,23 @@ import codeql.rust.elements import TestUtils from - Const x, string hasExtendedCanonicalPath, string hasCrateOrigin, - string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasBody, string isConst, - string isDefault, string hasName, string hasTypeRepr, string hasVisibility, - string hasImplementation + Const x, string hasAttributeMacroExpansion, string hasExtendedCanonicalPath, + string hasCrateOrigin, int getNumberOfAttrs, string hasBody, string isConst, string isDefault, + string hasName, string hasTypeRepr, string hasVisibility, string hasImplementation where toBeTested(x) and not x.isUnknown() and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and ( if x.hasExtendedCanonicalPath() then hasExtendedCanonicalPath = "yes" else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and - ( - if x.hasAttributeMacroExpansion() - then hasAttributeMacroExpansion = "yes" - else hasAttributeMacroExpansion = "no" - ) and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasBody() then hasBody = "yes" else hasBody = "no") and (if x.isConst() then isConst = "yes" else isConst = "no") and @@ -29,8 +28,8 @@ where (if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no") and (if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no") and if x.hasImplementation() then hasImplementation = "yes" else hasImplementation = "no" -select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, - "hasBody:", hasBody, "isConst:", isConst, "isDefault:", isDefault, "hasName:", hasName, - "hasTypeRepr:", hasTypeRepr, "hasVisibility:", hasVisibility, "hasImplementation:", +select x, "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "hasExtendedCanonicalPath:", + hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, "getNumberOfAttrs:", + getNumberOfAttrs, "hasBody:", hasBody, "isConst:", isConst, "isDefault:", isDefault, "hasName:", + hasName, "hasTypeRepr:", hasTypeRepr, "hasVisibility:", hasVisibility, "hasImplementation:", hasImplementation diff --git a/rust/ql/test/extractor-tests/generated/Function/Function.ql b/rust/ql/test/extractor-tests/generated/Function/Function.ql index 5e50f7a4ac0b..96f7b75b251a 100644 --- a/rust/ql/test/extractor-tests/generated/Function/Function.ql +++ b/rust/ql/test/extractor-tests/generated/Function/Function.ql @@ -3,14 +3,19 @@ import codeql.rust.elements import TestUtils from - Function x, string hasParamList, int getNumberOfAttrs, int getNumberOfParams, - string hasExtendedCanonicalPath, string hasCrateOrigin, string hasAttributeMacroExpansion, - string hasAbi, string hasBody, string hasGenericParamList, string isAsync, string isConst, - string isDefault, string isGen, string isUnsafe, string hasName, string hasRetType, - string hasVisibility, string hasWhereClause, string hasImplementation + Function x, string hasAttributeMacroExpansion, string hasParamList, int getNumberOfAttrs, + int getNumberOfParams, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasAbi, + string hasBody, string hasGenericParamList, string isAsync, string isConst, string isDefault, + string isGen, string isUnsafe, string hasName, string hasRetType, string hasVisibility, + string hasWhereClause, string hasImplementation where toBeTested(x) and not x.isUnknown() and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and (if x.hasParamList() then hasParamList = "yes" else hasParamList = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and getNumberOfParams = x.getNumberOfParams() and @@ -20,11 +25,6 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and - ( - if x.hasAttributeMacroExpansion() - then hasAttributeMacroExpansion = "yes" - else hasAttributeMacroExpansion = "no" - ) and (if x.hasAbi() then hasAbi = "yes" else hasAbi = "no") and (if x.hasBody() then hasBody = "yes" else hasBody = "no") and (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no") and @@ -38,9 +38,9 @@ where (if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no") and (if x.hasWhereClause() then hasWhereClause = "yes" else hasWhereClause = "no") and if x.hasImplementation() then hasImplementation = "yes" else hasImplementation = "no" -select x, "hasParamList:", hasParamList, "getNumberOfAttrs:", getNumberOfAttrs, - "getNumberOfParams:", getNumberOfParams, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, - "hasCrateOrigin:", hasCrateOrigin, "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, +select x, "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "hasParamList:", hasParamList, + "getNumberOfAttrs:", getNumberOfAttrs, "getNumberOfParams:", getNumberOfParams, + "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, "hasAbi:", hasAbi, "hasBody:", hasBody, "hasGenericParamList:", hasGenericParamList, "isAsync:", isAsync, "isConst:", isConst, "isDefault:", isDefault, "isGen:", isGen, "isUnsafe:", isUnsafe, "hasName:", hasName, "hasRetType:", hasRetType, "hasVisibility:", hasVisibility, diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql index b9461abfcf18..0d2fd37a7079 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql @@ -3,28 +3,28 @@ import codeql.rust.elements import TestUtils from - MacroCall x, string hasExtendedCanonicalPath, string hasCrateOrigin, - string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasPath, string hasTokenTree, + MacroCall x, string hasAttributeMacroExpansion, string hasExtendedCanonicalPath, + string hasCrateOrigin, int getNumberOfAttrs, string hasPath, string hasTokenTree, string hasMacroCallExpansion where toBeTested(x) and not x.isUnknown() and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and ( if x.hasExtendedCanonicalPath() then hasExtendedCanonicalPath = "yes" else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and - ( - if x.hasAttributeMacroExpansion() - then hasAttributeMacroExpansion = "yes" - else hasAttributeMacroExpansion = "no" - ) and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasPath() then hasPath = "yes" else hasPath = "no") and (if x.hasTokenTree() then hasTokenTree = "yes" else hasTokenTree = "no") and if x.hasMacroCallExpansion() then hasMacroCallExpansion = "yes" else hasMacroCallExpansion = "no" -select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, - "hasPath:", hasPath, "hasTokenTree:", hasTokenTree, "hasMacroCallExpansion:", +select x, "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "hasExtendedCanonicalPath:", + hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, "getNumberOfAttrs:", + getNumberOfAttrs, "hasPath:", hasPath, "hasTokenTree:", hasTokenTree, "hasMacroCallExpansion:", hasMacroCallExpansion diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql index dd8183b6d410..924ee893e426 100644 --- a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql @@ -3,24 +3,24 @@ import codeql.rust.elements import TestUtils from - TypeAlias x, string hasExtendedCanonicalPath, string hasCrateOrigin, - string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasGenericParamList, - string isDefault, string hasName, string hasTypeRepr, string hasTypeBoundList, - string hasVisibility, string hasWhereClause + TypeAlias x, string hasAttributeMacroExpansion, string hasExtendedCanonicalPath, + string hasCrateOrigin, int getNumberOfAttrs, string hasGenericParamList, string isDefault, + string hasName, string hasTypeRepr, string hasTypeBoundList, string hasVisibility, + string hasWhereClause where toBeTested(x) and not x.isUnknown() and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and ( if x.hasExtendedCanonicalPath() then hasExtendedCanonicalPath = "yes" else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and - ( - if x.hasAttributeMacroExpansion() - then hasAttributeMacroExpansion = "yes" - else hasAttributeMacroExpansion = "no" - ) and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no") and (if x.isDefault() then isDefault = "yes" else isDefault = "no") and @@ -29,8 +29,8 @@ where (if x.hasTypeBoundList() then hasTypeBoundList = "yes" else hasTypeBoundList = "no") and (if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no") and if x.hasWhereClause() then hasWhereClause = "yes" else hasWhereClause = "no" -select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, - "hasGenericParamList:", hasGenericParamList, "isDefault:", isDefault, "hasName:", hasName, - "hasTypeRepr:", hasTypeRepr, "hasTypeBoundList:", hasTypeBoundList, "hasVisibility:", - hasVisibility, "hasWhereClause:", hasWhereClause +select x, "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "hasExtendedCanonicalPath:", + hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, "getNumberOfAttrs:", + getNumberOfAttrs, "hasGenericParamList:", hasGenericParamList, "isDefault:", isDefault, + "hasName:", hasName, "hasTypeRepr:", hasTypeRepr, "hasTypeBoundList:", hasTypeBoundList, + "hasVisibility:", hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index aebf9a7a410d..ab84e16229d2 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -906,7 +906,7 @@ class _: """ -@annotate(AssocItem) +@annotate(AssocItem, replace_bases={AstNode: ExpandableItem}) class _: """ An associated item in a `Trait` or `Impl`. @@ -1267,7 +1267,7 @@ class _: """ -@annotate(Item, add_bases=(Addressable,)) +@annotate(Item, add_bases=(Addressable, ExpandableItem)) class _: """ An item such as a function, struct, enum, etc. @@ -1279,7 +1279,6 @@ class _: enum E {} ``` """ - attribute_macro_expansion: optional[MacroItems] | child | rust.detach @annotate(ItemList) diff --git a/rust/schema/prelude.py b/rust/schema/prelude.py index 62334b2d8641..7738aaab28fa 100644 --- a/rust/schema/prelude.py +++ b/rust/schema/prelude.py @@ -90,6 +90,13 @@ class Addressable(AstNode): crate_origin: optional[string] | desc( "One of `rustc:`, `repo::` or `lang:`.") | rust.detach | ql.internal +class ExpandableItem(AstNode): + """ + Something that can be expanded by an attribute macro + """ + attribute_macro_expansion: optional["MacroItems"] | child | rust.detach + + class Resolvable(AstNode): """ From 5718ef4e7f46b4dce05c58e9ebaa436942313d83 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 17 Jun 2025 10:14:57 +0200 Subject: [PATCH 2/6] Codegen: fix parent-child in case of diamond inheritance --- misc/codegen/templates/ql_parent.mustache | 2 +- rust/ql/.generated.list | 2 +- .../internal/generated/ParentChild.qll | 335 ++++----- swift/ql/.generated.list | 2 +- .../codeql/swift/generated/ParentChild.qll | 645 +++++++++++------- 5 files changed, 563 insertions(+), 423 deletions(-) diff --git a/misc/codegen/templates/ql_parent.mustache b/misc/codegen/templates/ql_parent.mustache index 67b975183736..f19e1e1938a0 100644 --- a/misc/codegen/templates/ql_parent.mustache +++ b/misc/codegen/templates/ql_parent.mustache @@ -63,7 +63,7 @@ none() {{#classes}} {{#final}} or - result = getImmediateChildOf{{name}}(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOf{{name}}(e, i, partialAccessor) | i) {{/final}} {{/classes}} } diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index af723110b1b6..682a2361f753 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -580,7 +580,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll eaa0cd4402d3665013d47e lib/codeql/rust/elements/internal/generated/ParenExpr.qll 812d2ff65079277f39f15c084657a955a960a7c1c0e96dd60472a58d56b945eb eb8c607f43e1fcbb41f37a10de203a1db806690e10ff4f04d48ed874189cb0eb lib/codeql/rust/elements/internal/generated/ParenPat.qll 24f9dc7fce75827d6fddb856cd48f80168143151b27295c0bab6db5a06567a09 ebadbc6f5498e9ed754b39893ce0763840409a0721036a25b56e1ead7dcc09aa lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll 03f5c5b96a37adeb845352d7fcea3e098da9050e534972d14ac0f70d60a2d776 ed3d6e5d02086523087adebce4e89e35461eb95f2a66d1d4100fe23fc691b126 -lib/codeql/rust/elements/internal/generated/ParentChild.qll 7078ece21f185a3e6e02b4f4e8f6fa650d26fe7225199244d46669d71ec3b66d c424e838c43b5de9357e99bbd8a6da3a339533433d7b2d5b8aa17a7d4bc5e7f8 +lib/codeql/rust/elements/internal/generated/ParentChild.qll 95c48218482dae9323396d5069a714fe69e78fe00b52bae9b70594ebd8501687 b24fbe0755ce07388348479c6c9d9343387937a0ccb31bc7e17caffa94b28641 lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll d901fdc8142a5b8847cc98fc2afcfd16428b8ace4fbffb457e761b5fd3901a77 5dbb0aea5a13f937da666ccb042494af8f11e776ade1459d16b70a4dd193f9fb lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll 9b12afb46fc5a9ad3a811b05472621bbecccb900c47504feb7f29d96b28421ca bcacbffc36fb3e0c9b26523b5963af0ffa9fd6b19f00a2a31bdb2316071546bd diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll index 0db7bfd4e1b6..23c5db651000 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -4138,335 +4138,340 @@ private module Impl { // * none() simplifies generation, as we can append `or ...` without a special case for the first item none() or - result = getImmediateChildOfExtractorStep(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfExtractorStep(e, i, partialAccessor) | i) or - result = getImmediateChildOfNamedCrate(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfNamedCrate(e, i, partialAccessor) | i) or - result = getImmediateChildOfCrate(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfCrate(e, i, partialAccessor) | i) or - result = getImmediateChildOfFormat(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfFormat(e, i, partialAccessor) | i) or - result = getImmediateChildOfFormatArgument(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfFormatArgument(e, i, partialAccessor) | i) or - result = getImmediateChildOfMissing(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfMissing(e, i, partialAccessor) | i) or - result = getImmediateChildOfUnimplemented(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfUnimplemented(e, i, partialAccessor) | i) or - result = getImmediateChildOfAbi(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAbi(e, i, partialAccessor) | i) or - result = getImmediateChildOfArgList(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfArgList(e, i, partialAccessor) | i) or - result = getImmediateChildOfAsmDirSpec(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAsmDirSpec(e, i, partialAccessor) | i) or - result = getImmediateChildOfAsmOperandExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAsmOperandExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfAsmOption(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAsmOption(e, i, partialAccessor) | i) or - result = getImmediateChildOfAsmRegSpec(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAsmRegSpec(e, i, partialAccessor) | i) or - result = getImmediateChildOfAssocItemList(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAssocItemList(e, i, partialAccessor) | i) or - result = getImmediateChildOfAttr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAttr(e, i, partialAccessor) | i) or - result = getImmediateChildOfClosureBinder(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfClosureBinder(e, i, partialAccessor) | i) or - result = getImmediateChildOfExternItemList(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfExternItemList(e, i, partialAccessor) | i) or - result = getImmediateChildOfFormatArgsArg(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfFormatArgsArg(e, i, partialAccessor) | i) or - result = getImmediateChildOfGenericArgList(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfGenericArgList(e, i, partialAccessor) | i) or - result = getImmediateChildOfGenericParamList(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfGenericParamList(e, i, partialAccessor) | i) or - result = getImmediateChildOfItemList(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfItemList(e, i, partialAccessor) | i) or - result = getImmediateChildOfLabel(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfLabel(e, i, partialAccessor) | i) or - result = getImmediateChildOfLetElse(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfLetElse(e, i, partialAccessor) | i) or - result = getImmediateChildOfMacroItems(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfMacroItems(e, i, partialAccessor) | i) or - result = getImmediateChildOfMatchArm(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfMatchArm(e, i, partialAccessor) | i) or - result = getImmediateChildOfMatchArmList(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfMatchArmList(e, i, partialAccessor) | i) or - result = getImmediateChildOfMatchGuard(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfMatchGuard(e, i, partialAccessor) | i) or - result = getImmediateChildOfMeta(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfMeta(e, i, partialAccessor) | i) or - result = getImmediateChildOfName(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfName(e, i, partialAccessor) | i) or - result = getImmediateChildOfParamList(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfParamList(e, i, partialAccessor) | i) or - result = getImmediateChildOfParenthesizedArgList(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfParenthesizedArgList(e, i, partialAccessor) | i) or - result = getImmediateChildOfPath(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPath(e, i, partialAccessor) | i) or - result = getImmediateChildOfPathSegment(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPathSegment(e, i, partialAccessor) | i) or - result = getImmediateChildOfRename(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfRename(e, i, partialAccessor) | i) or - result = getImmediateChildOfRetTypeRepr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfRetTypeRepr(e, i, partialAccessor) | i) or - result = getImmediateChildOfReturnTypeSyntax(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfReturnTypeSyntax(e, i, partialAccessor) | i) or - result = getImmediateChildOfSourceFile(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfSourceFile(e, i, partialAccessor) | i) or - result = getImmediateChildOfStmtList(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfStmtList(e, i, partialAccessor) | i) or - result = getImmediateChildOfStructExprField(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfStructExprField(e, i, partialAccessor) | i) or - result = getImmediateChildOfStructExprFieldList(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfStructExprFieldList(e, i, partialAccessor) | i) or - result = getImmediateChildOfStructField(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfStructField(e, i, partialAccessor) | i) or - result = getImmediateChildOfStructPatField(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfStructPatField(e, i, partialAccessor) | i) or - result = getImmediateChildOfStructPatFieldList(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfStructPatFieldList(e, i, partialAccessor) | i) or - result = getImmediateChildOfTokenTree(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTokenTree(e, i, partialAccessor) | i) or - result = getImmediateChildOfTupleField(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTupleField(e, i, partialAccessor) | i) or - result = getImmediateChildOfTypeBound(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTypeBound(e, i, partialAccessor) | i) or - result = getImmediateChildOfTypeBoundList(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTypeBoundList(e, i, partialAccessor) | i) or - result = getImmediateChildOfUseBoundGenericArgs(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfUseBoundGenericArgs(e, i, partialAccessor) | i) or - result = getImmediateChildOfUseTree(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfUseTree(e, i, partialAccessor) | i) or - result = getImmediateChildOfUseTreeList(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfUseTreeList(e, i, partialAccessor) | i) or - result = getImmediateChildOfVariantList(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfVariantList(e, i, partialAccessor) | i) or - result = getImmediateChildOfVisibility(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfVisibility(e, i, partialAccessor) | i) or - result = getImmediateChildOfWhereClause(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfWhereClause(e, i, partialAccessor) | i) or - result = getImmediateChildOfWherePred(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfWherePred(e, i, partialAccessor) | i) or - result = getImmediateChildOfArrayExprInternal(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfArrayExprInternal(e, i, partialAccessor) | i) or - result = getImmediateChildOfArrayTypeRepr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfArrayTypeRepr(e, i, partialAccessor) | i) or - result = getImmediateChildOfAsmClobberAbi(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAsmClobberAbi(e, i, partialAccessor) | i) or - result = getImmediateChildOfAsmConst(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAsmConst(e, i, partialAccessor) | i) or - result = getImmediateChildOfAsmExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAsmExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfAsmLabel(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAsmLabel(e, i, partialAccessor) | i) or - result = getImmediateChildOfAsmOperandNamed(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAsmOperandNamed(e, i, partialAccessor) | i) or - result = getImmediateChildOfAsmOptionsList(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAsmOptionsList(e, i, partialAccessor) | i) or - result = getImmediateChildOfAsmRegOperand(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAsmRegOperand(e, i, partialAccessor) | i) or - result = getImmediateChildOfAsmSym(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAsmSym(e, i, partialAccessor) | i) or - result = getImmediateChildOfAssocTypeArg(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAssocTypeArg(e, i, partialAccessor) | i) or - result = getImmediateChildOfAwaitExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAwaitExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfBecomeExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfBecomeExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfBinaryExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfBinaryExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfBoxPat(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfBoxPat(e, i, partialAccessor) | i) or - result = getImmediateChildOfBreakExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfBreakExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfCastExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfCastExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfClosureExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfClosureExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfComment(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfComment(e, i, partialAccessor) | i) or - result = getImmediateChildOfConstArg(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfConstArg(e, i, partialAccessor) | i) or - result = getImmediateChildOfConstBlockPat(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfConstBlockPat(e, i, partialAccessor) | i) or - result = getImmediateChildOfConstParam(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfConstParam(e, i, partialAccessor) | i) or - result = getImmediateChildOfContinueExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfContinueExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfDynTraitTypeRepr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfDynTraitTypeRepr(e, i, partialAccessor) | i) or - result = getImmediateChildOfExprStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfExprStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfFieldExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfFieldExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfFnPtrTypeRepr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfFnPtrTypeRepr(e, i, partialAccessor) | i) or - result = getImmediateChildOfForTypeRepr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfForTypeRepr(e, i, partialAccessor) | i) or - result = getImmediateChildOfFormatArgsExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfFormatArgsExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfIdentPat(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfIdentPat(e, i, partialAccessor) | i) or - result = getImmediateChildOfIfExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfIfExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfImplTraitTypeRepr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfImplTraitTypeRepr(e, i, partialAccessor) | i) or - result = getImmediateChildOfIndexExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfIndexExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfInferTypeRepr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfInferTypeRepr(e, i, partialAccessor) | i) or - result = getImmediateChildOfLetExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfLetExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfLetStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfLetStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfLifetime(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfLifetime(e, i, partialAccessor) | i) or - result = getImmediateChildOfLifetimeArg(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfLifetimeArg(e, i, partialAccessor) | i) or - result = getImmediateChildOfLifetimeParam(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfLifetimeParam(e, i, partialAccessor) | i) or - result = getImmediateChildOfLiteralExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfLiteralExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfLiteralPat(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfLiteralPat(e, i, partialAccessor) | i) or - result = getImmediateChildOfMacroBlockExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfMacroBlockExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfMacroExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfMacroExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfMacroPat(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfMacroPat(e, i, partialAccessor) | i) or - result = getImmediateChildOfMacroTypeRepr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfMacroTypeRepr(e, i, partialAccessor) | i) or - result = getImmediateChildOfMatchExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfMatchExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfNameRef(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfNameRef(e, i, partialAccessor) | i) or - result = getImmediateChildOfNeverTypeRepr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfNeverTypeRepr(e, i, partialAccessor) | i) or - result = getImmediateChildOfOffsetOfExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfOffsetOfExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfOrPat(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfOrPat(e, i, partialAccessor) | i) or - result = getImmediateChildOfParam(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfParam(e, i, partialAccessor) | i) or - result = getImmediateChildOfParenExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfParenExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfParenPat(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfParenPat(e, i, partialAccessor) | i) or - result = getImmediateChildOfParenTypeRepr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfParenTypeRepr(e, i, partialAccessor) | i) or - result = getImmediateChildOfPathTypeRepr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPathTypeRepr(e, i, partialAccessor) | i) or - result = getImmediateChildOfPrefixExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPrefixExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfPtrTypeRepr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPtrTypeRepr(e, i, partialAccessor) | i) or - result = getImmediateChildOfRangeExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfRangeExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfRangePat(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfRangePat(e, i, partialAccessor) | i) or - result = getImmediateChildOfRefExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfRefExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfRefPat(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfRefPat(e, i, partialAccessor) | i) or - result = getImmediateChildOfRefTypeRepr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfRefTypeRepr(e, i, partialAccessor) | i) or - result = getImmediateChildOfRestPat(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfRestPat(e, i, partialAccessor) | i) or - result = getImmediateChildOfReturnExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfReturnExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfSelfParam(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfSelfParam(e, i, partialAccessor) | i) or - result = getImmediateChildOfSlicePat(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfSlicePat(e, i, partialAccessor) | i) or - result = getImmediateChildOfSliceTypeRepr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfSliceTypeRepr(e, i, partialAccessor) | i) or - result = getImmediateChildOfStructFieldList(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfStructFieldList(e, i, partialAccessor) | i) or - result = getImmediateChildOfTryExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTryExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfTupleExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTupleExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfTupleFieldList(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTupleFieldList(e, i, partialAccessor) | i) or - result = getImmediateChildOfTuplePat(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTuplePat(e, i, partialAccessor) | i) or - result = getImmediateChildOfTupleTypeRepr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTupleTypeRepr(e, i, partialAccessor) | i) or - result = getImmediateChildOfTypeArg(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTypeArg(e, i, partialAccessor) | i) or - result = getImmediateChildOfTypeParam(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTypeParam(e, i, partialAccessor) | i) or - result = getImmediateChildOfUnderscoreExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfUnderscoreExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfVariant(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfVariant(e, i, partialAccessor) | i) or - result = getImmediateChildOfWildcardPat(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfWildcardPat(e, i, partialAccessor) | i) or - result = getImmediateChildOfYeetExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfYeetExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfYieldExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfYieldExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfArrayListExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfArrayListExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfArrayRepeatExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfArrayRepeatExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfBlockExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfBlockExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfCallExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfCallExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfConst(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfConst(e, i, partialAccessor) | i) or - result = getImmediateChildOfEnum(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfEnum(e, i, partialAccessor) | i) or - result = getImmediateChildOfExternBlock(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfExternBlock(e, i, partialAccessor) | i) or - result = getImmediateChildOfExternCrate(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfExternCrate(e, i, partialAccessor) | i) or - result = getImmediateChildOfFormatTemplateVariableAccess(e, index, partialAccessor) + index = + min(int i | + result = getImmediateChildOfFormatTemplateVariableAccess(e, i, partialAccessor) + | + i + ) or - result = getImmediateChildOfFunction(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfFunction(e, i, partialAccessor) | i) or - result = getImmediateChildOfImpl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfImpl(e, i, partialAccessor) | i) or - result = getImmediateChildOfMacroCall(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfMacroCall(e, i, partialAccessor) | i) or - result = getImmediateChildOfMacroDef(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfMacroDef(e, i, partialAccessor) | i) or - result = getImmediateChildOfMacroRules(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfMacroRules(e, i, partialAccessor) | i) or - result = getImmediateChildOfMethodCallExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfMethodCallExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfModule(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfModule(e, i, partialAccessor) | i) or - result = getImmediateChildOfPathExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPathExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfPathPat(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPathPat(e, i, partialAccessor) | i) or - result = getImmediateChildOfStatic(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfStatic(e, i, partialAccessor) | i) or - result = getImmediateChildOfStruct(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfStruct(e, i, partialAccessor) | i) or - result = getImmediateChildOfStructExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfStructExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfStructPat(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfStructPat(e, i, partialAccessor) | i) or - result = getImmediateChildOfTrait(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTrait(e, i, partialAccessor) | i) or - result = getImmediateChildOfTraitAlias(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTraitAlias(e, i, partialAccessor) | i) or - result = getImmediateChildOfTupleStructPat(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTupleStructPat(e, i, partialAccessor) | i) or - result = getImmediateChildOfTypeAlias(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTypeAlias(e, i, partialAccessor) | i) or - result = getImmediateChildOfUnion(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfUnion(e, i, partialAccessor) | i) or - result = getImmediateChildOfUse(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfUse(e, i, partialAccessor) | i) or - result = getImmediateChildOfForExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfForExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfLoopExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfLoopExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfWhileExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfWhileExpr(e, i, partialAccessor) | i) } } diff --git a/swift/ql/.generated.list b/swift/ql/.generated.list index f693ce9e9fc5..351beb59ba7d 100644 --- a/swift/ql/.generated.list +++ b/swift/ql/.generated.list @@ -733,7 +733,7 @@ lib/codeql/swift/generated/Locatable.qll 1d37fa20de71c0b9986bfd7a7c0cb82ab7bf3fd lib/codeql/swift/generated/Location.qll 5e20316c3e480ddfe632b7e88e016c19f10a67df1f6ae9c8f128755a6907d6f5 5a0af2d070bcb2ed53d6d0282bf9c60dc64c2dce89c21fdd485e9c7893c1c8fa lib/codeql/swift/generated/MacroRole.qll facf907e75490d69cd401c491215e4719324d751f40ea46c86ccf24cf3663c1f 969d8d4b44e3f1a9c193a152a4d83a303e56d2dbb871fc920c47a33f699cf018 lib/codeql/swift/generated/OtherAvailabilitySpec.qll d9feaa2a71acff3184ca389045b0a49d09156210df0e034923d715b432ad594b 046737621a8bcf69bf805afb0cff476bd15259f12f0d77fce3206dd01b31518f -lib/codeql/swift/generated/ParentChild.qll d66e5c28e93a3085fbae0ada238a96577ad21fd64a37ce967032bf5df8bdfb1d 2d440ad9c0304f658d54c6c53a8b1db1d3e032ee5522b51c46116413d0cf5dbb +lib/codeql/swift/generated/ParentChild.qll c8cb49c7c6977732771cb13aeeb0767f856a297da3e7d031341b60b4214cae8d 67987706502e52aa2f432671bd388087192ba0060e3866dea798fcee0d447dce lib/codeql/swift/generated/PlatformVersionAvailabilitySpec.qll dc17b49a90a18a8f7607adf2433bc8f0c194fa3e803aa3822f809d4d4fbd6793 be48ea9f8ae17354c8508aaed24337a9e57ce01f288fece3dcecd99776cabcec lib/codeql/swift/generated/PureSynthConstructors.qll bc31a6c4d142fa3fbdcae69d5ba6f1cec00eb9ad92b46c8d7b91ebfa7ef6c1f4 bc31a6c4d142fa3fbdcae69d5ba6f1cec00eb9ad92b46c8d7b91ebfa7ef6c1f4 lib/codeql/swift/generated/Raw.qll 96d5f8778f25cd396b5cc56c38dce597c5a9a5c2b1e9ed8b9a4d2eca89e49323 d65072b5c508dad1dd813e19f7431087d8bfc0e5d85aa3d19beffbcbbec585ec diff --git a/swift/ql/lib/codeql/swift/generated/ParentChild.qll b/swift/ql/lib/codeql/swift/generated/ParentChild.qll index 49ffc37a473c..a97184503e69 100644 --- a/swift/ql/lib/codeql/swift/generated/ParentChild.qll +++ b/swift/ql/lib/codeql/swift/generated/ParentChild.qll @@ -5259,515 +5259,650 @@ private module Impl { // * none() simplifies generation, as we can append `or ...` without a special case for the first item none() or - result = getImmediateChildOfComment(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfComment(e, i, partialAccessor) | i) or - result = getImmediateChildOfDbFile(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfDbFile(e, i, partialAccessor) | i) or - result = getImmediateChildOfDbLocation(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfDbLocation(e, i, partialAccessor) | i) or - result = getImmediateChildOfDiagnostics(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfDiagnostics(e, i, partialAccessor) | i) or - result = getImmediateChildOfUnknownFile(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfUnknownFile(e, i, partialAccessor) | i) or - result = getImmediateChildOfUnknownLocation(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfUnknownLocation(e, i, partialAccessor) | i) or - result = getImmediateChildOfAvailabilityInfo(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAvailabilityInfo(e, i, partialAccessor) | i) or - result = getImmediateChildOfKeyPathComponent(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfKeyPathComponent(e, i, partialAccessor) | i) or - result = getImmediateChildOfMacroRole(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfMacroRole(e, i, partialAccessor) | i) or - result = getImmediateChildOfUnspecifiedElement(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfUnspecifiedElement(e, i, partialAccessor) | i) or - result = getImmediateChildOfOtherAvailabilitySpec(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfOtherAvailabilitySpec(e, i, partialAccessor) | i) or - result = getImmediateChildOfPlatformVersionAvailabilitySpec(e, index, partialAccessor) + index = + min(int i | + result = getImmediateChildOfPlatformVersionAvailabilitySpec(e, i, partialAccessor) + | + i + ) or - result = getImmediateChildOfCapturedDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfCapturedDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfEnumCaseDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfEnumCaseDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfExtensionDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfExtensionDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfIfConfigDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfIfConfigDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfImportDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfImportDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfMissingMemberDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfMissingMemberDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfPatternBindingDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPatternBindingDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfPoundDiagnosticDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPoundDiagnosticDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfPrecedenceGroupDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPrecedenceGroupDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfTopLevelCodeDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTopLevelCodeDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfEnumElementDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfEnumElementDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfInfixOperatorDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfInfixOperatorDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfMacroDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfMacroDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfPostfixOperatorDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPostfixOperatorDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfPrefixOperatorDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPrefixOperatorDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfDeinitializer(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfDeinitializer(e, i, partialAccessor) | i) or - result = getImmediateChildOfInitializer(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfInitializer(e, i, partialAccessor) | i) or - result = getImmediateChildOfModuleDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfModuleDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfSubscriptDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfSubscriptDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfAccessor(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAccessor(e, i, partialAccessor) | i) or - result = getImmediateChildOfAssociatedTypeDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAssociatedTypeDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfConcreteVarDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfConcreteVarDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfGenericTypeParamDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfGenericTypeParamDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfNamedFunction(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfNamedFunction(e, i, partialAccessor) | i) or - result = getImmediateChildOfOpaqueTypeDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfOpaqueTypeDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfParamDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfParamDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfTypeAliasDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTypeAliasDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfClassDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfClassDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfEnumDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfEnumDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfProtocolDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfProtocolDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfStructDecl(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfStructDecl(e, i, partialAccessor) | i) or - result = getImmediateChildOfArgument(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfArgument(e, i, partialAccessor) | i) or - result = getImmediateChildOfAppliedPropertyWrapperExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfAppliedPropertyWrapperExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfAssignExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAssignExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfBindOptionalExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfBindOptionalExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfCaptureListExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfCaptureListExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfConsumeExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfConsumeExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfCopyExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfCopyExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfCurrentContextIsolationExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfCurrentContextIsolationExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfDeclRefExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfDeclRefExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfDefaultArgumentExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfDefaultArgumentExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfDiscardAssignmentExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfDiscardAssignmentExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfDotSyntaxBaseIgnoredExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfDotSyntaxBaseIgnoredExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfDynamicTypeExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfDynamicTypeExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfEnumIsCaseExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfEnumIsCaseExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfErrorExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfErrorExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfExtractFunctionIsolationExpr(e, index, partialAccessor) + index = + min(int i | + result = getImmediateChildOfExtractFunctionIsolationExpr(e, i, partialAccessor) + | + i + ) or - result = getImmediateChildOfForceValueExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfForceValueExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfIfExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfIfExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfInOutExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfInOutExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfKeyPathApplicationExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfKeyPathApplicationExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfKeyPathDotExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfKeyPathDotExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfKeyPathExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfKeyPathExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfLazyInitializationExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfLazyInitializationExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfMakeTemporarilyEscapableExpr(e, index, partialAccessor) + index = + min(int i | + result = getImmediateChildOfMakeTemporarilyEscapableExpr(e, i, partialAccessor) + | + i + ) or - result = getImmediateChildOfMaterializePackExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfMaterializePackExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfObjCSelectorExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfObjCSelectorExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfOneWayExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfOneWayExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfOpaqueValueExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfOpaqueValueExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfOpenExistentialExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfOpenExistentialExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfOptionalEvaluationExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfOptionalEvaluationExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfOtherInitializerRefExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfOtherInitializerRefExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfOverloadedDeclRefExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfOverloadedDeclRefExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfPackElementExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPackElementExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfPackExpansionExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPackExpansionExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfPropertyWrapperValuePlaceholderExpr(e, index, partialAccessor) + index = + min(int i | + result = getImmediateChildOfPropertyWrapperValuePlaceholderExpr(e, i, partialAccessor) + | + i + ) or - result = getImmediateChildOfRebindSelfInInitializerExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfRebindSelfInInitializerExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfSequenceExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfSequenceExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfSingleValueStmtExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfSingleValueStmtExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfSuperRefExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfSuperRefExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfTapExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTapExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfTupleElementExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTupleElementExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfTupleExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTupleExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfTypeExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTypeExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfTypeValueExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTypeValueExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfUnresolvedDeclRefExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfUnresolvedDeclRefExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfUnresolvedDotExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfUnresolvedDotExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfUnresolvedMemberExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfUnresolvedMemberExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfUnresolvedPatternExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfUnresolvedPatternExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfUnresolvedSpecializeExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfUnresolvedSpecializeExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfVarargExpansionExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfVarargExpansionExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfAbiSafeConversionExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfAbiSafeConversionExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfActorIsolationErasureExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfActorIsolationErasureExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfAnyHashableErasureExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfAnyHashableErasureExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfArchetypeToSuperExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfArchetypeToSuperExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfArrayExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfArrayExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfArrayToPointerExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfArrayToPointerExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfAutoClosureExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAutoClosureExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfAwaitExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAwaitExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfBinaryExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfBinaryExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfBorrowExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfBorrowExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfBridgeFromObjCExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfBridgeFromObjCExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfBridgeToObjCExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfBridgeToObjCExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfCallExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfCallExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfClassMetatypeToObjectExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfClassMetatypeToObjectExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfCoerceExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfCoerceExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfCollectionUpcastConversionExpr(e, index, partialAccessor) + index = + min(int i | + result = getImmediateChildOfCollectionUpcastConversionExpr(e, i, partialAccessor) + | + i + ) or - result = getImmediateChildOfConditionalBridgeFromObjCExpr(e, index, partialAccessor) + index = + min(int i | + result = getImmediateChildOfConditionalBridgeFromObjCExpr(e, i, partialAccessor) + | + i + ) or - result = getImmediateChildOfCovariantFunctionConversionExpr(e, index, partialAccessor) + index = + min(int i | + result = getImmediateChildOfCovariantFunctionConversionExpr(e, i, partialAccessor) + | + i + ) or - result = getImmediateChildOfCovariantReturnConversionExpr(e, index, partialAccessor) + index = + min(int i | + result = getImmediateChildOfCovariantReturnConversionExpr(e, i, partialAccessor) + | + i + ) or - result = getImmediateChildOfDerivedToBaseExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfDerivedToBaseExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfDestructureTupleExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfDestructureTupleExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfDictionaryExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfDictionaryExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfDifferentiableFunctionExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfDifferentiableFunctionExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfDifferentiableFunctionExtractOriginalExpr(e, index, partialAccessor) + index = + min(int i | + result = getImmediateChildOfDifferentiableFunctionExtractOriginalExpr(e, i, partialAccessor) + | + i + ) or - result = getImmediateChildOfDotSelfExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfDotSelfExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfErasureExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfErasureExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfExistentialMetatypeToObjectExpr(e, index, partialAccessor) + index = + min(int i | + result = getImmediateChildOfExistentialMetatypeToObjectExpr(e, i, partialAccessor) + | + i + ) or - result = getImmediateChildOfExplicitClosureExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfExplicitClosureExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfForceTryExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfForceTryExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfForeignObjectConversionExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfForeignObjectConversionExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfFunctionConversionExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfFunctionConversionExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfInOutToPointerExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfInOutToPointerExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfInjectIntoOptionalExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfInjectIntoOptionalExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfInterpolatedStringLiteralExpr(e, index, partialAccessor) + index = + min(int i | + result = getImmediateChildOfInterpolatedStringLiteralExpr(e, i, partialAccessor) + | + i + ) or - result = getImmediateChildOfLinearFunctionExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfLinearFunctionExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfLinearFunctionExtractOriginalExpr(e, index, partialAccessor) + index = + min(int i | + result = getImmediateChildOfLinearFunctionExtractOriginalExpr(e, i, partialAccessor) + | + i + ) or - result = getImmediateChildOfLinearToDifferentiableFunctionExpr(e, index, partialAccessor) + index = + min(int i | + result = getImmediateChildOfLinearToDifferentiableFunctionExpr(e, i, partialAccessor) + | + i + ) or - result = getImmediateChildOfLoadExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfLoadExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfMemberRefExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfMemberRefExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfMetatypeConversionExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfMetatypeConversionExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfMethodLookupExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfMethodLookupExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfNilLiteralExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfNilLiteralExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfObjectLiteralExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfObjectLiteralExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfOptionalTryExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfOptionalTryExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfParenExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfParenExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfPointerToPointerExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPointerToPointerExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfPostfixUnaryExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPostfixUnaryExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfPrefixUnaryExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPrefixUnaryExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfProtocolMetatypeToObjectExpr(e, index, partialAccessor) + index = + min(int i | + result = getImmediateChildOfProtocolMetatypeToObjectExpr(e, i, partialAccessor) + | + i + ) or - result = getImmediateChildOfRegexLiteralExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfRegexLiteralExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfStringToPointerExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfStringToPointerExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfSubscriptExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfSubscriptExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfTryExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTryExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfUnderlyingToOpaqueExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfUnderlyingToOpaqueExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfUnevaluatedInstanceExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfUnevaluatedInstanceExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfUnreachableExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfUnreachableExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfUnresolvedMemberChainResultExpr(e, index, partialAccessor) + index = + min(int i | + result = getImmediateChildOfUnresolvedMemberChainResultExpr(e, i, partialAccessor) + | + i + ) or - result = getImmediateChildOfUnresolvedTypeConversionExpr(e, index, partialAccessor) + index = + min(int i | + result = getImmediateChildOfUnresolvedTypeConversionExpr(e, i, partialAccessor) + | + i + ) or - result = getImmediateChildOfUnsafeCastExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfUnsafeCastExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfBooleanLiteralExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfBooleanLiteralExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfConditionalCheckedCastExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfConditionalCheckedCastExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfDotSyntaxCallExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfDotSyntaxCallExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfDynamicMemberRefExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfDynamicMemberRefExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfDynamicSubscriptExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfDynamicSubscriptExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfForcedCheckedCastExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfForcedCheckedCastExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfInitializerRefCallExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfInitializerRefCallExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfIsExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfIsExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfMagicIdentifierLiteralExpr(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfMagicIdentifierLiteralExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfStringLiteralExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfStringLiteralExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfFloatLiteralExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfFloatLiteralExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfIntegerLiteralExpr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfIntegerLiteralExpr(e, i, partialAccessor) | i) or - result = getImmediateChildOfAnyPattern(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfAnyPattern(e, i, partialAccessor) | i) or - result = getImmediateChildOfBindingPattern(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfBindingPattern(e, i, partialAccessor) | i) or - result = getImmediateChildOfBoolPattern(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfBoolPattern(e, i, partialAccessor) | i) or - result = getImmediateChildOfEnumElementPattern(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfEnumElementPattern(e, i, partialAccessor) | i) or - result = getImmediateChildOfExprPattern(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfExprPattern(e, i, partialAccessor) | i) or - result = getImmediateChildOfIsPattern(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfIsPattern(e, i, partialAccessor) | i) or - result = getImmediateChildOfNamedPattern(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfNamedPattern(e, i, partialAccessor) | i) or - result = getImmediateChildOfOptionalSomePattern(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfOptionalSomePattern(e, i, partialAccessor) | i) or - result = getImmediateChildOfParenPattern(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfParenPattern(e, i, partialAccessor) | i) or - result = getImmediateChildOfTuplePattern(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTuplePattern(e, i, partialAccessor) | i) or - result = getImmediateChildOfTypedPattern(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTypedPattern(e, i, partialAccessor) | i) or - result = getImmediateChildOfCaseLabelItem(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfCaseLabelItem(e, i, partialAccessor) | i) or - result = getImmediateChildOfConditionElement(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfConditionElement(e, i, partialAccessor) | i) or - result = getImmediateChildOfStmtCondition(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfStmtCondition(e, i, partialAccessor) | i) or - result = getImmediateChildOfBraceStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfBraceStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfBreakStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfBreakStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfCaseStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfCaseStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfContinueStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfContinueStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfDeferStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfDeferStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfDiscardStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfDiscardStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfFailStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfFailStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfFallthroughStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfFallthroughStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfPoundAssertStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPoundAssertStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfReturnStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfReturnStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfThenStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfThenStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfThrowStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfThrowStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfYieldStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfYieldStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfDoCatchStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfDoCatchStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfDoStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfDoStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfForEachStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfForEachStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfRepeatWhileStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfRepeatWhileStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfSwitchStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfSwitchStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfGuardStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfGuardStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfIfStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfIfStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfWhileStmt(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfWhileStmt(e, i, partialAccessor) | i) or - result = getImmediateChildOfTypeRepr(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTypeRepr(e, i, partialAccessor) | i) or - result = getImmediateChildOfDependentMemberType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfDependentMemberType(e, i, partialAccessor) | i) or - result = getImmediateChildOfDynamicSelfType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfDynamicSelfType(e, i, partialAccessor) | i) or - result = getImmediateChildOfErrorType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfErrorType(e, i, partialAccessor) | i) or - result = getImmediateChildOfExistentialType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfExistentialType(e, i, partialAccessor) | i) or - result = getImmediateChildOfInOutType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfInOutType(e, i, partialAccessor) | i) or - result = getImmediateChildOfIntegerType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfIntegerType(e, i, partialAccessor) | i) or - result = getImmediateChildOfLValueType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfLValueType(e, i, partialAccessor) | i) or - result = getImmediateChildOfModuleType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfModuleType(e, i, partialAccessor) | i) or - result = getImmediateChildOfPackElementType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPackElementType(e, i, partialAccessor) | i) or - result = getImmediateChildOfPackExpansionType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPackExpansionType(e, i, partialAccessor) | i) or - result = getImmediateChildOfPackType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPackType(e, i, partialAccessor) | i) or - result = getImmediateChildOfParameterizedProtocolType(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfParameterizedProtocolType(e, i, partialAccessor) | i) or - result = getImmediateChildOfProtocolCompositionType(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfProtocolCompositionType(e, i, partialAccessor) | i) or - result = getImmediateChildOfTupleType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTupleType(e, i, partialAccessor) | i) or - result = getImmediateChildOfUnresolvedType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfUnresolvedType(e, i, partialAccessor) | i) or - result = getImmediateChildOfBuiltinBridgeObjectType(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfBuiltinBridgeObjectType(e, i, partialAccessor) | i) or - result = getImmediateChildOfBuiltinDefaultActorStorageType(e, index, partialAccessor) + index = + min(int i | + result = getImmediateChildOfBuiltinDefaultActorStorageType(e, i, partialAccessor) + | + i + ) or - result = getImmediateChildOfBuiltinExecutorType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfBuiltinExecutorType(e, i, partialAccessor) | i) or - result = getImmediateChildOfBuiltinFixedArrayType(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfBuiltinFixedArrayType(e, i, partialAccessor) | i) or - result = getImmediateChildOfBuiltinFloatType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfBuiltinFloatType(e, i, partialAccessor) | i) or - result = getImmediateChildOfBuiltinJobType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfBuiltinJobType(e, i, partialAccessor) | i) or - result = getImmediateChildOfBuiltinNativeObjectType(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfBuiltinNativeObjectType(e, i, partialAccessor) | i) or - result = getImmediateChildOfBuiltinRawPointerType(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfBuiltinRawPointerType(e, i, partialAccessor) | i) or - result = getImmediateChildOfBuiltinRawUnsafeContinuationType(e, index, partialAccessor) + index = + min(int i | + result = getImmediateChildOfBuiltinRawUnsafeContinuationType(e, i, partialAccessor) + | + i + ) or - result = getImmediateChildOfBuiltinUnsafeValueBufferType(e, index, partialAccessor) + index = + min(int i | + result = getImmediateChildOfBuiltinUnsafeValueBufferType(e, i, partialAccessor) + | + i + ) or - result = getImmediateChildOfBuiltinVectorType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfBuiltinVectorType(e, i, partialAccessor) | i) or - result = getImmediateChildOfExistentialMetatypeType(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfExistentialMetatypeType(e, i, partialAccessor) | i) or - result = getImmediateChildOfFunctionType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfFunctionType(e, i, partialAccessor) | i) or - result = getImmediateChildOfGenericFunctionType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfGenericFunctionType(e, i, partialAccessor) | i) or - result = getImmediateChildOfGenericTypeParamType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfGenericTypeParamType(e, i, partialAccessor) | i) or - result = getImmediateChildOfMetatypeType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfMetatypeType(e, i, partialAccessor) | i) or - result = getImmediateChildOfParenType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfParenType(e, i, partialAccessor) | i) or - result = getImmediateChildOfTypeAliasType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfTypeAliasType(e, i, partialAccessor) | i) or - result = getImmediateChildOfUnboundGenericType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfUnboundGenericType(e, i, partialAccessor) | i) or - result = getImmediateChildOfUnmanagedStorageType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfUnmanagedStorageType(e, i, partialAccessor) | i) or - result = getImmediateChildOfUnownedStorageType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfUnownedStorageType(e, i, partialAccessor) | i) or - result = getImmediateChildOfWeakStorageType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfWeakStorageType(e, i, partialAccessor) | i) or - result = getImmediateChildOfBuiltinIntegerLiteralType(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfBuiltinIntegerLiteralType(e, i, partialAccessor) | i) or - result = getImmediateChildOfBuiltinIntegerType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfBuiltinIntegerType(e, i, partialAccessor) | i) or - result = getImmediateChildOfDictionaryType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfDictionaryType(e, i, partialAccessor) | i) or - result = getImmediateChildOfOpaqueTypeArchetypeType(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfOpaqueTypeArchetypeType(e, i, partialAccessor) | i) or - result = getImmediateChildOfPackArchetypeType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPackArchetypeType(e, i, partialAccessor) | i) or - result = getImmediateChildOfPrimaryArchetypeType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfPrimaryArchetypeType(e, i, partialAccessor) | i) or - result = getImmediateChildOfArraySliceType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfArraySliceType(e, i, partialAccessor) | i) or - result = getImmediateChildOfBoundGenericClassType(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfBoundGenericClassType(e, i, partialAccessor) | i) or - result = getImmediateChildOfBoundGenericEnumType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfBoundGenericEnumType(e, i, partialAccessor) | i) or - result = getImmediateChildOfBoundGenericStructType(e, index, partialAccessor) + index = + min(int i | result = getImmediateChildOfBoundGenericStructType(e, i, partialAccessor) | i) or - result = getImmediateChildOfClassType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfClassType(e, i, partialAccessor) | i) or - result = getImmediateChildOfElementArchetypeType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfElementArchetypeType(e, i, partialAccessor) | i) or - result = getImmediateChildOfEnumType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfEnumType(e, i, partialAccessor) | i) or - result = getImmediateChildOfOpenedArchetypeType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfOpenedArchetypeType(e, i, partialAccessor) | i) or - result = getImmediateChildOfOptionalType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfOptionalType(e, i, partialAccessor) | i) or - result = getImmediateChildOfProtocolType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfProtocolType(e, i, partialAccessor) | i) or - result = getImmediateChildOfStructType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfStructType(e, i, partialAccessor) | i) or - result = getImmediateChildOfVariadicSequenceType(e, index, partialAccessor) + index = min(int i | result = getImmediateChildOfVariadicSequenceType(e, i, partialAccessor) | i) } } From 1486f8aa67e14576f349ba26becdaf842c3c35dd Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 17 Jun 2025 10:16:54 +0200 Subject: [PATCH 3/6] Rust: fix `multiplePositions` consistency check --- .../elements/internal/ArrayRepeatExprImpl.qll | 6 ++++-- .../lib/codeql/rust/internal/AstConsistency.qll | 17 ++++++----------- .../ArrayRepeatExpr/ArrayRepeatExpr.expected | 2 +- .../ArrayRepeatExpr_getExpr.expected | 2 -- 4 files changed, 11 insertions(+), 16 deletions(-) diff --git a/rust/ql/lib/codeql/rust/elements/internal/ArrayRepeatExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ArrayRepeatExprImpl.qll index 5eb80cff113b..41f6c4b1e214 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ArrayRepeatExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ArrayRepeatExprImpl.qll @@ -27,8 +27,10 @@ module Impl { this.getRepeatLength().toAbbreviatedString() + "]" } - override Expr getRepeatOperand() { result = this.getExpr(0) } + override Expr getExpr(int index) { none() } - override Expr getRepeatLength() { result = this.getExpr(1) } + override Expr getRepeatOperand() { result = super.getExpr(0) } + + override Expr getRepeatLength() { result = super.getExpr(1) } } } diff --git a/rust/ql/lib/codeql/rust/internal/AstConsistency.qll b/rust/ql/lib/codeql/rust/internal/AstConsistency.qll index 43adfc351f7e..e0c174186554 100644 --- a/rust/ql/lib/codeql/rust/internal/AstConsistency.qll +++ b/rust/ql/lib/codeql/rust/internal/AstConsistency.qll @@ -60,17 +60,12 @@ query predicate multipleChildren(Element parent, int index, Element child1, Elem } /** - * Holds if `child` has multiple positions amongst the `accessor` children - * of `parent`. - * - * Children are allowed to have multiple positions for _different_ accessors, - * for example in an array repeat expression `[1; 10]`, `1` has positions for - * both `getRepeatOperand()` and `getExpr()`. + * Holds if `child` has multiple positions amongst the children of `parent`. */ -query predicate multiplePositions(Element parent, int pos1, int pos2, string accessor, Element child) { - child = getChildAndAccessor(parent, pos1, accessor) and - child = getChildAndAccessor(parent, pos2, accessor) and - pos1 != pos2 +query predicate multiplePositions(Element parent, int pos1, int pos2, Element child) { + child = getChildAndAccessor(parent, pos1, _) and + child = getChildAndAccessor(parent, pos2, _) and + pos1 < pos2 } /** @@ -97,5 +92,5 @@ int getAstInconsistencyCounts(string type) { result = count(Element e | multipleChildren(_, _, e, _) | e) or type = "Multiple positions" and - result = count(Element e | multiplePositions(_, _, _, _, e) | e) + result = count(Element e | multiplePositions(_, _, _, e) | e) } diff --git a/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr.expected b/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr.expected index e19394137d93..46394b277566 100644 --- a/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr.expected @@ -1 +1 @@ -| gen_array_repeat_expr.rs:5:5:5:11 | [1; 10] | getNumberOfExprs: | 2 | getNumberOfAttrs: | 0 | getRepeatOperand: | gen_array_repeat_expr.rs:5:6:5:6 | 1 | getRepeatLength: | gen_array_repeat_expr.rs:5:9:5:10 | 10 | +| gen_array_repeat_expr.rs:5:5:5:11 | [1; 10] | getNumberOfExprs: | 0 | getNumberOfAttrs: | 0 | getRepeatOperand: | gen_array_repeat_expr.rs:5:6:5:6 | 1 | getRepeatLength: | gen_array_repeat_expr.rs:5:9:5:10 | 10 | diff --git a/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getExpr.expected index ccf6290172e6..e69de29bb2d1 100644 --- a/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getExpr.expected @@ -1,2 +0,0 @@ -| gen_array_repeat_expr.rs:5:5:5:11 | [1; 10] | 0 | gen_array_repeat_expr.rs:5:6:5:6 | 1 | -| gen_array_repeat_expr.rs:5:5:5:11 | [1; 10] | 1 | gen_array_repeat_expr.rs:5:9:5:10 | 10 | From 9841668bde1281dd5af6ae9a79f05a926731cdb6 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 17 Jun 2025 10:17:37 +0200 Subject: [PATCH 4/6] Rust: rename `macro_expansion` test to `macro-expansion` --- .../{macro_expansion => macro-expansion}/Cargo.lock | 0 .../{macro_expansion => macro-expansion}/PrintAst.expected | 0 .../{macro_expansion => macro-expansion}/PrintAst.qlref | 0 .../{macro_expansion => macro-expansion}/macro_expansion.rs | 0 .../{macro_expansion => macro-expansion}/options.yml | 0 .../{macro_expansion => macro-expansion}/test.expected | 0 .../extractor-tests/{macro_expansion => macro-expansion}/test.ql | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename rust/ql/test/extractor-tests/{macro_expansion => macro-expansion}/Cargo.lock (100%) rename rust/ql/test/extractor-tests/{macro_expansion => macro-expansion}/PrintAst.expected (100%) rename rust/ql/test/extractor-tests/{macro_expansion => macro-expansion}/PrintAst.qlref (100%) rename rust/ql/test/extractor-tests/{macro_expansion => macro-expansion}/macro_expansion.rs (100%) rename rust/ql/test/extractor-tests/{macro_expansion => macro-expansion}/options.yml (100%) rename rust/ql/test/extractor-tests/{macro_expansion => macro-expansion}/test.expected (100%) rename rust/ql/test/extractor-tests/{macro_expansion => macro-expansion}/test.ql (100%) diff --git a/rust/ql/test/extractor-tests/macro_expansion/Cargo.lock b/rust/ql/test/extractor-tests/macro-expansion/Cargo.lock similarity index 100% rename from rust/ql/test/extractor-tests/macro_expansion/Cargo.lock rename to rust/ql/test/extractor-tests/macro-expansion/Cargo.lock diff --git a/rust/ql/test/extractor-tests/macro_expansion/PrintAst.expected b/rust/ql/test/extractor-tests/macro-expansion/PrintAst.expected similarity index 100% rename from rust/ql/test/extractor-tests/macro_expansion/PrintAst.expected rename to rust/ql/test/extractor-tests/macro-expansion/PrintAst.expected diff --git a/rust/ql/test/extractor-tests/macro_expansion/PrintAst.qlref b/rust/ql/test/extractor-tests/macro-expansion/PrintAst.qlref similarity index 100% rename from rust/ql/test/extractor-tests/macro_expansion/PrintAst.qlref rename to rust/ql/test/extractor-tests/macro-expansion/PrintAst.qlref diff --git a/rust/ql/test/extractor-tests/macro_expansion/macro_expansion.rs b/rust/ql/test/extractor-tests/macro-expansion/macro_expansion.rs similarity index 100% rename from rust/ql/test/extractor-tests/macro_expansion/macro_expansion.rs rename to rust/ql/test/extractor-tests/macro-expansion/macro_expansion.rs diff --git a/rust/ql/test/extractor-tests/macro_expansion/options.yml b/rust/ql/test/extractor-tests/macro-expansion/options.yml similarity index 100% rename from rust/ql/test/extractor-tests/macro_expansion/options.yml rename to rust/ql/test/extractor-tests/macro-expansion/options.yml diff --git a/rust/ql/test/extractor-tests/macro_expansion/test.expected b/rust/ql/test/extractor-tests/macro-expansion/test.expected similarity index 100% rename from rust/ql/test/extractor-tests/macro_expansion/test.expected rename to rust/ql/test/extractor-tests/macro-expansion/test.expected diff --git a/rust/ql/test/extractor-tests/macro_expansion/test.ql b/rust/ql/test/extractor-tests/macro-expansion/test.ql similarity index 100% rename from rust/ql/test/extractor-tests/macro_expansion/test.ql rename to rust/ql/test/extractor-tests/macro-expansion/test.ql From f086eb759e6db17b4ea4b07eb37189fce60e9c3b Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 17 Jun 2025 10:17:46 +0200 Subject: [PATCH 5/6] Rust: accept test changes --- rust/ql/test/extractor-tests/generated/Const/Const.expected | 2 +- .../test/extractor-tests/generated/Function/Function.expected | 4 ++-- .../extractor-tests/generated/MacroCall/MacroCall.expected | 4 ++-- .../extractor-tests/generated/TypeAlias/TypeAlias.expected | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/rust/ql/test/extractor-tests/generated/Const/Const.expected b/rust/ql/test/extractor-tests/generated/Const/Const.expected index ceb8669ac838..9ddd6ab901cc 100644 --- a/rust/ql/test/extractor-tests/generated/Const/Const.expected +++ b/rust/ql/test/extractor-tests/generated/Const/Const.expected @@ -1 +1 @@ -| gen_const.rs:4:5:7:22 | Const | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasBody: | yes | isConst: | yes | isDefault: | no | hasName: | yes | hasTypeRepr: | yes | hasVisibility: | no | hasImplementation: | yes | +| gen_const.rs:4:5:7:22 | Const | hasAttributeMacroExpansion: | no | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | getNumberOfAttrs: | 0 | hasBody: | yes | isConst: | yes | isDefault: | no | hasName: | yes | hasTypeRepr: | yes | hasVisibility: | no | hasImplementation: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Function/Function.expected b/rust/ql/test/extractor-tests/generated/Function/Function.expected index 967606c2542f..bc6c756212db 100644 --- a/rust/ql/test/extractor-tests/generated/Function/Function.expected +++ b/rust/ql/test/extractor-tests/generated/Function/Function.expected @@ -1,2 +1,2 @@ -| gen_function.rs:3:1:4:38 | fn foo | hasParamList: | yes | getNumberOfAttrs: | 0 | getNumberOfParams: | 1 | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAttributeMacroExpansion: | no | hasAbi: | no | hasBody: | yes | hasGenericParamList: | no | isAsync: | no | isConst: | no | isDefault: | no | isGen: | no | isUnsafe: | no | hasName: | yes | hasRetType: | yes | hasVisibility: | no | hasWhereClause: | no | hasImplementation: | yes | -| gen_function.rs:7:5:7:13 | fn bar | hasParamList: | yes | getNumberOfAttrs: | 0 | getNumberOfParams: | 0 | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAttributeMacroExpansion: | no | hasAbi: | no | hasBody: | no | hasGenericParamList: | no | isAsync: | no | isConst: | no | isDefault: | no | isGen: | no | isUnsafe: | no | hasName: | yes | hasRetType: | no | hasVisibility: | no | hasWhereClause: | no | hasImplementation: | no | +| gen_function.rs:3:1:4:38 | fn foo | hasAttributeMacroExpansion: | no | hasParamList: | yes | getNumberOfAttrs: | 0 | getNumberOfParams: | 1 | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAbi: | no | hasBody: | yes | hasGenericParamList: | no | isAsync: | no | isConst: | no | isDefault: | no | isGen: | no | isUnsafe: | no | hasName: | yes | hasRetType: | yes | hasVisibility: | no | hasWhereClause: | no | hasImplementation: | yes | +| gen_function.rs:7:5:7:13 | fn bar | hasAttributeMacroExpansion: | no | hasParamList: | yes | getNumberOfAttrs: | 0 | getNumberOfParams: | 0 | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAbi: | no | hasBody: | no | hasGenericParamList: | no | isAsync: | no | isConst: | no | isDefault: | no | isGen: | no | isUnsafe: | no | hasName: | yes | hasRetType: | no | hasVisibility: | no | hasWhereClause: | no | hasImplementation: | no | diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected index 1192db0ba7ea..e9b6210eee22 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected @@ -1,2 +1,2 @@ -| gen_macro_call.rs:7:5:7:29 | println!... | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasPath: | yes | hasTokenTree: | yes | hasMacroCallExpansion: | yes | -| gen_macro_call.rs:7:14:7:28 | ...::format_args_nl!... | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasPath: | yes | hasTokenTree: | yes | hasMacroCallExpansion: | yes | +| gen_macro_call.rs:7:5:7:29 | println!... | hasAttributeMacroExpansion: | no | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | getNumberOfAttrs: | 0 | hasPath: | yes | hasTokenTree: | yes | hasMacroCallExpansion: | yes | +| gen_macro_call.rs:7:14:7:28 | ...::format_args_nl!... | hasAttributeMacroExpansion: | no | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | getNumberOfAttrs: | 0 | hasPath: | yes | hasTokenTree: | yes | hasMacroCallExpansion: | yes | diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.expected b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.expected index 8fbbae07cc3e..3931ae99cafa 100644 --- a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.expected +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.expected @@ -1,2 +1,2 @@ -| gen_type_alias.rs:4:5:5:26 | type Point | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasGenericParamList: | no | isDefault: | no | hasName: | yes | hasTypeRepr: | yes | hasTypeBoundList: | no | hasVisibility: | no | hasWhereClause: | no | -| gen_type_alias.rs:8:9:8:20 | type Output | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasGenericParamList: | no | isDefault: | no | hasName: | yes | hasTypeRepr: | no | hasTypeBoundList: | no | hasVisibility: | no | hasWhereClause: | no | +| gen_type_alias.rs:4:5:5:26 | type Point | hasAttributeMacroExpansion: | no | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | getNumberOfAttrs: | 0 | hasGenericParamList: | no | isDefault: | no | hasName: | yes | hasTypeRepr: | yes | hasTypeBoundList: | no | hasVisibility: | no | hasWhereClause: | no | +| gen_type_alias.rs:8:9:8:20 | type Output | hasAttributeMacroExpansion: | no | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | getNumberOfAttrs: | 0 | hasGenericParamList: | no | isDefault: | no | hasName: | yes | hasTypeRepr: | no | hasTypeBoundList: | no | hasVisibility: | no | hasWhereClause: | no | From 69cdef779725e21cac311b128c3e85ae448339dc Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 17 Jun 2025 11:48:29 +0200 Subject: [PATCH 6/6] Rust: fix `ArrayRepeatExpr` control flow --- .../rust/controlflow/internal/ControlFlowGraphImpl.qll | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index 58cb9f6a95f1..21497c24826d 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -204,10 +204,18 @@ class TypeReprTree extends LeafTree instanceof TypeRepr { } * `LetExpr`s. */ module ExprTrees { - class ArrayExprTree extends StandardPostOrderTree, ArrayExpr { + class ArrayListExprTree extends StandardPostOrderTree, ArrayListExpr { override AstNode getChildNode(int i) { result = this.getExpr(i) } } + class ArrayRepeatExprTree extends StandardPostOrderTree, ArrayRepeatExpr { + override AstNode getChildNode(int i) { + i = 0 and result = this.getRepeatOperand() + or + i = 1 and result = this.getRepeatLength() + } + } + class AsmExprTree extends LeafTree instanceof AsmExpr { } class AwaitExprTree extends StandardPostOrderTree instanceof AwaitExpr {