From 49cf1739a4dcb1f5fea44459ca2a6cb32af261c0 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 17 Apr 2025 18:09:15 +0200 Subject: [PATCH 01/10] Rust: expand attribute macros --- rust/ast-generator/BUILD.bazel | 3 +- rust/ast-generator/src/main.rs | 18 +- .../{src => }/templates/extractor.mustache | 35 +- .../{src => }/templates/schema.mustache | 0 rust/codegen/BUILD.bazel | 1 + rust/codegen/codegen.sh | 4 +- .../downgrade.ql | 7 + .../old.dbscheme | 3606 +++++++++++++++++ .../rust.dbscheme | 3606 +++++++++++++++++ .../upgrade.properties | 4 + rust/extractor/src/generated/.generated.list | 2 +- rust/extractor/src/generated/top.rs | 12 +- rust/extractor/src/main.rs | 2 +- rust/extractor/src/translate/base.rs | 77 +- rust/extractor/src/translate/generated.rs | 2860 +++++++------ rust/ql/.generated.list | 64 +- rust/ql/.gitattributes | 16 + .../internal/generated/CfgNodes.qll | 10 - rust/ql/lib/codeql/rust/elements/Item.qll | 1 + .../ql/lib/codeql/rust/elements/MacroCall.qll | 1 - .../rust/elements/internal/generated/Item.qll | 15 +- .../elements/internal/generated/MacroCall.qll | 16 - .../internal/generated/ParentChild.qll | 11 +- .../rust/elements/internal/generated/Raw.qll | 12 +- rust/ql/lib/rust.dbscheme | 12 +- .../old.dbscheme | 3606 +++++++++++++++++ .../rust.dbscheme | 3606 +++++++++++++++++ .../upgrade.properties | 4 + .../attr_macro_expansion.rs | 2 + .../attribute_macro_expansion/options.yml | 2 + .../attribute_macro_expansion/test.expected | 2 + .../attribute_macro_expansion/test.ql | 6 + .../extractor-tests/generated/Const/Const.ql | 12 +- .../generated/Const/Const_getExpanded.ql | 7 + .../extractor-tests/generated/Enum/Enum.ql | 13 +- .../generated/Enum/Enum_getExpanded.ql | 7 + .../generated/ExternBlock/ExternBlock.ql | 9 +- .../ExternBlock/ExternBlock_getExpanded.ql | 7 + .../generated/ExternCrate/ExternCrate.ql | 9 +- .../ExternCrate/ExternCrate_getExpanded.ql | 7 + .../generated/Function/Function.ql | 15 +- .../Function/Function_getExpanded.ql | 7 + .../extractor-tests/generated/Impl/Impl.ql | 16 +- .../generated/Impl/Impl_getExpanded.ql | 7 + .../generated/MacroCall/MacroCall.ql | 12 +- .../generated/MacroDef/MacroDef.ql | 9 +- .../MacroDef/MacroDef_getExpanded.ql | 7 + .../generated/MacroRules/MacroRules.ql | 9 +- .../MacroRules/MacroRules_getExpanded.ql | 7 + .../generated/Module/Module.ql | 9 +- .../generated/Module/Module_getExpanded.ql | 7 + .../generated/Static/Static.ql | 13 +- .../generated/Static/Static_getExpanded.ql | 7 + .../generated/Struct/Struct.ql | 13 +- .../generated/Struct/Struct_getExpanded.ql | 7 + .../extractor-tests/generated/Trait/Trait.ql | 16 +- .../generated/Trait/Trait_getExpanded.ql | 7 + .../generated/TraitAlias/TraitAlias.ql | 13 +- .../TraitAlias/TraitAlias_getExpanded.ql | 7 + .../generated/TypeAlias/TypeAlias.ql | 14 +- .../TypeAlias/TypeAlias_getExpanded.ql | 7 + .../extractor-tests/generated/Union/Union.ql | 13 +- .../generated/Union/Union_getExpanded.ql | 7 + .../test/extractor-tests/generated/Use/Use.ql | 8 +- .../generated/Use/Use_getExpanded.ql | 7 + rust/schema/annotations.py | 3 +- 66 files changed, 16565 insertions(+), 1376 deletions(-) rename rust/ast-generator/{src => }/templates/extractor.mustache (66%) rename rust/ast-generator/{src => }/templates/schema.mustache (100%) create mode 100644 rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/downgrade.ql create mode 100644 rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/old.dbscheme create mode 100644 rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/rust.dbscheme create mode 100644 rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/upgrade.properties create mode 100644 rust/ql/lib/upgrades/e8707b675dc574aca9863eabcc09ac76f15bb9c2/old.dbscheme create mode 100644 rust/ql/lib/upgrades/e8707b675dc574aca9863eabcc09ac76f15bb9c2/rust.dbscheme create mode 100644 rust/ql/lib/upgrades/e8707b675dc574aca9863eabcc09ac76f15bb9c2/upgrade.properties create mode 100644 rust/ql/test/extractor-tests/attribute_macro_expansion/attr_macro_expansion.rs create mode 100644 rust/ql/test/extractor-tests/attribute_macro_expansion/options.yml create mode 100644 rust/ql/test/extractor-tests/attribute_macro_expansion/test.expected create mode 100644 rust/ql/test/extractor-tests/attribute_macro_expansion/test.ql create mode 100644 rust/ql/test/extractor-tests/generated/Const/Const_getExpanded.ql create mode 100644 rust/ql/test/extractor-tests/generated/Enum/Enum_getExpanded.ql create mode 100644 rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExpanded.ql create mode 100644 rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getExpanded.ql create mode 100644 rust/ql/test/extractor-tests/generated/Function/Function_getExpanded.ql create mode 100644 rust/ql/test/extractor-tests/generated/Impl/Impl_getExpanded.ql create mode 100644 rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getExpanded.ql create mode 100644 rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getExpanded.ql create mode 100644 rust/ql/test/extractor-tests/generated/Module/Module_getExpanded.ql create mode 100644 rust/ql/test/extractor-tests/generated/Static/Static_getExpanded.ql create mode 100644 rust/ql/test/extractor-tests/generated/Struct/Struct_getExpanded.ql create mode 100644 rust/ql/test/extractor-tests/generated/Trait/Trait_getExpanded.ql create mode 100644 rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getExpanded.ql create mode 100644 rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getExpanded.ql create mode 100644 rust/ql/test/extractor-tests/generated/Union/Union_getExpanded.ql create mode 100644 rust/ql/test/extractor-tests/generated/Use/Use_getExpanded.ql diff --git a/rust/ast-generator/BUILD.bazel b/rust/ast-generator/BUILD.bazel index 7d0105ac456d..24d429cbede9 100644 --- a/rust/ast-generator/BUILD.bazel +++ b/rust/ast-generator/BUILD.bazel @@ -46,8 +46,7 @@ codeql_rust_binary( ) + [":codegen"], aliases = aliases(), args = ["$(rlocationpath :rust.ungram)"], - compile_data = glob(["src/templates/*.mustache"]), - data = [":rust.ungram"], + data = [":rust.ungram"] + glob(["templates/*.mustache"]), proc_macro_deps = all_crate_deps( proc_macro = True, ), diff --git a/rust/ast-generator/src/main.rs b/rust/ast-generator/src/main.rs index 8b8d7f5c593c..f4dbeca57a95 100644 --- a/rust/ast-generator/src/main.rs +++ b/rust/ast-generator/src/main.rs @@ -142,6 +142,7 @@ fn fix_blank_lines(s: &str) -> String { fn write_schema( grammar: &AstSrc, super_types: BTreeMap>, + mustache_ctx: &mustache::Context, ) -> mustache::Result { let mut schema = Schema::default(); schema.classes.extend( @@ -156,7 +157,7 @@ fn write_schema( .iter() .map(|node| node_src_to_schema_class(node, &super_types)), ); - let template = mustache::compile_str(include_str!("templates/schema.mustache"))?; + let template = mustache_ctx.compile_path("schema")?; let res = template.render_to_string(&schema)?; Ok(fix_blank_lines(&res)) } @@ -541,7 +542,7 @@ fn node_to_extractor_info(node: &AstNodeSrc) -> ExtractorNodeInfo { } } -fn write_extractor(grammar: &AstSrc) -> mustache::Result { +fn write_extractor(grammar: &AstSrc, mustache_ctx: &mustache::Context) -> mustache::Result { let extractor_info = ExtractorInfo { enums: grammar .enums @@ -550,7 +551,7 @@ fn write_extractor(grammar: &AstSrc) -> mustache::Result { .collect(), nodes: grammar.nodes.iter().map(node_to_extractor_info).collect(), }; - let template = mustache::compile_str(include_str!("templates/extractor.mustache"))?; + let template = mustache_ctx.compile_path("extractor")?; let res = template.render_to_string(&extractor_info)?; Ok(fix_blank_lines(&res)) } @@ -578,8 +579,13 @@ fn main() -> anyhow::Result<()> { let super_class_y = super_types.get(&y.name).into_iter().flatten().max(); super_class_x.cmp(&super_class_y).then(x.name.cmp(&y.name)) }); - let schema = write_schema(&grammar, super_types)?; - let schema_path = project_root().join("schema/ast.py"); + let root = project_root(); + let mustache_ctx = mustache::Context { + template_path: root.join("ast-generator").join("templates"), + template_extension: "mustache".to_string(), + }; + let schema = write_schema(&grammar, super_types, &mustache_ctx)?; + let schema_path = root.join("schema/ast.py"); codegen::ensure_file_contents( crate::flags::CodegenType::Grammar, &schema_path, @@ -587,7 +593,7 @@ fn main() -> anyhow::Result<()> { false, ); - let extractor = write_extractor(&grammar)?; + let extractor = write_extractor(&grammar, &mustache_ctx)?; let extractor_path = project_root().join("extractor/src/translate/generated.rs"); codegen::ensure_file_contents( crate::flags::CodegenType::Grammar, diff --git a/rust/ast-generator/src/templates/extractor.mustache b/rust/ast-generator/templates/extractor.mustache similarity index 66% rename from rust/ast-generator/src/templates/extractor.mustache rename to rust/ast-generator/templates/extractor.mustache index c83881027bb5..c4f8dbd983df 100644 --- a/rust/ast-generator/src/templates/extractor.mustache +++ b/rust/ast-generator/templates/extractor.mustache @@ -1,7 +1,5 @@ //! Generated by `ast-generator`, do not edit by hand. -¶{{! <- denotes empty line that should be kept, all blank lines are removed otherwise}} -#![cfg_attr(any(), rustfmt::skip)] -¶ + use super::base::Translator; use super::mappings::TextValue; use crate::emit_detached; @@ -11,30 +9,33 @@ use ra_ap_syntax::ast::{ HasArgList, HasAttrs, HasGenericArgs, HasGenericParams, HasLoopBody, HasModuleItem, HasName, HasTypeBounds, HasVisibility, RangeItem, }; -use ra_ap_syntax::{ast, AstNode}; -¶ +#[rustfmt::skip] +use ra_ap_syntax::{AstNode, ast}; + impl Translator<'_> { - fn emit_else_branch(&mut self, node: ast::ElseBranch) -> Option> { + fn emit_else_branch(&mut self, node: &ast::ElseBranch) -> Option> { match node { ast::ElseBranch::IfExpr(inner) => self.emit_if_expr(inner).map(Into::into), ast::ElseBranch::Block(inner) => self.emit_block_expr(inner).map(Into::into), } } {{#enums}} -¶ - pub(crate) fn emit_{{snake_case_name}}(&mut self, node: ast::{{ast_name}}) -> Option> { - match node { + + pub(crate) fn emit_{{snake_case_name}}(&mut self, node: &ast::{{ast_name}}) -> Option> { + let label = match node { {{#variants}} ast::{{ast_name}}::{{variant_ast_name}}(inner) => self.emit_{{snake_case_name}}(inner).map(Into::into), {{/variants}} - } + }?; + emit_detached!({{name}}, self, node, label); + Some(label) } {{/enums}} {{#nodes}} -¶ - pub(crate) fn emit_{{snake_case_name}}(&mut self, node: ast::{{ast_name}}) -> Option> { + + pub(crate) fn emit_{{snake_case_name}}(&mut self, node: &ast::{{ast_name}}) -> Option> { {{#has_attrs}} - if self.should_be_excluded(&node) { return None; } + if self.should_be_excluded(node) { return None; } {{/has_attrs}} {{#fields}} {{#predicate}} @@ -44,10 +45,10 @@ impl Translator<'_> { let {{name}} = node.try_get_text(); {{/string}} {{#list}} - let {{name}} = node.{{method}}().filter_map(|x| self.emit_{{snake_case_ty}}(x)).collect(); + let {{name}} = node.{{method}}().filter_map(|x| self.emit_{{snake_case_ty}}(&x)).collect(); {{/list}} {{#optional}} - let {{name}} = node.{{method}}().and_then(|x| self.emit_{{snake_case_ty}}(x)); + let {{name}} = node.{{method}}().and_then(|x| self.emit_{{snake_case_ty}}(&x)); {{/optional}} {{/fields}} let label = self.trap.emit(generated::{{name}} { @@ -56,9 +57,9 @@ impl Translator<'_> { {{name}}, {{/fields}} }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!({{name}}, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } {{/nodes}} diff --git a/rust/ast-generator/src/templates/schema.mustache b/rust/ast-generator/templates/schema.mustache similarity index 100% rename from rust/ast-generator/src/templates/schema.mustache rename to rust/ast-generator/templates/schema.mustache diff --git a/rust/codegen/BUILD.bazel b/rust/codegen/BUILD.bazel index e1b51ca36614..04d380f8cc3a 100644 --- a/rust/codegen/BUILD.bazel +++ b/rust/codegen/BUILD.bazel @@ -7,6 +7,7 @@ _args = [ "//rust/ast-generator:Cargo.toml", "//misc/codegen", "//rust:codegen-conf", + "@rules_rust//tools/rustfmt:upstream_rustfmt", ] sh_binary( diff --git a/rust/codegen/codegen.sh b/rust/codegen/codegen.sh index c1d160f314bd..2d415009aed8 100755 --- a/rust/codegen/codegen.sh +++ b/rust/codegen/codegen.sh @@ -9,7 +9,9 @@ grammar_file="$(rlocation "$2")" ast_generator_manifest="$(rlocation "$3")" codegen="$(rlocation "$4")" codegen_conf="$(rlocation "$5")" -shift 5 +rustfmt="$(rlocation "$6")" +shift 6 CARGO_MANIFEST_DIR="$(dirname "$ast_generator_manifest")" "$ast_generator" "$grammar_file" +"$rustfmt" "$(dirname "$ast_generator_manifest")/../extractor/src/translate/generated.rs" "$codegen" --configuration-file="$codegen_conf" "$@" diff --git a/rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/downgrade.ql b/rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/downgrade.ql new file mode 100644 index 000000000000..562e773383f3 --- /dev/null +++ b/rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/downgrade.ql @@ -0,0 +1,7 @@ +class Element extends @element { + string toString() { none() } +} + +query predicate new_macro_call_expandeds(Element id, Element expanded) { + item_expandeds(id, expanded) and macro_calls(id) +} diff --git a/rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/old.dbscheme b/rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/old.dbscheme new file mode 100644 index 000000000000..f78cb8f2ab3b --- /dev/null +++ b/rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/old.dbscheme @@ -0,0 +1,3606 @@ +// 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 +| @macro_stmts +| @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] +crate_modules( + int id: @crate ref, + int module: @module 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_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 +); + +macro_stmts( + unique int id: @macro_stmts +); + +#keyset[id] +macro_stmts_exprs( + int id: @macro_stmts ref, + int expr: @expr ref +); + +#keyset[id, index] +macro_stmts_statements( + int id: @macro_stmts ref, + int index: int ref, + int statement: @stmt 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_expandeds( + int id: @item ref, + int expanded: @ast_node 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_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 +); + +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 +); + +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 +); + +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/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/rust.dbscheme b/rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/rust.dbscheme new file mode 100644 index 000000000000..e8707b675dc5 --- /dev/null +++ b/rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/rust.dbscheme @@ -0,0 +1,3606 @@ +// 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 +| @macro_stmts +| @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] +crate_modules( + int id: @crate ref, + int module: @module 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_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 +); + +macro_stmts( + unique int id: @macro_stmts +); + +#keyset[id] +macro_stmts_exprs( + int id: @macro_stmts ref, + int expr: @expr ref +); + +#keyset[id, index] +macro_stmts_statements( + int id: @macro_stmts ref, + int index: int ref, + int statement: @stmt 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 +; + +@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_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 +); + +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 +); + +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_expandeds( + int id: @macro_call ref, + int expanded: @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/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/upgrade.properties b/rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/upgrade.properties new file mode 100644 index 000000000000..aa90ec62fc39 --- /dev/null +++ b/rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/upgrade.properties @@ -0,0 +1,4 @@ +description: Move `expanded` back from all `@item`s to `@macro_call`s only +compatibility: backwards +item_expandeds.rel: delete +macro_call_expandeds.rel: run downgrade.ql new_macro_call_expandeds diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index 82b6665615b5..4888deae33cb 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 060225ccbae440eef117e2ef0a82f3deba29e6ba2d35f00281f9c0e6a945e692 060225ccbae440eef117e2ef0a82f3deba29e6ba2d35f00281f9c0e6a945e692 +top.rs af7f3cf5d0941e7dffd6fa4ce75ac432f433a5367a408fb944176dc1a932883b af7f3cf5d0941e7dffd6fa4ce75ac432f433a5367a408fb944176dc1a932883b diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index caeeb7552a7d..d1a7068848f6 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -5818,6 +5818,12 @@ pub struct Item { _unused: () } +impl Item { + pub fn emit_expanded(id: trap::Label, value: trap::Label, out: &mut trap::Writer) { + out.add_tuple("item_expandeds", vec![id.into(), value.into()]); + } +} + impl trap::TrapClass for Item { fn class_name() -> &'static str { "Item" } } @@ -9765,12 +9771,6 @@ impl trap::TrapEntry for MacroCall { } } -impl MacroCall { - pub fn emit_expanded(id: trap::Label, value: trap::Label, out: &mut trap::Writer) { - out.add_tuple("macro_call_expandeds", vec![id.into(), value.into()]); - } -} - impl trap::TrapClass for MacroCall { fn class_name() -> &'static str { "MacroCall" } } diff --git a/rust/extractor/src/main.rs b/rust/extractor/src/main.rs index 0ec1769f1d17..2e90d943c744 100644 --- a/rust/extractor/src/main.rs +++ b/rust/extractor/src/main.rs @@ -89,7 +89,7 @@ impl<'a> Extractor<'a> { no_location, ); } - translator.emit_source_file(ast); + translator.emit_source_file(&ast); translator.trap.commit().unwrap_or_else(|err| { error!( "Failed to write trap file for: {}: {}", diff --git a/rust/extractor/src/translate/base.rs b/rust/extractor/src/translate/base.rs index 584d1d0be5cd..a8e8bc0c890c 100644 --- a/rust/extractor/src/translate/base.rs +++ b/rust/extractor/src/translate/base.rs @@ -11,7 +11,7 @@ use ra_ap_hir::{ }; use ra_ap_hir_def::ModuleId; use ra_ap_hir_def::type_ref::Mutability; -use ra_ap_hir_expand::ExpandTo; +use ra_ap_hir_expand::{ExpandResult, ExpandTo}; use ra_ap_ide_db::RootDatabase; use ra_ap_ide_db::line_index::{LineCol, LineIndex}; use ra_ap_parser::SyntaxKind; @@ -25,50 +25,53 @@ use ra_ap_syntax::{ #[macro_export] macro_rules! emit_detached { (MacroCall, $self:ident, $node:ident, $label:ident) => { - $self.extract_macro_call_expanded(&$node, $label); + $self.extract_macro_call_expanded($node, $label); }; (Function, $self:ident, $node:ident, $label:ident) => { - $self.extract_canonical_origin(&$node, $label.into()); + $self.extract_canonical_origin($node, $label.into()); }; (Trait, $self:ident, $node:ident, $label:ident) => { - $self.extract_canonical_origin(&$node, $label.into()); + $self.extract_canonical_origin($node, $label.into()); }; (Struct, $self:ident, $node:ident, $label:ident) => { - $self.extract_canonical_origin(&$node, $label.into()); + $self.extract_canonical_origin($node, $label.into()); }; (Enum, $self:ident, $node:ident, $label:ident) => { - $self.extract_canonical_origin(&$node, $label.into()); + $self.extract_canonical_origin($node, $label.into()); }; (Union, $self:ident, $node:ident, $label:ident) => { - $self.extract_canonical_origin(&$node, $label.into()); + $self.extract_canonical_origin($node, $label.into()); }; (Module, $self:ident, $node:ident, $label:ident) => { - $self.extract_canonical_origin(&$node, $label.into()); + $self.extract_canonical_origin($node, $label.into()); }; (Variant, $self:ident, $node:ident, $label:ident) => { - $self.extract_canonical_origin_of_enum_variant(&$node, $label); + $self.extract_canonical_origin_of_enum_variant($node, $label); + }; + (Item, $self:ident, $node:ident, $label:ident) => { + $self.emit_item_expansion($node, $label); }; // TODO canonical origin of other items (PathExpr, $self:ident, $node:ident, $label:ident) => { - $self.extract_path_canonical_destination(&$node, $label.into()); + $self.extract_path_canonical_destination($node, $label.into()); }; (StructExpr, $self:ident, $node:ident, $label:ident) => { - $self.extract_path_canonical_destination(&$node, $label.into()); + $self.extract_path_canonical_destination($node, $label.into()); }; (PathPat, $self:ident, $node:ident, $label:ident) => { - $self.extract_path_canonical_destination(&$node, $label.into()); + $self.extract_path_canonical_destination($node, $label.into()); }; (StructPat, $self:ident, $node:ident, $label:ident) => { - $self.extract_path_canonical_destination(&$node, $label.into()); + $self.extract_path_canonical_destination($node, $label.into()); }; (TupleStructPat, $self:ident, $node:ident, $label:ident) => { - $self.extract_path_canonical_destination(&$node, $label.into()); + $self.extract_path_canonical_destination($node, $label.into()); }; (MethodCallExpr, $self:ident, $node:ident, $label:ident) => { - $self.extract_method_canonical_destination(&$node, $label); + $self.extract_method_canonical_destination($node, $label); }; (PathSegment, $self:ident, $node:ident, $label:ident) => { - $self.extract_types_from_path_segment(&$node, $label.into()); + $self.extract_types_from_path_segment($node, $label.into()); }; ($($_:tt)*) => {}; } @@ -252,7 +255,11 @@ impl<'a> Translator<'a> { } } } - fn emit_macro_expansion_parse_errors(&mut self, mcall: &ast::MacroCall, expanded: &SyntaxNode) { + fn emit_macro_expansion_parse_errors( + &mut self, + node: &impl ast::AstNode, + expanded: &SyntaxNode, + ) { let semantics = self.semantics.as_ref().unwrap(); if let Some(value) = semantics .hir_file_for(expanded) @@ -266,7 +273,7 @@ impl<'a> Translator<'a> { if let Some(err) = &value.err { let error = err.render_to_string(semantics.db); - if err.span().anchor.file_id == semantics.hir_file_for(mcall.syntax()) { + if err.span().anchor.file_id == semantics.hir_file_for(node.syntax()) { let location = err.span().range + semantics .db @@ -274,11 +281,11 @@ impl<'a> Translator<'a> { .get_erased(err.span().anchor.ast_id) .text_range() .start(); - self.emit_parse_error(mcall, &SyntaxError::new(error.message, location)); + self.emit_parse_error(node, &SyntaxError::new(error.message, location)); }; } for err in value.value.iter() { - self.emit_parse_error(mcall, err); + self.emit_parse_error(node, err); } } } @@ -290,20 +297,20 @@ impl<'a> Translator<'a> { ) -> Option> { match expand_to { ra_ap_hir_expand::ExpandTo::Statements => ast::MacroStmts::cast(expanded) - .and_then(|x| self.emit_macro_stmts(x)) + .and_then(|x| self.emit_macro_stmts(&x)) .map(Into::into), ra_ap_hir_expand::ExpandTo::Items => ast::MacroItems::cast(expanded) - .and_then(|x| self.emit_macro_items(x)) + .and_then(|x| self.emit_macro_items(&x)) .map(Into::into), ra_ap_hir_expand::ExpandTo::Pattern => ast::Pat::cast(expanded) - .and_then(|x| self.emit_pat(x)) + .and_then(|x| self.emit_pat(&x)) .map(Into::into), ra_ap_hir_expand::ExpandTo::Type => ast::Type::cast(expanded) - .and_then(|x| self.emit_type(x)) + .and_then(|x| self.emit_type(&x)) .map(Into::into), ra_ap_hir_expand::ExpandTo::Expr => ast::Expr::cast(expanded) - .and_then(|x| self.emit_expr(x)) + .and_then(|x| self.emit_expr(&x)) .map(Into::into), } } @@ -321,7 +328,7 @@ impl<'a> Translator<'a> { let expand_to = ra_ap_hir_expand::ExpandTo::from_call_site(mcall); let kind = expanded.kind(); if let Some(value) = self.emit_expanded_as(expand_to, expanded) { - generated::MacroCall::emit_expanded(label, value, &mut self.trap.writer); + generated::Item::emit_expanded(label.into(), value, &mut self.trap.writer); } else { let range = self.text_range_for_node(mcall); self.emit_parse_error(mcall, &SyntaxError::new( @@ -626,17 +633,31 @@ impl<'a> Translator<'a> { if let Some(t) = type_refs .next() .and_then(ast::Type::cast) - .and_then(|t| self.emit_type(t)) + .and_then(|t| self.emit_type(&t)) { generated::PathSegment::emit_type_repr(label, t, &mut self.trap.writer) } if let Some(t) = type_refs .next() .and_then(ast::PathType::cast) - .and_then(|t| self.emit_path_type(t)) + .and_then(|t| self.emit_path_type(&t)) { generated::PathSegment::emit_trait_type_repr(label, t, &mut self.trap.writer) } } } + + pub(crate) fn emit_item_expansion(&mut self, node: &ast::Item, label: Label) { + (|| { + let semantics = self.semantics?; + let ExpandResult { + value: expanded, .. + } = semantics.expand_attr_macro(node)?; + // TODO emit err? + self.emit_macro_expansion_parse_errors(node, &expanded); + let expanded = self.emit_expanded_as(ExpandTo::Items, expanded)?; + generated::Item::emit_expanded(label, expanded, &mut self.trap.writer); + Some(()) + })(); + } } diff --git a/rust/extractor/src/translate/generated.rs b/rust/extractor/src/translate/generated.rs index 32b9c2367a64..1cc9b80538d7 100644 --- a/rust/extractor/src/translate/generated.rs +++ b/rust/extractor/src/translate/generated.rs @@ -1,7 +1,4 @@ //! Generated by `ast-generator`, do not edit by hand. - -#![cfg_attr(any(), rustfmt::skip)] - use super::base::Translator; use super::mappings::TextValue; use crate::emit_detached; @@ -11,44 +8,59 @@ use ra_ap_syntax::ast::{ HasArgList, HasAttrs, HasGenericArgs, HasGenericParams, HasLoopBody, HasModuleItem, HasName, HasTypeBounds, HasVisibility, RangeItem, }; -use ra_ap_syntax::{ast, AstNode}; - +#[rustfmt::skip] +use ra_ap_syntax::{AstNode, ast}; impl Translator<'_> { - fn emit_else_branch(&mut self, node: ast::ElseBranch) -> Option> { + fn emit_else_branch(&mut self, node: &ast::ElseBranch) -> Option> { match node { ast::ElseBranch::IfExpr(inner) => self.emit_if_expr(inner).map(Into::into), ast::ElseBranch::Block(inner) => self.emit_block_expr(inner).map(Into::into), } } - - pub(crate) fn emit_asm_operand(&mut self, node: ast::AsmOperand) -> Option> { - match node { + pub(crate) fn emit_asm_operand( + &mut self, + node: &ast::AsmOperand, + ) -> Option> { + let label = match node { ast::AsmOperand::AsmConst(inner) => self.emit_asm_const(inner).map(Into::into), ast::AsmOperand::AsmLabel(inner) => self.emit_asm_label(inner).map(Into::into), - ast::AsmOperand::AsmRegOperand(inner) => self.emit_asm_reg_operand(inner).map(Into::into), + ast::AsmOperand::AsmRegOperand(inner) => { + self.emit_asm_reg_operand(inner).map(Into::into) + } ast::AsmOperand::AsmSym(inner) => self.emit_asm_sym(inner).map(Into::into), - } + }?; + emit_detached!(AsmOperand, self, node, label); + Some(label) } - - pub(crate) fn emit_asm_piece(&mut self, node: ast::AsmPiece) -> Option> { - match node { + pub(crate) fn emit_asm_piece( + &mut self, + node: &ast::AsmPiece, + ) -> Option> { + let label = match node { ast::AsmPiece::AsmClobberAbi(inner) => self.emit_asm_clobber_abi(inner).map(Into::into), - ast::AsmPiece::AsmOperandNamed(inner) => self.emit_asm_operand_named(inner).map(Into::into), + ast::AsmPiece::AsmOperandNamed(inner) => { + self.emit_asm_operand_named(inner).map(Into::into) + } ast::AsmPiece::AsmOptions(inner) => self.emit_asm_options(inner).map(Into::into), - } + }?; + emit_detached!(AsmPiece, self, node, label); + Some(label) } - - pub(crate) fn emit_assoc_item(&mut self, node: ast::AssocItem) -> Option> { - match node { + pub(crate) fn emit_assoc_item( + &mut self, + node: &ast::AssocItem, + ) -> Option> { + let label = match node { ast::AssocItem::Const(inner) => self.emit_const(inner).map(Into::into), ast::AssocItem::Fn(inner) => self.emit_fn(inner).map(Into::into), ast::AssocItem::MacroCall(inner) => self.emit_macro_call(inner).map(Into::into), ast::AssocItem::TypeAlias(inner) => self.emit_type_alias(inner).map(Into::into), - } + }?; + emit_detached!(AssocItem, self, node, label); + Some(label) } - - pub(crate) fn emit_expr(&mut self, node: ast::Expr) -> Option> { - match node { + pub(crate) fn emit_expr(&mut self, node: &ast::Expr) -> Option> { + let label = match node { ast::Expr::ArrayExpr(inner) => self.emit_array_expr(inner).map(Into::into), ast::Expr::AsmExpr(inner) => self.emit_asm_expr(inner).map(Into::into), ast::Expr::AwaitExpr(inner) => self.emit_await_expr(inner).map(Into::into), @@ -85,44 +97,67 @@ impl Translator<'_> { ast::Expr::WhileExpr(inner) => self.emit_while_expr(inner).map(Into::into), ast::Expr::YeetExpr(inner) => self.emit_yeet_expr(inner).map(Into::into), ast::Expr::YieldExpr(inner) => self.emit_yield_expr(inner).map(Into::into), - } + }?; + emit_detached!(Expr, self, node, label); + Some(label) } - - pub(crate) fn emit_extern_item(&mut self, node: ast::ExternItem) -> Option> { - match node { + pub(crate) fn emit_extern_item( + &mut self, + node: &ast::ExternItem, + ) -> Option> { + let label = match node { ast::ExternItem::Fn(inner) => self.emit_fn(inner).map(Into::into), ast::ExternItem::MacroCall(inner) => self.emit_macro_call(inner).map(Into::into), ast::ExternItem::Static(inner) => self.emit_static(inner).map(Into::into), ast::ExternItem::TypeAlias(inner) => self.emit_type_alias(inner).map(Into::into), - } - } - - pub(crate) fn emit_field_list(&mut self, node: ast::FieldList) -> Option> { - match node { - ast::FieldList::RecordFieldList(inner) => self.emit_record_field_list(inner).map(Into::into), - ast::FieldList::TupleFieldList(inner) => self.emit_tuple_field_list(inner).map(Into::into), - } - } - - pub(crate) fn emit_generic_arg(&mut self, node: ast::GenericArg) -> Option> { - match node { + }?; + emit_detached!(ExternItem, self, node, label); + Some(label) + } + pub(crate) fn emit_field_list( + &mut self, + node: &ast::FieldList, + ) -> Option> { + let label = match node { + ast::FieldList::RecordFieldList(inner) => { + self.emit_record_field_list(inner).map(Into::into) + } + ast::FieldList::TupleFieldList(inner) => { + self.emit_tuple_field_list(inner).map(Into::into) + } + }?; + emit_detached!(FieldList, self, node, label); + Some(label) + } + pub(crate) fn emit_generic_arg( + &mut self, + node: &ast::GenericArg, + ) -> Option> { + let label = match node { ast::GenericArg::AssocTypeArg(inner) => self.emit_assoc_type_arg(inner).map(Into::into), ast::GenericArg::ConstArg(inner) => self.emit_const_arg(inner).map(Into::into), ast::GenericArg::LifetimeArg(inner) => self.emit_lifetime_arg(inner).map(Into::into), ast::GenericArg::TypeArg(inner) => self.emit_type_arg(inner).map(Into::into), - } + }?; + emit_detached!(GenericArg, self, node, label); + Some(label) } - - pub(crate) fn emit_generic_param(&mut self, node: ast::GenericParam) -> Option> { - match node { + pub(crate) fn emit_generic_param( + &mut self, + node: &ast::GenericParam, + ) -> Option> { + let label = match node { ast::GenericParam::ConstParam(inner) => self.emit_const_param(inner).map(Into::into), - ast::GenericParam::LifetimeParam(inner) => self.emit_lifetime_param(inner).map(Into::into), + ast::GenericParam::LifetimeParam(inner) => { + self.emit_lifetime_param(inner).map(Into::into) + } ast::GenericParam::TypeParam(inner) => self.emit_type_param(inner).map(Into::into), - } + }?; + emit_detached!(GenericParam, self, node, label); + Some(label) } - - pub(crate) fn emit_pat(&mut self, node: ast::Pat) -> Option> { - match node { + pub(crate) fn emit_pat(&mut self, node: &ast::Pat) -> Option> { + let label = match node { ast::Pat::BoxPat(inner) => self.emit_box_pat(inner).map(Into::into), ast::Pat::ConstBlockPat(inner) => self.emit_const_block_pat(inner).map(Into::into), ast::Pat::IdentPat(inner) => self.emit_ident_pat(inner).map(Into::into), @@ -139,19 +174,21 @@ impl Translator<'_> { ast::Pat::TuplePat(inner) => self.emit_tuple_pat(inner).map(Into::into), ast::Pat::TupleStructPat(inner) => self.emit_tuple_struct_pat(inner).map(Into::into), ast::Pat::WildcardPat(inner) => self.emit_wildcard_pat(inner).map(Into::into), - } + }?; + emit_detached!(Pat, self, node, label); + Some(label) } - - pub(crate) fn emit_stmt(&mut self, node: ast::Stmt) -> Option> { - match node { + pub(crate) fn emit_stmt(&mut self, node: &ast::Stmt) -> Option> { + let label = match node { ast::Stmt::ExprStmt(inner) => self.emit_expr_stmt(inner).map(Into::into), ast::Stmt::Item(inner) => self.emit_item(inner).map(Into::into), ast::Stmt::LetStmt(inner) => self.emit_let_stmt(inner).map(Into::into), - } + }?; + emit_detached!(Stmt, self, node, label); + Some(label) } - - pub(crate) fn emit_type(&mut self, node: ast::Type) -> Option> { - match node { + pub(crate) fn emit_type(&mut self, node: &ast::Type) -> Option> { + let label = match node { ast::Type::ArrayType(inner) => self.emit_array_type(inner).map(Into::into), ast::Type::DynTraitType(inner) => self.emit_dyn_trait_type(inner).map(Into::into), ast::Type::FnPtrType(inner) => self.emit_fn_ptr_type(inner).map(Into::into), @@ -166,18 +203,23 @@ impl Translator<'_> { ast::Type::RefType(inner) => self.emit_ref_type(inner).map(Into::into), ast::Type::SliceType(inner) => self.emit_slice_type(inner).map(Into::into), ast::Type::TupleType(inner) => self.emit_tuple_type(inner).map(Into::into), - } + }?; + emit_detached!(TypeRepr, self, node, label); + Some(label) } - - pub(crate) fn emit_use_bound_generic_arg(&mut self, node: ast::UseBoundGenericArg) -> Option> { - match node { + pub(crate) fn emit_use_bound_generic_arg( + &mut self, + node: &ast::UseBoundGenericArg, + ) -> Option> { + let label = match node { ast::UseBoundGenericArg::Lifetime(inner) => self.emit_lifetime(inner).map(Into::into), ast::UseBoundGenericArg::NameRef(inner) => self.emit_name_ref(inner).map(Into::into), - } + }?; + emit_detached!(UseBoundGenericArg, self, node, label); + Some(label) } - - pub(crate) fn emit_item(&mut self, node: ast::Item) -> Option> { - match node { + pub(crate) fn emit_item(&mut self, node: &ast::Item) -> Option> { + let label = match node { ast::Item::Const(inner) => self.emit_const(inner).map(Into::into), ast::Item::Enum(inner) => self.emit_enum(inner).map(Into::into), ast::Item::ExternBlock(inner) => self.emit_extern_block(inner).map(Into::into), @@ -195,37 +237,44 @@ impl Translator<'_> { ast::Item::TypeAlias(inner) => self.emit_type_alias(inner).map(Into::into), ast::Item::Union(inner) => self.emit_union(inner).map(Into::into), ast::Item::Use(inner) => self.emit_use(inner).map(Into::into), - } + }?; + emit_detached!(Item, self, node, label); + Some(label) } - - pub(crate) fn emit_abi(&mut self, node: ast::Abi) -> Option> { + pub(crate) fn emit_abi(&mut self, node: &ast::Abi) -> Option> { let abi_string = node.try_get_text(); let label = self.trap.emit(generated::Abi { id: TrapId::Star, abi_string, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(Abi, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_arg_list(&mut self, node: ast::ArgList) -> Option> { - let args = node.args().filter_map(|x| self.emit_expr(x)).collect(); + pub(crate) fn emit_arg_list( + &mut self, + node: &ast::ArgList, + ) -> Option> { + let args = node.args().filter_map(|x| self.emit_expr(&x)).collect(); let label = self.trap.emit(generated::ArgList { id: TrapId::Star, args, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ArgList, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_array_expr(&mut self, node: ast::ArrayExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let exprs = node.exprs().filter_map(|x| self.emit_expr(x)).collect(); + pub(crate) fn emit_array_expr( + &mut self, + node: &ast::ArrayExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let exprs = node.exprs().filter_map(|x| self.emit_expr(&x)).collect(); let is_semicolon = node.semicolon_token().is_some(); let label = self.trap.emit(generated::ArrayExprInternal { id: TrapId::Star, @@ -233,205 +282,251 @@ impl Translator<'_> { exprs, is_semicolon, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ArrayExprInternal, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_array_type(&mut self, node: ast::ArrayType) -> Option> { - let const_arg = node.const_arg().and_then(|x| self.emit_const_arg(x)); - let element_type_repr = node.ty().and_then(|x| self.emit_type(x)); + pub(crate) fn emit_array_type( + &mut self, + node: &ast::ArrayType, + ) -> Option> { + let const_arg = node.const_arg().and_then(|x| self.emit_const_arg(&x)); + let element_type_repr = node.ty().and_then(|x| self.emit_type(&x)); let label = self.trap.emit(generated::ArrayTypeRepr { id: TrapId::Star, const_arg, element_type_repr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ArrayTypeRepr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_asm_clobber_abi(&mut self, node: ast::AsmClobberAbi) -> Option> { - let label = self.trap.emit(generated::AsmClobberAbi { - id: TrapId::Star, - }); - self.emit_location(label, &node); + pub(crate) fn emit_asm_clobber_abi( + &mut self, + node: &ast::AsmClobberAbi, + ) -> Option> { + let label = self + .trap + .emit(generated::AsmClobberAbi { id: TrapId::Star }); + self.emit_location(label, node); emit_detached!(AsmClobberAbi, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_asm_const(&mut self, node: ast::AsmConst) -> Option> { - let expr = node.expr().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_asm_const( + &mut self, + node: &ast::AsmConst, + ) -> Option> { + let expr = node.expr().and_then(|x| self.emit_expr(&x)); let is_const = node.const_token().is_some(); let label = self.trap.emit(generated::AsmConst { id: TrapId::Star, expr, is_const, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(AsmConst, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_asm_dir_spec(&mut self, node: ast::AsmDirSpec) -> Option> { - let label = self.trap.emit(generated::AsmDirSpec { - id: TrapId::Star, - }); - self.emit_location(label, &node); + pub(crate) fn emit_asm_dir_spec( + &mut self, + node: &ast::AsmDirSpec, + ) -> Option> { + let label = self.trap.emit(generated::AsmDirSpec { id: TrapId::Star }); + self.emit_location(label, node); emit_detached!(AsmDirSpec, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_asm_expr(&mut self, node: ast::AsmExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let asm_pieces = node.asm_pieces().filter_map(|x| self.emit_asm_piece(x)).collect(); - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let template = node.template().filter_map(|x| self.emit_expr(x)).collect(); + pub(crate) fn emit_asm_expr( + &mut self, + node: &ast::AsmExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let asm_pieces = node + .asm_pieces() + .filter_map(|x| self.emit_asm_piece(&x)) + .collect(); + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let template = node.template().filter_map(|x| self.emit_expr(&x)).collect(); let label = self.trap.emit(generated::AsmExpr { id: TrapId::Star, asm_pieces, attrs, template, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(AsmExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_asm_label(&mut self, node: ast::AsmLabel) -> Option> { - let block_expr = node.block_expr().and_then(|x| self.emit_block_expr(x)); + pub(crate) fn emit_asm_label( + &mut self, + node: &ast::AsmLabel, + ) -> Option> { + let block_expr = node.block_expr().and_then(|x| self.emit_block_expr(&x)); let label = self.trap.emit(generated::AsmLabel { id: TrapId::Star, block_expr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(AsmLabel, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_asm_operand_expr(&mut self, node: ast::AsmOperandExpr) -> Option> { - let in_expr = node.in_expr().and_then(|x| self.emit_expr(x)); - let out_expr = node.out_expr().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_asm_operand_expr( + &mut self, + node: &ast::AsmOperandExpr, + ) -> Option> { + let in_expr = node.in_expr().and_then(|x| self.emit_expr(&x)); + let out_expr = node.out_expr().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::AsmOperandExpr { id: TrapId::Star, in_expr, out_expr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(AsmOperandExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_asm_operand_named(&mut self, node: ast::AsmOperandNamed) -> Option> { - let asm_operand = node.asm_operand().and_then(|x| self.emit_asm_operand(x)); - let name = node.name().and_then(|x| self.emit_name(x)); + pub(crate) fn emit_asm_operand_named( + &mut self, + node: &ast::AsmOperandNamed, + ) -> Option> { + let asm_operand = node.asm_operand().and_then(|x| self.emit_asm_operand(&x)); + let name = node.name().and_then(|x| self.emit_name(&x)); let label = self.trap.emit(generated::AsmOperandNamed { id: TrapId::Star, asm_operand, name, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(AsmOperandNamed, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_asm_option(&mut self, node: ast::AsmOption) -> Option> { + pub(crate) fn emit_asm_option( + &mut self, + node: &ast::AsmOption, + ) -> Option> { let is_raw = node.raw_token().is_some(); let label = self.trap.emit(generated::AsmOption { id: TrapId::Star, is_raw, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(AsmOption, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_asm_options(&mut self, node: ast::AsmOptions) -> Option> { - let asm_options = node.asm_options().filter_map(|x| self.emit_asm_option(x)).collect(); + pub(crate) fn emit_asm_options( + &mut self, + node: &ast::AsmOptions, + ) -> Option> { + let asm_options = node + .asm_options() + .filter_map(|x| self.emit_asm_option(&x)) + .collect(); let label = self.trap.emit(generated::AsmOptionsList { id: TrapId::Star, asm_options, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(AsmOptionsList, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); - Some(label) - } - - pub(crate) fn emit_asm_reg_operand(&mut self, node: ast::AsmRegOperand) -> Option> { - let asm_dir_spec = node.asm_dir_spec().and_then(|x| self.emit_asm_dir_spec(x)); - let asm_operand_expr = node.asm_operand_expr().and_then(|x| self.emit_asm_operand_expr(x)); - let asm_reg_spec = node.asm_reg_spec().and_then(|x| self.emit_asm_reg_spec(x)); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); + Some(label) + } + pub(crate) fn emit_asm_reg_operand( + &mut self, + node: &ast::AsmRegOperand, + ) -> Option> { + let asm_dir_spec = node.asm_dir_spec().and_then(|x| self.emit_asm_dir_spec(&x)); + let asm_operand_expr = node + .asm_operand_expr() + .and_then(|x| self.emit_asm_operand_expr(&x)); + let asm_reg_spec = node.asm_reg_spec().and_then(|x| self.emit_asm_reg_spec(&x)); let label = self.trap.emit(generated::AsmRegOperand { id: TrapId::Star, asm_dir_spec, asm_operand_expr, asm_reg_spec, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(AsmRegOperand, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_asm_reg_spec(&mut self, node: ast::AsmRegSpec) -> Option> { - let identifier = node.name_ref().and_then(|x| self.emit_name_ref(x)); + pub(crate) fn emit_asm_reg_spec( + &mut self, + node: &ast::AsmRegSpec, + ) -> Option> { + let identifier = node.name_ref().and_then(|x| self.emit_name_ref(&x)); let label = self.trap.emit(generated::AsmRegSpec { id: TrapId::Star, identifier, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(AsmRegSpec, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_asm_sym(&mut self, node: ast::AsmSym) -> Option> { - let path = node.path().and_then(|x| self.emit_path(x)); + pub(crate) fn emit_asm_sym(&mut self, node: &ast::AsmSym) -> Option> { + let path = node.path().and_then(|x| self.emit_path(&x)); let label = self.trap.emit(generated::AsmSym { id: TrapId::Star, path, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(AsmSym, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_assoc_item_list(&mut self, node: ast::AssocItemList) -> Option> { - if self.should_be_excluded(&node) { return None; } - let assoc_items = node.assoc_items().filter_map(|x| self.emit_assoc_item(x)).collect(); - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); + pub(crate) fn emit_assoc_item_list( + &mut self, + node: &ast::AssocItemList, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let assoc_items = node + .assoc_items() + .filter_map(|x| self.emit_assoc_item(&x)) + .collect(); + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); let label = self.trap.emit(generated::AssocItemList { id: TrapId::Star, assoc_items, attrs, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(AssocItemList, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); - Some(label) - } - - pub(crate) fn emit_assoc_type_arg(&mut self, node: ast::AssocTypeArg) -> Option> { - let const_arg = node.const_arg().and_then(|x| self.emit_const_arg(x)); - let generic_arg_list = node.generic_arg_list().and_then(|x| self.emit_generic_arg_list(x)); - let identifier = node.name_ref().and_then(|x| self.emit_name_ref(x)); - let param_list = node.param_list().and_then(|x| self.emit_param_list(x)); - let ret_type = node.ret_type().and_then(|x| self.emit_ret_type(x)); - let return_type_syntax = node.return_type_syntax().and_then(|x| self.emit_return_type_syntax(x)); - let type_repr = node.ty().and_then(|x| self.emit_type(x)); - let type_bound_list = node.type_bound_list().and_then(|x| self.emit_type_bound_list(x)); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); + Some(label) + } + pub(crate) fn emit_assoc_type_arg( + &mut self, + node: &ast::AssocTypeArg, + ) -> Option> { + let const_arg = node.const_arg().and_then(|x| self.emit_const_arg(&x)); + let generic_arg_list = node + .generic_arg_list() + .and_then(|x| self.emit_generic_arg_list(&x)); + let identifier = node.name_ref().and_then(|x| self.emit_name_ref(&x)); + let param_list = node.param_list().and_then(|x| self.emit_param_list(&x)); + let ret_type = node.ret_type().and_then(|x| self.emit_ret_type(&x)); + let return_type_syntax = node + .return_type_syntax() + .and_then(|x| self.emit_return_type_syntax(&x)); + let type_repr = node.ty().and_then(|x| self.emit_type(&x)); + let type_bound_list = node + .type_bound_list() + .and_then(|x| self.emit_type_bound_list(&x)); let label = self.trap.emit(generated::AssocTypeArg { id: TrapId::Star, const_arg, @@ -443,60 +538,71 @@ impl Translator<'_> { type_repr, type_bound_list, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(AssocTypeArg, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_attr(&mut self, node: ast::Attr) -> Option> { - let meta = node.meta().and_then(|x| self.emit_meta(x)); + pub(crate) fn emit_attr(&mut self, node: &ast::Attr) -> Option> { + let meta = node.meta().and_then(|x| self.emit_meta(&x)); let label = self.trap.emit(generated::Attr { id: TrapId::Star, meta, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(Attr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_await_expr(&mut self, node: ast::AwaitExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let expr = node.expr().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_await_expr( + &mut self, + node: &ast::AwaitExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let expr = node.expr().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::AwaitExpr { id: TrapId::Star, attrs, expr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(AwaitExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_become_expr(&mut self, node: ast::BecomeExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let expr = node.expr().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_become_expr( + &mut self, + node: &ast::BecomeExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let expr = node.expr().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::BecomeExpr { id: TrapId::Star, attrs, expr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(BecomeExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_bin_expr(&mut self, node: ast::BinExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let lhs = node.lhs().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_bin_expr( + &mut self, + node: &ast::BinExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let lhs = node.lhs().and_then(|x| self.emit_expr(&x)); let operator_name = node.try_get_text(); - let rhs = node.rhs().and_then(|x| self.emit_expr(x)); + let rhs = node.rhs().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::BinaryExpr { id: TrapId::Star, attrs, @@ -504,23 +610,27 @@ impl Translator<'_> { operator_name, rhs, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(BinaryExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_block_expr(&mut self, node: ast::BlockExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); + pub(crate) fn emit_block_expr( + &mut self, + node: &ast::BlockExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); let is_async = node.async_token().is_some(); let is_const = node.const_token().is_some(); let is_gen = node.gen_token().is_some(); let is_move = node.move_token().is_some(); let is_try = node.try_token().is_some(); let is_unsafe = node.unsafe_token().is_some(); - let label = node.label().and_then(|x| self.emit_label(x)); - let stmt_list = node.stmt_list().and_then(|x| self.emit_stmt_list(x)); + let label = node.label().and_then(|x| self.emit_label(&x)); + let stmt_list = node.stmt_list().and_then(|x| self.emit_stmt_list(&x)); let label = self.trap.emit(generated::BlockExpr { id: TrapId::Star, attrs, @@ -533,99 +643,120 @@ impl Translator<'_> { label, stmt_list, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(BlockExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_box_pat(&mut self, node: ast::BoxPat) -> Option> { - let pat = node.pat().and_then(|x| self.emit_pat(x)); + pub(crate) fn emit_box_pat(&mut self, node: &ast::BoxPat) -> Option> { + let pat = node.pat().and_then(|x| self.emit_pat(&x)); let label = self.trap.emit(generated::BoxPat { id: TrapId::Star, pat, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(BoxPat, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_break_expr(&mut self, node: ast::BreakExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let expr = node.expr().and_then(|x| self.emit_expr(x)); - let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(x)); + pub(crate) fn emit_break_expr( + &mut self, + node: &ast::BreakExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let expr = node.expr().and_then(|x| self.emit_expr(&x)); + let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(&x)); let label = self.trap.emit(generated::BreakExpr { id: TrapId::Star, attrs, expr, lifetime, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(BreakExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_call_expr(&mut self, node: ast::CallExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let arg_list = node.arg_list().and_then(|x| self.emit_arg_list(x)); - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let function = node.expr().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_call_expr( + &mut self, + node: &ast::CallExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let arg_list = node.arg_list().and_then(|x| self.emit_arg_list(&x)); + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let function = node.expr().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::CallExpr { id: TrapId::Star, arg_list, attrs, function, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(CallExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_cast_expr(&mut self, node: ast::CastExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let expr = node.expr().and_then(|x| self.emit_expr(x)); - let type_repr = node.ty().and_then(|x| self.emit_type(x)); + pub(crate) fn emit_cast_expr( + &mut self, + node: &ast::CastExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let expr = node.expr().and_then(|x| self.emit_expr(&x)); + let type_repr = node.ty().and_then(|x| self.emit_type(&x)); let label = self.trap.emit(generated::CastExpr { id: TrapId::Star, attrs, expr, type_repr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(CastExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_closure_binder(&mut self, node: ast::ClosureBinder) -> Option> { - let generic_param_list = node.generic_param_list().and_then(|x| self.emit_generic_param_list(x)); + pub(crate) fn emit_closure_binder( + &mut self, + node: &ast::ClosureBinder, + ) -> Option> { + let generic_param_list = node + .generic_param_list() + .and_then(|x| self.emit_generic_param_list(&x)); let label = self.trap.emit(generated::ClosureBinder { id: TrapId::Star, generic_param_list, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ClosureBinder, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_closure_expr(&mut self, node: ast::ClosureExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let body = node.body().and_then(|x| self.emit_expr(x)); - let closure_binder = node.closure_binder().and_then(|x| self.emit_closure_binder(x)); + pub(crate) fn emit_closure_expr( + &mut self, + node: &ast::ClosureExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let body = node.body().and_then(|x| self.emit_expr(&x)); + let closure_binder = node + .closure_binder() + .and_then(|x| self.emit_closure_binder(&x)); let is_async = node.async_token().is_some(); let is_const = node.const_token().is_some(); let is_gen = node.gen_token().is_some(); let is_move = node.move_token().is_some(); let is_static = node.static_token().is_some(); - let param_list = node.param_list().and_then(|x| self.emit_param_list(x)); - let ret_type = node.ret_type().and_then(|x| self.emit_ret_type(x)); + let param_list = node.param_list().and_then(|x| self.emit_param_list(&x)); + let ret_type = node.ret_type().and_then(|x| self.emit_ret_type(&x)); let label = self.trap.emit(generated::ClosureExpr { id: TrapId::Star, attrs, @@ -639,21 +770,22 @@ impl Translator<'_> { param_list, ret_type, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ClosureExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_const(&mut self, node: ast::Const) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let body = node.body().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_const(&mut self, node: &ast::Const) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let body = node.body().and_then(|x| self.emit_expr(&x)); let is_const = node.const_token().is_some(); let is_default = node.default_token().is_some(); - let name = node.name().and_then(|x| self.emit_name(x)); - let type_repr = node.ty().and_then(|x| self.emit_type(x)); - let visibility = node.visibility().and_then(|x| self.emit_visibility(x)); + let name = node.name().and_then(|x| self.emit_name(&x)); + let type_repr = node.ty().and_then(|x| self.emit_type(&x)); + let visibility = node.visibility().and_then(|x| self.emit_visibility(&x)); let label = self.trap.emit(generated::Const { id: TrapId::Star, attrs, @@ -664,45 +796,53 @@ impl Translator<'_> { type_repr, visibility, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(Const, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_const_arg(&mut self, node: ast::ConstArg) -> Option> { - let expr = node.expr().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_const_arg( + &mut self, + node: &ast::ConstArg, + ) -> Option> { + let expr = node.expr().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::ConstArg { id: TrapId::Star, expr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ConstArg, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_const_block_pat(&mut self, node: ast::ConstBlockPat) -> Option> { - let block_expr = node.block_expr().and_then(|x| self.emit_block_expr(x)); + pub(crate) fn emit_const_block_pat( + &mut self, + node: &ast::ConstBlockPat, + ) -> Option> { + let block_expr = node.block_expr().and_then(|x| self.emit_block_expr(&x)); let is_const = node.const_token().is_some(); let label = self.trap.emit(generated::ConstBlockPat { id: TrapId::Star, block_expr, is_const, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ConstBlockPat, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_const_param(&mut self, node: ast::ConstParam) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let default_val = node.default_val().and_then(|x| self.emit_const_arg(x)); + pub(crate) fn emit_const_param( + &mut self, + node: &ast::ConstParam, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let default_val = node.default_val().and_then(|x| self.emit_const_arg(&x)); let is_const = node.const_token().is_some(); - let name = node.name().and_then(|x| self.emit_name(x)); - let type_repr = node.ty().and_then(|x| self.emit_type(x)); + let name = node.name().and_then(|x| self.emit_name(&x)); + let type_repr = node.ty().and_then(|x| self.emit_type(&x)); let label = self.trap.emit(generated::ConstParam { id: TrapId::Star, attrs, @@ -711,47 +851,58 @@ impl Translator<'_> { name, type_repr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ConstParam, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_continue_expr(&mut self, node: ast::ContinueExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(x)); + pub(crate) fn emit_continue_expr( + &mut self, + node: &ast::ContinueExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(&x)); let label = self.trap.emit(generated::ContinueExpr { id: TrapId::Star, attrs, lifetime, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ContinueExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_dyn_trait_type(&mut self, node: ast::DynTraitType) -> Option> { - let type_bound_list = node.type_bound_list().and_then(|x| self.emit_type_bound_list(x)); + pub(crate) fn emit_dyn_trait_type( + &mut self, + node: &ast::DynTraitType, + ) -> Option> { + let type_bound_list = node + .type_bound_list() + .and_then(|x| self.emit_type_bound_list(&x)); let label = self.trap.emit(generated::DynTraitTypeRepr { id: TrapId::Star, type_bound_list, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(DynTraitTypeRepr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); - Some(label) - } - - pub(crate) fn emit_enum(&mut self, node: ast::Enum) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let generic_param_list = node.generic_param_list().and_then(|x| self.emit_generic_param_list(x)); - let name = node.name().and_then(|x| self.emit_name(x)); - let variant_list = node.variant_list().and_then(|x| self.emit_variant_list(x)); - let visibility = node.visibility().and_then(|x| self.emit_visibility(x)); - let where_clause = node.where_clause().and_then(|x| self.emit_where_clause(x)); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); + Some(label) + } + pub(crate) fn emit_enum(&mut self, node: &ast::Enum) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let generic_param_list = node + .generic_param_list() + .and_then(|x| self.emit_generic_param_list(&x)); + let name = node.name().and_then(|x| self.emit_name(&x)); + let variant_list = node.variant_list().and_then(|x| self.emit_variant_list(&x)); + let visibility = node.visibility().and_then(|x| self.emit_visibility(&x)); + let where_clause = node.where_clause().and_then(|x| self.emit_where_clause(&x)); let label = self.trap.emit(generated::Enum { id: TrapId::Star, attrs, @@ -761,29 +912,37 @@ impl Translator<'_> { visibility, where_clause, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(Enum, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_expr_stmt(&mut self, node: ast::ExprStmt) -> Option> { - let expr = node.expr().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_expr_stmt( + &mut self, + node: &ast::ExprStmt, + ) -> Option> { + let expr = node.expr().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::ExprStmt { id: TrapId::Star, expr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ExprStmt, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_extern_block(&mut self, node: ast::ExternBlock) -> Option> { - if self.should_be_excluded(&node) { return None; } - let abi = node.abi().and_then(|x| self.emit_abi(x)); - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let extern_item_list = node.extern_item_list().and_then(|x| self.emit_extern_item_list(x)); + pub(crate) fn emit_extern_block( + &mut self, + node: &ast::ExternBlock, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let abi = node.abi().and_then(|x| self.emit_abi(&x)); + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let extern_item_list = node + .extern_item_list() + .and_then(|x| self.emit_extern_item_list(&x)); let is_unsafe = node.unsafe_token().is_some(); let label = self.trap.emit(generated::ExternBlock { id: TrapId::Star, @@ -792,18 +951,22 @@ impl Translator<'_> { extern_item_list, is_unsafe, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ExternBlock, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_extern_crate(&mut self, node: ast::ExternCrate) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let identifier = node.name_ref().and_then(|x| self.emit_name_ref(x)); - let rename = node.rename().and_then(|x| self.emit_rename(x)); - let visibility = node.visibility().and_then(|x| self.emit_visibility(x)); + pub(crate) fn emit_extern_crate( + &mut self, + node: &ast::ExternCrate, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let identifier = node.name_ref().and_then(|x| self.emit_name_ref(&x)); + let rename = node.rename().and_then(|x| self.emit_rename(&x)); + let visibility = node.visibility().and_then(|x| self.emit_visibility(&x)); let label = self.trap.emit(generated::ExternCrate { id: TrapId::Star, attrs, @@ -811,60 +974,74 @@ impl Translator<'_> { rename, visibility, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ExternCrate, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_extern_item_list(&mut self, node: ast::ExternItemList) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let extern_items = node.extern_items().filter_map(|x| self.emit_extern_item(x)).collect(); + pub(crate) fn emit_extern_item_list( + &mut self, + node: &ast::ExternItemList, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let extern_items = node + .extern_items() + .filter_map(|x| self.emit_extern_item(&x)) + .collect(); let label = self.trap.emit(generated::ExternItemList { id: TrapId::Star, attrs, extern_items, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ExternItemList, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_field_expr(&mut self, node: ast::FieldExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let container = node.expr().and_then(|x| self.emit_expr(x)); - let identifier = node.name_ref().and_then(|x| self.emit_name_ref(x)); + pub(crate) fn emit_field_expr( + &mut self, + node: &ast::FieldExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let container = node.expr().and_then(|x| self.emit_expr(&x)); + let identifier = node.name_ref().and_then(|x| self.emit_name_ref(&x)); let label = self.trap.emit(generated::FieldExpr { id: TrapId::Star, attrs, container, identifier, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(FieldExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_fn(&mut self, node: ast::Fn) -> Option> { - if self.should_be_excluded(&node) { return None; } - let abi = node.abi().and_then(|x| self.emit_abi(x)); - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let body = node.body().and_then(|x| self.emit_block_expr(x)); - let generic_param_list = node.generic_param_list().and_then(|x| self.emit_generic_param_list(x)); + pub(crate) fn emit_fn(&mut self, node: &ast::Fn) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let abi = node.abi().and_then(|x| self.emit_abi(&x)); + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let body = node.body().and_then(|x| self.emit_block_expr(&x)); + let generic_param_list = node + .generic_param_list() + .and_then(|x| self.emit_generic_param_list(&x)); let is_async = node.async_token().is_some(); let is_const = node.const_token().is_some(); let is_default = node.default_token().is_some(); let is_gen = node.gen_token().is_some(); let is_unsafe = node.unsafe_token().is_some(); - let name = node.name().and_then(|x| self.emit_name(x)); - let param_list = node.param_list().and_then(|x| self.emit_param_list(x)); - let ret_type = node.ret_type().and_then(|x| self.emit_ret_type(x)); - let visibility = node.visibility().and_then(|x| self.emit_visibility(x)); - let where_clause = node.where_clause().and_then(|x| self.emit_where_clause(x)); + let name = node.name().and_then(|x| self.emit_name(&x)); + let param_list = node.param_list().and_then(|x| self.emit_param_list(&x)); + let ret_type = node.ret_type().and_then(|x| self.emit_ret_type(&x)); + let visibility = node.visibility().and_then(|x| self.emit_visibility(&x)); + let where_clause = node.where_clause().and_then(|x| self.emit_where_clause(&x)); let label = self.trap.emit(generated::Function { id: TrapId::Star, abi, @@ -882,19 +1059,21 @@ impl Translator<'_> { visibility, where_clause, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(Function, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_fn_ptr_type(&mut self, node: ast::FnPtrType) -> Option> { - let abi = node.abi().and_then(|x| self.emit_abi(x)); + pub(crate) fn emit_fn_ptr_type( + &mut self, + node: &ast::FnPtrType, + ) -> Option> { + let abi = node.abi().and_then(|x| self.emit_abi(&x)); let is_async = node.async_token().is_some(); let is_const = node.const_token().is_some(); let is_unsafe = node.unsafe_token().is_some(); - let param_list = node.param_list().and_then(|x| self.emit_param_list(x)); - let ret_type = node.ret_type().and_then(|x| self.emit_ret_type(x)); + let param_list = node.param_list().and_then(|x| self.emit_param_list(&x)); + let ret_type = node.ret_type().and_then(|x| self.emit_ret_type(&x)); let label = self.trap.emit(generated::FnPtrTypeRepr { id: TrapId::Star, abi, @@ -904,19 +1083,23 @@ impl Translator<'_> { param_list, ret_type, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(FnPtrTypeRepr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_for_expr(&mut self, node: ast::ForExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let iterable = node.iterable().and_then(|x| self.emit_expr(x)); - let label = node.label().and_then(|x| self.emit_label(x)); - let loop_body = node.loop_body().and_then(|x| self.emit_block_expr(x)); - let pat = node.pat().and_then(|x| self.emit_pat(x)); + pub(crate) fn emit_for_expr( + &mut self, + node: &ast::ForExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let iterable = node.iterable().and_then(|x| self.emit_expr(&x)); + let label = node.label().and_then(|x| self.emit_label(&x)); + let loop_body = node.loop_body().and_then(|x| self.emit_block_expr(&x)); + let pat = node.pat().and_then(|x| self.emit_pat(&x)); let label = self.trap.emit(generated::ForExpr { id: TrapId::Star, attrs, @@ -925,88 +1108,115 @@ impl Translator<'_> { loop_body, pat, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ForExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_for_type(&mut self, node: ast::ForType) -> Option> { - let generic_param_list = node.generic_param_list().and_then(|x| self.emit_generic_param_list(x)); - let type_repr = node.ty().and_then(|x| self.emit_type(x)); + pub(crate) fn emit_for_type( + &mut self, + node: &ast::ForType, + ) -> Option> { + let generic_param_list = node + .generic_param_list() + .and_then(|x| self.emit_generic_param_list(&x)); + let type_repr = node.ty().and_then(|x| self.emit_type(&x)); let label = self.trap.emit(generated::ForTypeRepr { id: TrapId::Star, generic_param_list, type_repr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ForTypeRepr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_format_args_arg(&mut self, node: ast::FormatArgsArg) -> Option> { - let expr = node.expr().and_then(|x| self.emit_expr(x)); - let name = node.name().and_then(|x| self.emit_name(x)); + pub(crate) fn emit_format_args_arg( + &mut self, + node: &ast::FormatArgsArg, + ) -> Option> { + let expr = node.expr().and_then(|x| self.emit_expr(&x)); + let name = node.name().and_then(|x| self.emit_name(&x)); let label = self.trap.emit(generated::FormatArgsArg { id: TrapId::Star, expr, name, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(FormatArgsArg, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_format_args_expr(&mut self, node: ast::FormatArgsExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let args = node.args().filter_map(|x| self.emit_format_args_arg(x)).collect(); - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let template = node.template().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_format_args_expr( + &mut self, + node: &ast::FormatArgsExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let args = node + .args() + .filter_map(|x| self.emit_format_args_arg(&x)) + .collect(); + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let template = node.template().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::FormatArgsExpr { id: TrapId::Star, args, attrs, template, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(FormatArgsExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_generic_arg_list(&mut self, node: ast::GenericArgList) -> Option> { - let generic_args = node.generic_args().filter_map(|x| self.emit_generic_arg(x)).collect(); + pub(crate) fn emit_generic_arg_list( + &mut self, + node: &ast::GenericArgList, + ) -> Option> { + let generic_args = node + .generic_args() + .filter_map(|x| self.emit_generic_arg(&x)) + .collect(); let label = self.trap.emit(generated::GenericArgList { id: TrapId::Star, generic_args, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(GenericArgList, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_generic_param_list(&mut self, node: ast::GenericParamList) -> Option> { - let generic_params = node.generic_params().filter_map(|x| self.emit_generic_param(x)).collect(); + pub(crate) fn emit_generic_param_list( + &mut self, + node: &ast::GenericParamList, + ) -> Option> { + let generic_params = node + .generic_params() + .filter_map(|x| self.emit_generic_param(&x)) + .collect(); let label = self.trap.emit(generated::GenericParamList { id: TrapId::Star, generic_params, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(GenericParamList, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_ident_pat(&mut self, node: ast::IdentPat) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); + pub(crate) fn emit_ident_pat( + &mut self, + node: &ast::IdentPat, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); let is_mut = node.mut_token().is_some(); let is_ref = node.ref_token().is_some(); - let name = node.name().and_then(|x| self.emit_name(x)); - let pat = node.pat().and_then(|x| self.emit_pat(x)); + let name = node.name().and_then(|x| self.emit_name(&x)); + let pat = node.pat().and_then(|x| self.emit_pat(&x)); let label = self.trap.emit(generated::IdentPat { id: TrapId::Star, attrs, @@ -1015,18 +1225,19 @@ impl Translator<'_> { name, pat, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(IdentPat, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_if_expr(&mut self, node: ast::IfExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let condition = node.condition().and_then(|x| self.emit_expr(x)); - let else_ = node.else_branch().and_then(|x| self.emit_else_branch(x)); - let then = node.then_branch().and_then(|x| self.emit_block_expr(x)); + pub(crate) fn emit_if_expr(&mut self, node: &ast::IfExpr) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let condition = node.condition().and_then(|x| self.emit_expr(&x)); + let else_ = node.else_branch().and_then(|x| self.emit_else_branch(&x)); + let then = node.then_branch().and_then(|x| self.emit_block_expr(&x)); let label = self.trap.emit(generated::IfExpr { id: TrapId::Star, attrs, @@ -1034,24 +1245,29 @@ impl Translator<'_> { else_, then, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(IfExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_impl(&mut self, node: ast::Impl) -> Option> { - if self.should_be_excluded(&node) { return None; } - let assoc_item_list = node.assoc_item_list().and_then(|x| self.emit_assoc_item_list(x)); - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let generic_param_list = node.generic_param_list().and_then(|x| self.emit_generic_param_list(x)); + pub(crate) fn emit_impl(&mut self, node: &ast::Impl) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let assoc_item_list = node + .assoc_item_list() + .and_then(|x| self.emit_assoc_item_list(&x)); + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let generic_param_list = node + .generic_param_list() + .and_then(|x| self.emit_generic_param_list(&x)); let is_const = node.const_token().is_some(); let is_default = node.default_token().is_some(); let is_unsafe = node.unsafe_token().is_some(); - let self_ty = node.self_ty().and_then(|x| self.emit_type(x)); - let trait_ = node.trait_().and_then(|x| self.emit_type(x)); - let visibility = node.visibility().and_then(|x| self.emit_visibility(x)); - let where_clause = node.where_clause().and_then(|x| self.emit_where_clause(x)); + let self_ty = node.self_ty().and_then(|x| self.emit_type(&x)); + let trait_ = node.trait_().and_then(|x| self.emit_type(&x)); + let visibility = node.visibility().and_then(|x| self.emit_visibility(&x)); + let where_clause = node.where_clause().and_then(|x| self.emit_where_clause(&x)); let label = self.trap.emit(generated::Impl { id: TrapId::Star, assoc_item_list, @@ -1065,114 +1281,137 @@ impl Translator<'_> { visibility, where_clause, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(Impl, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_impl_trait_type(&mut self, node: ast::ImplTraitType) -> Option> { - let type_bound_list = node.type_bound_list().and_then(|x| self.emit_type_bound_list(x)); + pub(crate) fn emit_impl_trait_type( + &mut self, + node: &ast::ImplTraitType, + ) -> Option> { + let type_bound_list = node + .type_bound_list() + .and_then(|x| self.emit_type_bound_list(&x)); let label = self.trap.emit(generated::ImplTraitTypeRepr { id: TrapId::Star, type_bound_list, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ImplTraitTypeRepr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_index_expr(&mut self, node: ast::IndexExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let base = node.base().and_then(|x| self.emit_expr(x)); - let index = node.index().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_index_expr( + &mut self, + node: &ast::IndexExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let base = node.base().and_then(|x| self.emit_expr(&x)); + let index = node.index().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::IndexExpr { id: TrapId::Star, attrs, base, index, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(IndexExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_infer_type(&mut self, node: ast::InferType) -> Option> { - let label = self.trap.emit(generated::InferTypeRepr { - id: TrapId::Star, - }); - self.emit_location(label, &node); + pub(crate) fn emit_infer_type( + &mut self, + node: &ast::InferType, + ) -> Option> { + let label = self + .trap + .emit(generated::InferTypeRepr { id: TrapId::Star }); + self.emit_location(label, node); emit_detached!(InferTypeRepr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_item_list(&mut self, node: ast::ItemList) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let items = node.items().filter_map(|x| self.emit_item(x)).collect(); + pub(crate) fn emit_item_list( + &mut self, + node: &ast::ItemList, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let items = node.items().filter_map(|x| self.emit_item(&x)).collect(); let label = self.trap.emit(generated::ItemList { id: TrapId::Star, attrs, items, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ItemList, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_label(&mut self, node: ast::Label) -> Option> { - let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(x)); + pub(crate) fn emit_label(&mut self, node: &ast::Label) -> Option> { + let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(&x)); let label = self.trap.emit(generated::Label { id: TrapId::Star, lifetime, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(Label, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_let_else(&mut self, node: ast::LetElse) -> Option> { - let block_expr = node.block_expr().and_then(|x| self.emit_block_expr(x)); + pub(crate) fn emit_let_else( + &mut self, + node: &ast::LetElse, + ) -> Option> { + let block_expr = node.block_expr().and_then(|x| self.emit_block_expr(&x)); let label = self.trap.emit(generated::LetElse { id: TrapId::Star, block_expr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(LetElse, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_let_expr(&mut self, node: ast::LetExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let scrutinee = node.expr().and_then(|x| self.emit_expr(x)); - let pat = node.pat().and_then(|x| self.emit_pat(x)); + pub(crate) fn emit_let_expr( + &mut self, + node: &ast::LetExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let scrutinee = node.expr().and_then(|x| self.emit_expr(&x)); + let pat = node.pat().and_then(|x| self.emit_pat(&x)); let label = self.trap.emit(generated::LetExpr { id: TrapId::Star, attrs, scrutinee, pat, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(LetExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_let_stmt(&mut self, node: ast::LetStmt) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let initializer = node.initializer().and_then(|x| self.emit_expr(x)); - let let_else = node.let_else().and_then(|x| self.emit_let_else(x)); - let pat = node.pat().and_then(|x| self.emit_pat(x)); - let type_repr = node.ty().and_then(|x| self.emit_type(x)); + pub(crate) fn emit_let_stmt( + &mut self, + node: &ast::LetStmt, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let initializer = node.initializer().and_then(|x| self.emit_expr(&x)); + let let_else = node.let_else().and_then(|x| self.emit_let_else(&x)); + let pat = node.pat().and_then(|x| self.emit_pat(&x)); + let type_repr = node.ty().and_then(|x| self.emit_type(&x)); let label = self.trap.emit(generated::LetStmt { id: TrapId::Star, attrs, @@ -1181,121 +1420,149 @@ impl Translator<'_> { pat, type_repr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(LetStmt, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_lifetime(&mut self, node: ast::Lifetime) -> Option> { + pub(crate) fn emit_lifetime( + &mut self, + node: &ast::Lifetime, + ) -> Option> { let text = node.try_get_text(); let label = self.trap.emit(generated::Lifetime { id: TrapId::Star, text, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(Lifetime, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_lifetime_arg(&mut self, node: ast::LifetimeArg) -> Option> { - let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(x)); + pub(crate) fn emit_lifetime_arg( + &mut self, + node: &ast::LifetimeArg, + ) -> Option> { + let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(&x)); let label = self.trap.emit(generated::LifetimeArg { id: TrapId::Star, lifetime, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(LifetimeArg, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_lifetime_param(&mut self, node: ast::LifetimeParam) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(x)); - let type_bound_list = node.type_bound_list().and_then(|x| self.emit_type_bound_list(x)); + pub(crate) fn emit_lifetime_param( + &mut self, + node: &ast::LifetimeParam, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(&x)); + let type_bound_list = node + .type_bound_list() + .and_then(|x| self.emit_type_bound_list(&x)); let label = self.trap.emit(generated::LifetimeParam { id: TrapId::Star, attrs, lifetime, type_bound_list, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(LifetimeParam, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_literal(&mut self, node: ast::Literal) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); + pub(crate) fn emit_literal( + &mut self, + node: &ast::Literal, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); let text_value = node.try_get_text(); let label = self.trap.emit(generated::LiteralExpr { id: TrapId::Star, attrs, text_value, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(LiteralExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_literal_pat(&mut self, node: ast::LiteralPat) -> Option> { - let literal = node.literal().and_then(|x| self.emit_literal(x)); + pub(crate) fn emit_literal_pat( + &mut self, + node: &ast::LiteralPat, + ) -> Option> { + let literal = node.literal().and_then(|x| self.emit_literal(&x)); let label = self.trap.emit(generated::LiteralPat { id: TrapId::Star, literal, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(LiteralPat, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_loop_expr(&mut self, node: ast::LoopExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let label = node.label().and_then(|x| self.emit_label(x)); - let loop_body = node.loop_body().and_then(|x| self.emit_block_expr(x)); + pub(crate) fn emit_loop_expr( + &mut self, + node: &ast::LoopExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let label = node.label().and_then(|x| self.emit_label(&x)); + let loop_body = node.loop_body().and_then(|x| self.emit_block_expr(&x)); let label = self.trap.emit(generated::LoopExpr { id: TrapId::Star, attrs, label, loop_body, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(LoopExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_macro_call(&mut self, node: ast::MacroCall) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let path = node.path().and_then(|x| self.emit_path(x)); - let token_tree = node.token_tree().and_then(|x| self.emit_token_tree(x)); + pub(crate) fn emit_macro_call( + &mut self, + node: &ast::MacroCall, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let path = node.path().and_then(|x| self.emit_path(&x)); + let token_tree = node.token_tree().and_then(|x| self.emit_token_tree(&x)); let label = self.trap.emit(generated::MacroCall { id: TrapId::Star, attrs, path, token_tree, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(MacroCall, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_macro_def(&mut self, node: ast::MacroDef) -> Option> { - if self.should_be_excluded(&node) { return None; } - let args = node.args().and_then(|x| self.emit_token_tree(x)); - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let body = node.body().and_then(|x| self.emit_token_tree(x)); - let name = node.name().and_then(|x| self.emit_name(x)); - let visibility = node.visibility().and_then(|x| self.emit_visibility(x)); + pub(crate) fn emit_macro_def( + &mut self, + node: &ast::MacroDef, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let args = node.args().and_then(|x| self.emit_token_tree(&x)); + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let body = node.body().and_then(|x| self.emit_token_tree(&x)); + let name = node.name().and_then(|x| self.emit_name(&x)); + let visibility = node.visibility().and_then(|x| self.emit_visibility(&x)); let label = self.trap.emit(generated::MacroDef { id: TrapId::Star, args, @@ -1304,54 +1571,64 @@ impl Translator<'_> { name, visibility, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(MacroDef, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_macro_expr(&mut self, node: ast::MacroExpr) -> Option> { - let macro_call = node.macro_call().and_then(|x| self.emit_macro_call(x)); + pub(crate) fn emit_macro_expr( + &mut self, + node: &ast::MacroExpr, + ) -> Option> { + let macro_call = node.macro_call().and_then(|x| self.emit_macro_call(&x)); let label = self.trap.emit(generated::MacroExpr { id: TrapId::Star, macro_call, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(MacroExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_macro_items(&mut self, node: ast::MacroItems) -> Option> { - let items = node.items().filter_map(|x| self.emit_item(x)).collect(); + pub(crate) fn emit_macro_items( + &mut self, + node: &ast::MacroItems, + ) -> Option> { + let items = node.items().filter_map(|x| self.emit_item(&x)).collect(); let label = self.trap.emit(generated::MacroItems { id: TrapId::Star, items, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(MacroItems, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_macro_pat(&mut self, node: ast::MacroPat) -> Option> { - let macro_call = node.macro_call().and_then(|x| self.emit_macro_call(x)); + pub(crate) fn emit_macro_pat( + &mut self, + node: &ast::MacroPat, + ) -> Option> { + let macro_call = node.macro_call().and_then(|x| self.emit_macro_call(&x)); let label = self.trap.emit(generated::MacroPat { id: TrapId::Star, macro_call, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(MacroPat, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_macro_rules(&mut self, node: ast::MacroRules) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let name = node.name().and_then(|x| self.emit_name(x)); - let token_tree = node.token_tree().and_then(|x| self.emit_token_tree(x)); - let visibility = node.visibility().and_then(|x| self.emit_visibility(x)); + pub(crate) fn emit_macro_rules( + &mut self, + node: &ast::MacroRules, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let name = node.name().and_then(|x| self.emit_name(&x)); + let token_tree = node.token_tree().and_then(|x| self.emit_token_tree(&x)); + let visibility = node.visibility().and_then(|x| self.emit_visibility(&x)); let label = self.trap.emit(generated::MacroRules { id: TrapId::Star, attrs, @@ -1359,44 +1636,55 @@ impl Translator<'_> { token_tree, visibility, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(MacroRules, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); - Some(label) - } - - pub(crate) fn emit_macro_stmts(&mut self, node: ast::MacroStmts) -> Option> { - let expr = node.expr().and_then(|x| self.emit_expr(x)); - let statements = node.statements().filter_map(|x| self.emit_stmt(x)).collect(); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); + Some(label) + } + pub(crate) fn emit_macro_stmts( + &mut self, + node: &ast::MacroStmts, + ) -> Option> { + let expr = node.expr().and_then(|x| self.emit_expr(&x)); + let statements = node + .statements() + .filter_map(|x| self.emit_stmt(&x)) + .collect(); let label = self.trap.emit(generated::MacroStmts { id: TrapId::Star, expr, statements, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(MacroStmts, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_macro_type(&mut self, node: ast::MacroType) -> Option> { - let macro_call = node.macro_call().and_then(|x| self.emit_macro_call(x)); + pub(crate) fn emit_macro_type( + &mut self, + node: &ast::MacroType, + ) -> Option> { + let macro_call = node.macro_call().and_then(|x| self.emit_macro_call(&x)); let label = self.trap.emit(generated::MacroTypeRepr { id: TrapId::Star, macro_call, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(MacroTypeRepr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_match_arm(&mut self, node: ast::MatchArm) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let expr = node.expr().and_then(|x| self.emit_expr(x)); - let guard = node.guard().and_then(|x| self.emit_match_guard(x)); - let pat = node.pat().and_then(|x| self.emit_pat(x)); + pub(crate) fn emit_match_arm( + &mut self, + node: &ast::MatchArm, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let expr = node.expr().and_then(|x| self.emit_expr(&x)); + let guard = node.guard().and_then(|x| self.emit_match_guard(&x)); + let pat = node.pat().and_then(|x| self.emit_pat(&x)); let label = self.trap.emit(generated::MatchArm { id: TrapId::Star, attrs, @@ -1404,61 +1692,75 @@ impl Translator<'_> { guard, pat, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(MatchArm, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_match_arm_list(&mut self, node: ast::MatchArmList) -> Option> { - if self.should_be_excluded(&node) { return None; } - let arms = node.arms().filter_map(|x| self.emit_match_arm(x)).collect(); - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); + pub(crate) fn emit_match_arm_list( + &mut self, + node: &ast::MatchArmList, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let arms = node + .arms() + .filter_map(|x| self.emit_match_arm(&x)) + .collect(); + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); let label = self.trap.emit(generated::MatchArmList { id: TrapId::Star, arms, attrs, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(MatchArmList, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_match_expr(&mut self, node: ast::MatchExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let scrutinee = node.expr().and_then(|x| self.emit_expr(x)); - let match_arm_list = node.match_arm_list().and_then(|x| self.emit_match_arm_list(x)); + pub(crate) fn emit_match_expr( + &mut self, + node: &ast::MatchExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let scrutinee = node.expr().and_then(|x| self.emit_expr(&x)); + let match_arm_list = node + .match_arm_list() + .and_then(|x| self.emit_match_arm_list(&x)); let label = self.trap.emit(generated::MatchExpr { id: TrapId::Star, attrs, scrutinee, match_arm_list, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(MatchExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_match_guard(&mut self, node: ast::MatchGuard) -> Option> { - let condition = node.condition().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_match_guard( + &mut self, + node: &ast::MatchGuard, + ) -> Option> { + let condition = node.condition().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::MatchGuard { id: TrapId::Star, condition, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(MatchGuard, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_meta(&mut self, node: ast::Meta) -> Option> { - let expr = node.expr().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_meta(&mut self, node: &ast::Meta) -> Option> { + let expr = node.expr().and_then(|x| self.emit_expr(&x)); let is_unsafe = node.unsafe_token().is_some(); - let path = node.path().and_then(|x| self.emit_path(x)); - let token_tree = node.token_tree().and_then(|x| self.emit_token_tree(x)); + let path = node.path().and_then(|x| self.emit_path(&x)); + let token_tree = node.token_tree().and_then(|x| self.emit_token_tree(&x)); let label = self.trap.emit(generated::Meta { id: TrapId::Star, expr, @@ -1466,19 +1768,25 @@ impl Translator<'_> { path, token_tree, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(Meta, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_method_call_expr(&mut self, node: ast::MethodCallExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let arg_list = node.arg_list().and_then(|x| self.emit_arg_list(x)); - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let generic_arg_list = node.generic_arg_list().and_then(|x| self.emit_generic_arg_list(x)); - let identifier = node.name_ref().and_then(|x| self.emit_name_ref(x)); - let receiver = node.receiver().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_method_call_expr( + &mut self, + node: &ast::MethodCallExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let arg_list = node.arg_list().and_then(|x| self.emit_arg_list(&x)); + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let generic_arg_list = node + .generic_arg_list() + .and_then(|x| self.emit_generic_arg_list(&x)); + let identifier = node.name_ref().and_then(|x| self.emit_name_ref(&x)); + let receiver = node.receiver().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::MethodCallExpr { id: TrapId::Star, arg_list, @@ -1487,18 +1795,19 @@ impl Translator<'_> { identifier, receiver, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(MethodCallExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_module(&mut self, node: ast::Module) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let item_list = node.item_list().and_then(|x| self.emit_item_list(x)); - let name = node.name().and_then(|x| self.emit_name(x)); - let visibility = node.visibility().and_then(|x| self.emit_visibility(x)); + pub(crate) fn emit_module(&mut self, node: &ast::Module) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let item_list = node.item_list().and_then(|x| self.emit_item_list(&x)); + let name = node.name().and_then(|x| self.emit_name(&x)); + let visibility = node.visibility().and_then(|x| self.emit_visibility(&x)); let label = self.trap.emit(generated::Module { id: TrapId::Star, attrs, @@ -1506,204 +1815,242 @@ impl Translator<'_> { name, visibility, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(Module, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_name(&mut self, node: ast::Name) -> Option> { + pub(crate) fn emit_name(&mut self, node: &ast::Name) -> Option> { let text = node.try_get_text(); let label = self.trap.emit(generated::Name { id: TrapId::Star, text, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(Name, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_name_ref(&mut self, node: ast::NameRef) -> Option> { + pub(crate) fn emit_name_ref( + &mut self, + node: &ast::NameRef, + ) -> Option> { let text = node.try_get_text(); let label = self.trap.emit(generated::NameRef { id: TrapId::Star, text, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(NameRef, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_never_type(&mut self, node: ast::NeverType) -> Option> { - let label = self.trap.emit(generated::NeverTypeRepr { - id: TrapId::Star, - }); - self.emit_location(label, &node); + pub(crate) fn emit_never_type( + &mut self, + node: &ast::NeverType, + ) -> Option> { + let label = self + .trap + .emit(generated::NeverTypeRepr { id: TrapId::Star }); + self.emit_location(label, node); emit_detached!(NeverTypeRepr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_offset_of_expr(&mut self, node: ast::OffsetOfExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let fields = node.fields().filter_map(|x| self.emit_name_ref(x)).collect(); - let type_repr = node.ty().and_then(|x| self.emit_type(x)); + pub(crate) fn emit_offset_of_expr( + &mut self, + node: &ast::OffsetOfExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let fields = node + .fields() + .filter_map(|x| self.emit_name_ref(&x)) + .collect(); + let type_repr = node.ty().and_then(|x| self.emit_type(&x)); let label = self.trap.emit(generated::OffsetOfExpr { id: TrapId::Star, attrs, fields, type_repr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(OffsetOfExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_or_pat(&mut self, node: ast::OrPat) -> Option> { - let pats = node.pats().filter_map(|x| self.emit_pat(x)).collect(); + pub(crate) fn emit_or_pat(&mut self, node: &ast::OrPat) -> Option> { + let pats = node.pats().filter_map(|x| self.emit_pat(&x)).collect(); let label = self.trap.emit(generated::OrPat { id: TrapId::Star, pats, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(OrPat, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_param(&mut self, node: ast::Param) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let pat = node.pat().and_then(|x| self.emit_pat(x)); - let type_repr = node.ty().and_then(|x| self.emit_type(x)); + pub(crate) fn emit_param(&mut self, node: &ast::Param) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let pat = node.pat().and_then(|x| self.emit_pat(&x)); + let type_repr = node.ty().and_then(|x| self.emit_type(&x)); let label = self.trap.emit(generated::Param { id: TrapId::Star, attrs, pat, type_repr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(Param, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_param_list(&mut self, node: ast::ParamList) -> Option> { - let params = node.params().filter_map(|x| self.emit_param(x)).collect(); - let self_param = node.self_param().and_then(|x| self.emit_self_param(x)); + pub(crate) fn emit_param_list( + &mut self, + node: &ast::ParamList, + ) -> Option> { + let params = node.params().filter_map(|x| self.emit_param(&x)).collect(); + let self_param = node.self_param().and_then(|x| self.emit_self_param(&x)); let label = self.trap.emit(generated::ParamList { id: TrapId::Star, params, self_param, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ParamList, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_paren_expr(&mut self, node: ast::ParenExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let expr = node.expr().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_paren_expr( + &mut self, + node: &ast::ParenExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let expr = node.expr().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::ParenExpr { id: TrapId::Star, attrs, expr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ParenExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_paren_pat(&mut self, node: ast::ParenPat) -> Option> { - let pat = node.pat().and_then(|x| self.emit_pat(x)); + pub(crate) fn emit_paren_pat( + &mut self, + node: &ast::ParenPat, + ) -> Option> { + let pat = node.pat().and_then(|x| self.emit_pat(&x)); let label = self.trap.emit(generated::ParenPat { id: TrapId::Star, pat, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ParenPat, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_paren_type(&mut self, node: ast::ParenType) -> Option> { - let type_repr = node.ty().and_then(|x| self.emit_type(x)); + pub(crate) fn emit_paren_type( + &mut self, + node: &ast::ParenType, + ) -> Option> { + let type_repr = node.ty().and_then(|x| self.emit_type(&x)); let label = self.trap.emit(generated::ParenTypeRepr { id: TrapId::Star, type_repr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ParenTypeRepr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_parenthesized_arg_list(&mut self, node: ast::ParenthesizedArgList) -> Option> { - let type_args = node.type_args().filter_map(|x| self.emit_type_arg(x)).collect(); + pub(crate) fn emit_parenthesized_arg_list( + &mut self, + node: &ast::ParenthesizedArgList, + ) -> Option> { + let type_args = node + .type_args() + .filter_map(|x| self.emit_type_arg(&x)) + .collect(); let label = self.trap.emit(generated::ParenthesizedArgList { id: TrapId::Star, type_args, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ParenthesizedArgList, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_path(&mut self, node: ast::Path) -> Option> { - let qualifier = node.qualifier().and_then(|x| self.emit_path(x)); - let segment = node.segment().and_then(|x| self.emit_path_segment(x)); + pub(crate) fn emit_path(&mut self, node: &ast::Path) -> Option> { + let qualifier = node.qualifier().and_then(|x| self.emit_path(&x)); + let segment = node.segment().and_then(|x| self.emit_path_segment(&x)); let label = self.trap.emit(generated::Path { id: TrapId::Star, qualifier, segment, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(Path, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_path_expr(&mut self, node: ast::PathExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let path = node.path().and_then(|x| self.emit_path(x)); + pub(crate) fn emit_path_expr( + &mut self, + node: &ast::PathExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let path = node.path().and_then(|x| self.emit_path(&x)); let label = self.trap.emit(generated::PathExpr { id: TrapId::Star, attrs, path, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(PathExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_path_pat(&mut self, node: ast::PathPat) -> Option> { - let path = node.path().and_then(|x| self.emit_path(x)); + pub(crate) fn emit_path_pat( + &mut self, + node: &ast::PathPat, + ) -> Option> { + let path = node.path().and_then(|x| self.emit_path(&x)); let label = self.trap.emit(generated::PathPat { id: TrapId::Star, path, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(PathPat, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); - Some(label) - } - - pub(crate) fn emit_path_segment(&mut self, node: ast::PathSegment) -> Option> { - let generic_arg_list = node.generic_arg_list().and_then(|x| self.emit_generic_arg_list(x)); - let identifier = node.name_ref().and_then(|x| self.emit_name_ref(x)); - let parenthesized_arg_list = node.parenthesized_arg_list().and_then(|x| self.emit_parenthesized_arg_list(x)); - let ret_type = node.ret_type().and_then(|x| self.emit_ret_type(x)); - let return_type_syntax = node.return_type_syntax().and_then(|x| self.emit_return_type_syntax(x)); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); + Some(label) + } + pub(crate) fn emit_path_segment( + &mut self, + node: &ast::PathSegment, + ) -> Option> { + let generic_arg_list = node + .generic_arg_list() + .and_then(|x| self.emit_generic_arg_list(&x)); + let identifier = node.name_ref().and_then(|x| self.emit_name_ref(&x)); + let parenthesized_arg_list = node + .parenthesized_arg_list() + .and_then(|x| self.emit_parenthesized_arg_list(&x)); + let ret_type = node.ret_type().and_then(|x| self.emit_ret_type(&x)); + let return_type_syntax = node + .return_type_syntax() + .and_then(|x| self.emit_return_type_syntax(&x)); let label = self.trap.emit(generated::PathSegment { id: TrapId::Star, generic_arg_list, @@ -1712,28 +2059,34 @@ impl Translator<'_> { ret_type, return_type_syntax, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(PathSegment, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_path_type(&mut self, node: ast::PathType) -> Option> { - let path = node.path().and_then(|x| self.emit_path(x)); + pub(crate) fn emit_path_type( + &mut self, + node: &ast::PathType, + ) -> Option> { + let path = node.path().and_then(|x| self.emit_path(&x)); let label = self.trap.emit(generated::PathTypeRepr { id: TrapId::Star, path, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(PathTypeRepr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_prefix_expr(&mut self, node: ast::PrefixExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let expr = node.expr().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_prefix_expr( + &mut self, + node: &ast::PrefixExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let expr = node.expr().and_then(|x| self.emit_expr(&x)); let operator_name = node.try_get_text(); let label = self.trap.emit(generated::PrefixExpr { id: TrapId::Star, @@ -1741,34 +2094,40 @@ impl Translator<'_> { expr, operator_name, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(PrefixExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_ptr_type(&mut self, node: ast::PtrType) -> Option> { + pub(crate) fn emit_ptr_type( + &mut self, + node: &ast::PtrType, + ) -> Option> { let is_const = node.const_token().is_some(); let is_mut = node.mut_token().is_some(); - let type_repr = node.ty().and_then(|x| self.emit_type(x)); + let type_repr = node.ty().and_then(|x| self.emit_type(&x)); let label = self.trap.emit(generated::PtrTypeRepr { id: TrapId::Star, is_const, is_mut, type_repr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(PtrTypeRepr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_range_expr(&mut self, node: ast::RangeExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let end = node.end().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_range_expr( + &mut self, + node: &ast::RangeExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let end = node.end().and_then(|x| self.emit_expr(&x)); let operator_name = node.try_get_text(); - let start = node.start().and_then(|x| self.emit_expr(x)); + let start = node.start().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::RangeExpr { id: TrapId::Star, attrs, @@ -1776,84 +2135,105 @@ impl Translator<'_> { operator_name, start, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(RangeExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_range_pat(&mut self, node: ast::RangePat) -> Option> { - let end = node.end().and_then(|x| self.emit_pat(x)); + pub(crate) fn emit_range_pat( + &mut self, + node: &ast::RangePat, + ) -> Option> { + let end = node.end().and_then(|x| self.emit_pat(&x)); let operator_name = node.try_get_text(); - let start = node.start().and_then(|x| self.emit_pat(x)); + let start = node.start().and_then(|x| self.emit_pat(&x)); let label = self.trap.emit(generated::RangePat { id: TrapId::Star, end, operator_name, start, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(RangePat, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_record_expr(&mut self, node: ast::RecordExpr) -> Option> { - let path = node.path().and_then(|x| self.emit_path(x)); - let struct_expr_field_list = node.record_expr_field_list().and_then(|x| self.emit_record_expr_field_list(x)); + pub(crate) fn emit_record_expr( + &mut self, + node: &ast::RecordExpr, + ) -> Option> { + let path = node.path().and_then(|x| self.emit_path(&x)); + let struct_expr_field_list = node + .record_expr_field_list() + .and_then(|x| self.emit_record_expr_field_list(&x)); let label = self.trap.emit(generated::StructExpr { id: TrapId::Star, path, struct_expr_field_list, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(StructExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_record_expr_field(&mut self, node: ast::RecordExprField) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let expr = node.expr().and_then(|x| self.emit_expr(x)); - let identifier = node.name_ref().and_then(|x| self.emit_name_ref(x)); + pub(crate) fn emit_record_expr_field( + &mut self, + node: &ast::RecordExprField, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let expr = node.expr().and_then(|x| self.emit_expr(&x)); + let identifier = node.name_ref().and_then(|x| self.emit_name_ref(&x)); let label = self.trap.emit(generated::StructExprField { id: TrapId::Star, attrs, expr, identifier, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(StructExprField, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_record_expr_field_list(&mut self, node: ast::RecordExprFieldList) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let fields = node.fields().filter_map(|x| self.emit_record_expr_field(x)).collect(); - let spread = node.spread().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_record_expr_field_list( + &mut self, + node: &ast::RecordExprFieldList, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let fields = node + .fields() + .filter_map(|x| self.emit_record_expr_field(&x)) + .collect(); + let spread = node.spread().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::StructExprFieldList { id: TrapId::Star, attrs, fields, spread, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(StructExprFieldList, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_record_field(&mut self, node: ast::RecordField) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let default = node.expr().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_record_field( + &mut self, + node: &ast::RecordField, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let default = node.expr().and_then(|x| self.emit_expr(&x)); let is_unsafe = node.unsafe_token().is_some(); - let name = node.name().and_then(|x| self.emit_name(x)); - let type_repr = node.ty().and_then(|x| self.emit_type(x)); - let visibility = node.visibility().and_then(|x| self.emit_visibility(x)); + let name = node.name().and_then(|x| self.emit_name(&x)); + let type_repr = node.ty().and_then(|x| self.emit_type(&x)); + let visibility = node.visibility().and_then(|x| self.emit_visibility(&x)); let label = self.trap.emit(generated::StructField { id: TrapId::Star, attrs, @@ -1863,73 +2243,95 @@ impl Translator<'_> { type_repr, visibility, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(StructField, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_record_field_list(&mut self, node: ast::RecordFieldList) -> Option> { - let fields = node.fields().filter_map(|x| self.emit_record_field(x)).collect(); + pub(crate) fn emit_record_field_list( + &mut self, + node: &ast::RecordFieldList, + ) -> Option> { + let fields = node + .fields() + .filter_map(|x| self.emit_record_field(&x)) + .collect(); let label = self.trap.emit(generated::StructFieldList { id: TrapId::Star, fields, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(StructFieldList, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_record_pat(&mut self, node: ast::RecordPat) -> Option> { - let path = node.path().and_then(|x| self.emit_path(x)); - let struct_pat_field_list = node.record_pat_field_list().and_then(|x| self.emit_record_pat_field_list(x)); + pub(crate) fn emit_record_pat( + &mut self, + node: &ast::RecordPat, + ) -> Option> { + let path = node.path().and_then(|x| self.emit_path(&x)); + let struct_pat_field_list = node + .record_pat_field_list() + .and_then(|x| self.emit_record_pat_field_list(&x)); let label = self.trap.emit(generated::StructPat { id: TrapId::Star, path, struct_pat_field_list, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(StructPat, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_record_pat_field(&mut self, node: ast::RecordPatField) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let identifier = node.name_ref().and_then(|x| self.emit_name_ref(x)); - let pat = node.pat().and_then(|x| self.emit_pat(x)); + pub(crate) fn emit_record_pat_field( + &mut self, + node: &ast::RecordPatField, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let identifier = node.name_ref().and_then(|x| self.emit_name_ref(&x)); + let pat = node.pat().and_then(|x| self.emit_pat(&x)); let label = self.trap.emit(generated::StructPatField { id: TrapId::Star, attrs, identifier, pat, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(StructPatField, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); - Some(label) - } - - pub(crate) fn emit_record_pat_field_list(&mut self, node: ast::RecordPatFieldList) -> Option> { - let fields = node.fields().filter_map(|x| self.emit_record_pat_field(x)).collect(); - let rest_pat = node.rest_pat().and_then(|x| self.emit_rest_pat(x)); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); + Some(label) + } + pub(crate) fn emit_record_pat_field_list( + &mut self, + node: &ast::RecordPatFieldList, + ) -> Option> { + let fields = node + .fields() + .filter_map(|x| self.emit_record_pat_field(&x)) + .collect(); + let rest_pat = node.rest_pat().and_then(|x| self.emit_rest_pat(&x)); let label = self.trap.emit(generated::StructPatFieldList { id: TrapId::Star, fields, rest_pat, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(StructPatFieldList, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_ref_expr(&mut self, node: ast::RefExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let expr = node.expr().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_ref_expr( + &mut self, + node: &ast::RefExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let expr = node.expr().and_then(|x| self.emit_expr(&x)); let is_const = node.const_token().is_some(); let is_mut = node.mut_token().is_some(); let is_raw = node.raw_token().is_some(); @@ -1941,112 +2343,128 @@ impl Translator<'_> { is_mut, is_raw, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(RefExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_ref_pat(&mut self, node: ast::RefPat) -> Option> { + pub(crate) fn emit_ref_pat(&mut self, node: &ast::RefPat) -> Option> { let is_mut = node.mut_token().is_some(); - let pat = node.pat().and_then(|x| self.emit_pat(x)); + let pat = node.pat().and_then(|x| self.emit_pat(&x)); let label = self.trap.emit(generated::RefPat { id: TrapId::Star, is_mut, pat, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(RefPat, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_ref_type(&mut self, node: ast::RefType) -> Option> { + pub(crate) fn emit_ref_type( + &mut self, + node: &ast::RefType, + ) -> Option> { let is_mut = node.mut_token().is_some(); - let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(x)); - let type_repr = node.ty().and_then(|x| self.emit_type(x)); + let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(&x)); + let type_repr = node.ty().and_then(|x| self.emit_type(&x)); let label = self.trap.emit(generated::RefTypeRepr { id: TrapId::Star, is_mut, lifetime, type_repr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(RefTypeRepr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_rename(&mut self, node: ast::Rename) -> Option> { - let name = node.name().and_then(|x| self.emit_name(x)); + pub(crate) fn emit_rename(&mut self, node: &ast::Rename) -> Option> { + let name = node.name().and_then(|x| self.emit_name(&x)); let label = self.trap.emit(generated::Rename { id: TrapId::Star, name, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(Rename, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_rest_pat(&mut self, node: ast::RestPat) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); + pub(crate) fn emit_rest_pat( + &mut self, + node: &ast::RestPat, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); let label = self.trap.emit(generated::RestPat { id: TrapId::Star, attrs, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(RestPat, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_ret_type(&mut self, node: ast::RetType) -> Option> { - let type_repr = node.ty().and_then(|x| self.emit_type(x)); + pub(crate) fn emit_ret_type( + &mut self, + node: &ast::RetType, + ) -> Option> { + let type_repr = node.ty().and_then(|x| self.emit_type(&x)); let label = self.trap.emit(generated::RetTypeRepr { id: TrapId::Star, type_repr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(RetTypeRepr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_return_expr(&mut self, node: ast::ReturnExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let expr = node.expr().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_return_expr( + &mut self, + node: &ast::ReturnExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let expr = node.expr().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::ReturnExpr { id: TrapId::Star, attrs, expr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(ReturnExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_return_type_syntax(&mut self, node: ast::ReturnTypeSyntax) -> Option> { - let label = self.trap.emit(generated::ReturnTypeSyntax { - id: TrapId::Star, - }); - self.emit_location(label, &node); + pub(crate) fn emit_return_type_syntax( + &mut self, + node: &ast::ReturnTypeSyntax, + ) -> Option> { + let label = self + .trap + .emit(generated::ReturnTypeSyntax { id: TrapId::Star }); + self.emit_location(label, node); emit_detached!(ReturnTypeSyntax, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_self_param(&mut self, node: ast::SelfParam) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); + pub(crate) fn emit_self_param( + &mut self, + node: &ast::SelfParam, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); let is_ref = node.amp_token().is_some(); let is_mut = node.mut_token().is_some(); - let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(x)); - let name = node.name().and_then(|x| self.emit_name(x)); - let type_repr = node.ty().and_then(|x| self.emit_type(x)); + let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(&x)); + let name = node.name().and_then(|x| self.emit_name(&x)); + let type_repr = node.ty().and_then(|x| self.emit_type(&x)); let label = self.trap.emit(generated::SelfParam { id: TrapId::Star, attrs, @@ -2056,61 +2474,70 @@ impl Translator<'_> { name, type_repr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(SelfParam, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_slice_pat(&mut self, node: ast::SlicePat) -> Option> { - let pats = node.pats().filter_map(|x| self.emit_pat(x)).collect(); + pub(crate) fn emit_slice_pat( + &mut self, + node: &ast::SlicePat, + ) -> Option> { + let pats = node.pats().filter_map(|x| self.emit_pat(&x)).collect(); let label = self.trap.emit(generated::SlicePat { id: TrapId::Star, pats, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(SlicePat, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_slice_type(&mut self, node: ast::SliceType) -> Option> { - let type_repr = node.ty().and_then(|x| self.emit_type(x)); + pub(crate) fn emit_slice_type( + &mut self, + node: &ast::SliceType, + ) -> Option> { + let type_repr = node.ty().and_then(|x| self.emit_type(&x)); let label = self.trap.emit(generated::SliceTypeRepr { id: TrapId::Star, type_repr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(SliceTypeRepr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_source_file(&mut self, node: ast::SourceFile) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let items = node.items().filter_map(|x| self.emit_item(x)).collect(); + pub(crate) fn emit_source_file( + &mut self, + node: &ast::SourceFile, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let items = node.items().filter_map(|x| self.emit_item(&x)).collect(); let label = self.trap.emit(generated::SourceFile { id: TrapId::Star, attrs, items, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(SourceFile, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_static(&mut self, node: ast::Static) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let body = node.body().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_static(&mut self, node: &ast::Static) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let body = node.body().and_then(|x| self.emit_expr(&x)); let is_mut = node.mut_token().is_some(); let is_static = node.static_token().is_some(); let is_unsafe = node.unsafe_token().is_some(); - let name = node.name().and_then(|x| self.emit_name(x)); - let type_repr = node.ty().and_then(|x| self.emit_type(x)); - let visibility = node.visibility().and_then(|x| self.emit_visibility(x)); + let name = node.name().and_then(|x| self.emit_name(&x)); + let type_repr = node.ty().and_then(|x| self.emit_type(&x)); + let visibility = node.visibility().and_then(|x| self.emit_visibility(&x)); let label = self.trap.emit(generated::Static { id: TrapId::Star, attrs, @@ -2122,37 +2549,47 @@ impl Translator<'_> { type_repr, visibility, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(Static, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_stmt_list(&mut self, node: ast::StmtList) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let statements = node.statements().filter_map(|x| self.emit_stmt(x)).collect(); - let tail_expr = node.tail_expr().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_stmt_list( + &mut self, + node: &ast::StmtList, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let statements = node + .statements() + .filter_map(|x| self.emit_stmt(&x)) + .collect(); + let tail_expr = node.tail_expr().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::StmtList { id: TrapId::Star, attrs, statements, tail_expr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(StmtList, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); - Some(label) - } - - pub(crate) fn emit_struct(&mut self, node: ast::Struct) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let field_list = node.field_list().and_then(|x| self.emit_field_list(x)); - let generic_param_list = node.generic_param_list().and_then(|x| self.emit_generic_param_list(x)); - let name = node.name().and_then(|x| self.emit_name(x)); - let visibility = node.visibility().and_then(|x| self.emit_visibility(x)); - let where_clause = node.where_clause().and_then(|x| self.emit_where_clause(x)); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); + Some(label) + } + pub(crate) fn emit_struct(&mut self, node: &ast::Struct) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let field_list = node.field_list().and_then(|x| self.emit_field_list(&x)); + let generic_param_list = node + .generic_param_list() + .and_then(|x| self.emit_generic_param_list(&x)); + let name = node.name().and_then(|x| self.emit_name(&x)); + let visibility = node.visibility().and_then(|x| self.emit_visibility(&x)); + let where_clause = node.where_clause().and_then(|x| self.emit_where_clause(&x)); let label = self.trap.emit(generated::Struct { id: TrapId::Star, attrs, @@ -2162,33 +2599,40 @@ impl Translator<'_> { visibility, where_clause, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(Struct, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_token_tree(&mut self, node: ast::TokenTree) -> Option> { - let label = self.trap.emit(generated::TokenTree { - id: TrapId::Star, - }); - self.emit_location(label, &node); + pub(crate) fn emit_token_tree( + &mut self, + node: &ast::TokenTree, + ) -> Option> { + let label = self.trap.emit(generated::TokenTree { id: TrapId::Star }); + self.emit_location(label, node); emit_detached!(TokenTree, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_trait(&mut self, node: ast::Trait) -> Option> { - if self.should_be_excluded(&node) { return None; } - let assoc_item_list = node.assoc_item_list().and_then(|x| self.emit_assoc_item_list(x)); - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let generic_param_list = node.generic_param_list().and_then(|x| self.emit_generic_param_list(x)); + pub(crate) fn emit_trait(&mut self, node: &ast::Trait) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let assoc_item_list = node + .assoc_item_list() + .and_then(|x| self.emit_assoc_item_list(&x)); + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let generic_param_list = node + .generic_param_list() + .and_then(|x| self.emit_generic_param_list(&x)); let is_auto = node.auto_token().is_some(); let is_unsafe = node.unsafe_token().is_some(); - let name = node.name().and_then(|x| self.emit_name(x)); - let type_bound_list = node.type_bound_list().and_then(|x| self.emit_type_bound_list(x)); - let visibility = node.visibility().and_then(|x| self.emit_visibility(x)); - let where_clause = node.where_clause().and_then(|x| self.emit_where_clause(x)); + let name = node.name().and_then(|x| self.emit_name(&x)); + let type_bound_list = node + .type_bound_list() + .and_then(|x| self.emit_type_bound_list(&x)); + let visibility = node.visibility().and_then(|x| self.emit_visibility(&x)); + let where_clause = node.where_clause().and_then(|x| self.emit_where_clause(&x)); let label = self.trap.emit(generated::Trait { id: TrapId::Star, assoc_item_list, @@ -2201,20 +2645,28 @@ impl Translator<'_> { visibility, where_clause, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(Trait, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); - Some(label) - } - - pub(crate) fn emit_trait_alias(&mut self, node: ast::TraitAlias) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let generic_param_list = node.generic_param_list().and_then(|x| self.emit_generic_param_list(x)); - let name = node.name().and_then(|x| self.emit_name(x)); - let type_bound_list = node.type_bound_list().and_then(|x| self.emit_type_bound_list(x)); - let visibility = node.visibility().and_then(|x| self.emit_visibility(x)); - let where_clause = node.where_clause().and_then(|x| self.emit_where_clause(x)); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); + Some(label) + } + pub(crate) fn emit_trait_alias( + &mut self, + node: &ast::TraitAlias, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let generic_param_list = node + .generic_param_list() + .and_then(|x| self.emit_generic_param_list(&x)); + let name = node.name().and_then(|x| self.emit_name(&x)); + let type_bound_list = node + .type_bound_list() + .and_then(|x| self.emit_type_bound_list(&x)); + let visibility = node.visibility().and_then(|x| self.emit_visibility(&x)); + let where_clause = node.where_clause().and_then(|x| self.emit_where_clause(&x)); let label = self.trap.emit(generated::TraitAlias { id: TrapId::Star, attrs, @@ -2224,119 +2676,150 @@ impl Translator<'_> { visibility, where_clause, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(TraitAlias, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_try_expr(&mut self, node: ast::TryExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let expr = node.expr().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_try_expr( + &mut self, + node: &ast::TryExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let expr = node.expr().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::TryExpr { id: TrapId::Star, attrs, expr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(TryExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_tuple_expr(&mut self, node: ast::TupleExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let fields = node.fields().filter_map(|x| self.emit_expr(x)).collect(); + pub(crate) fn emit_tuple_expr( + &mut self, + node: &ast::TupleExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let fields = node.fields().filter_map(|x| self.emit_expr(&x)).collect(); let label = self.trap.emit(generated::TupleExpr { id: TrapId::Star, attrs, fields, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(TupleExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_tuple_field(&mut self, node: ast::TupleField) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let type_repr = node.ty().and_then(|x| self.emit_type(x)); - let visibility = node.visibility().and_then(|x| self.emit_visibility(x)); + pub(crate) fn emit_tuple_field( + &mut self, + node: &ast::TupleField, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let type_repr = node.ty().and_then(|x| self.emit_type(&x)); + let visibility = node.visibility().and_then(|x| self.emit_visibility(&x)); let label = self.trap.emit(generated::TupleField { id: TrapId::Star, attrs, type_repr, visibility, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(TupleField, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_tuple_field_list(&mut self, node: ast::TupleFieldList) -> Option> { - let fields = node.fields().filter_map(|x| self.emit_tuple_field(x)).collect(); + pub(crate) fn emit_tuple_field_list( + &mut self, + node: &ast::TupleFieldList, + ) -> Option> { + let fields = node + .fields() + .filter_map(|x| self.emit_tuple_field(&x)) + .collect(); let label = self.trap.emit(generated::TupleFieldList { id: TrapId::Star, fields, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(TupleFieldList, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_tuple_pat(&mut self, node: ast::TuplePat) -> Option> { - let fields = node.fields().filter_map(|x| self.emit_pat(x)).collect(); + pub(crate) fn emit_tuple_pat( + &mut self, + node: &ast::TuplePat, + ) -> Option> { + let fields = node.fields().filter_map(|x| self.emit_pat(&x)).collect(); let label = self.trap.emit(generated::TuplePat { id: TrapId::Star, fields, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(TuplePat, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_tuple_struct_pat(&mut self, node: ast::TupleStructPat) -> Option> { - let fields = node.fields().filter_map(|x| self.emit_pat(x)).collect(); - let path = node.path().and_then(|x| self.emit_path(x)); + pub(crate) fn emit_tuple_struct_pat( + &mut self, + node: &ast::TupleStructPat, + ) -> Option> { + let fields = node.fields().filter_map(|x| self.emit_pat(&x)).collect(); + let path = node.path().and_then(|x| self.emit_path(&x)); let label = self.trap.emit(generated::TupleStructPat { id: TrapId::Star, fields, path, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(TupleStructPat, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_tuple_type(&mut self, node: ast::TupleType) -> Option> { - let fields = node.fields().filter_map(|x| self.emit_type(x)).collect(); + pub(crate) fn emit_tuple_type( + &mut self, + node: &ast::TupleType, + ) -> Option> { + let fields = node.fields().filter_map(|x| self.emit_type(&x)).collect(); let label = self.trap.emit(generated::TupleTypeRepr { id: TrapId::Star, fields, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(TupleTypeRepr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_type_alias(&mut self, node: ast::TypeAlias) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let generic_param_list = node.generic_param_list().and_then(|x| self.emit_generic_param_list(x)); + pub(crate) fn emit_type_alias( + &mut self, + node: &ast::TypeAlias, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let generic_param_list = node + .generic_param_list() + .and_then(|x| self.emit_generic_param_list(&x)); let is_default = node.default_token().is_some(); - let name = node.name().and_then(|x| self.emit_name(x)); - let type_repr = node.ty().and_then(|x| self.emit_type(x)); - let type_bound_list = node.type_bound_list().and_then(|x| self.emit_type_bound_list(x)); - let visibility = node.visibility().and_then(|x| self.emit_visibility(x)); - let where_clause = node.where_clause().and_then(|x| self.emit_where_clause(x)); + let name = node.name().and_then(|x| self.emit_name(&x)); + let type_repr = node.ty().and_then(|x| self.emit_type(&x)); + let type_bound_list = node + .type_bound_list() + .and_then(|x| self.emit_type_bound_list(&x)); + let visibility = node.visibility().and_then(|x| self.emit_visibility(&x)); + let where_clause = node.where_clause().and_then(|x| self.emit_where_clause(&x)); let label = self.trap.emit(generated::TypeAlias { id: TrapId::Star, attrs, @@ -2348,30 +2831,36 @@ impl Translator<'_> { visibility, where_clause, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(TypeAlias, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_type_arg(&mut self, node: ast::TypeArg) -> Option> { - let type_repr = node.ty().and_then(|x| self.emit_type(x)); + pub(crate) fn emit_type_arg( + &mut self, + node: &ast::TypeArg, + ) -> Option> { + let type_repr = node.ty().and_then(|x| self.emit_type(&x)); let label = self.trap.emit(generated::TypeArg { id: TrapId::Star, type_repr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(TypeArg, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_type_bound(&mut self, node: ast::TypeBound) -> Option> { + pub(crate) fn emit_type_bound( + &mut self, + node: &ast::TypeBound, + ) -> Option> { let is_async = node.async_token().is_some(); let is_const = node.const_token().is_some(); - let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(x)); - let type_repr = node.ty().and_then(|x| self.emit_type(x)); - let use_bound_generic_args = node.use_bound_generic_args().and_then(|x| self.emit_use_bound_generic_args(x)); + let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(&x)); + let type_repr = node.ty().and_then(|x| self.emit_type(&x)); + let use_bound_generic_args = node + .use_bound_generic_args() + .and_then(|x| self.emit_use_bound_generic_args(&x)); let label = self.trap.emit(generated::TypeBound { id: TrapId::Star, is_async, @@ -2380,30 +2869,41 @@ impl Translator<'_> { type_repr, use_bound_generic_args, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(TypeBound, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_type_bound_list(&mut self, node: ast::TypeBoundList) -> Option> { - let bounds = node.bounds().filter_map(|x| self.emit_type_bound(x)).collect(); + pub(crate) fn emit_type_bound_list( + &mut self, + node: &ast::TypeBoundList, + ) -> Option> { + let bounds = node + .bounds() + .filter_map(|x| self.emit_type_bound(&x)) + .collect(); let label = self.trap.emit(generated::TypeBoundList { id: TrapId::Star, bounds, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(TypeBoundList, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_type_param(&mut self, node: ast::TypeParam) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let default_type = node.default_type().and_then(|x| self.emit_type(x)); - let name = node.name().and_then(|x| self.emit_name(x)); - let type_bound_list = node.type_bound_list().and_then(|x| self.emit_type_bound_list(x)); + pub(crate) fn emit_type_param( + &mut self, + node: &ast::TypeParam, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let default_type = node.default_type().and_then(|x| self.emit_type(&x)); + let name = node.name().and_then(|x| self.emit_name(&x)); + let type_bound_list = node + .type_bound_list() + .and_then(|x| self.emit_type_bound_list(&x)); let label = self.trap.emit(generated::TypeParam { id: TrapId::Star, attrs, @@ -2411,33 +2911,42 @@ impl Translator<'_> { name, type_bound_list, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(TypeParam, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_underscore_expr(&mut self, node: ast::UnderscoreExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); + pub(crate) fn emit_underscore_expr( + &mut self, + node: &ast::UnderscoreExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); let label = self.trap.emit(generated::UnderscoreExpr { id: TrapId::Star, attrs, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(UnderscoreExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); - Some(label) - } - - pub(crate) fn emit_union(&mut self, node: ast::Union) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let generic_param_list = node.generic_param_list().and_then(|x| self.emit_generic_param_list(x)); - let name = node.name().and_then(|x| self.emit_name(x)); - let struct_field_list = node.record_field_list().and_then(|x| self.emit_record_field_list(x)); - let visibility = node.visibility().and_then(|x| self.emit_visibility(x)); - let where_clause = node.where_clause().and_then(|x| self.emit_where_clause(x)); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); + Some(label) + } + pub(crate) fn emit_union(&mut self, node: &ast::Union) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let generic_param_list = node + .generic_param_list() + .and_then(|x| self.emit_generic_param_list(&x)); + let name = node.name().and_then(|x| self.emit_name(&x)); + let struct_field_list = node + .record_field_list() + .and_then(|x| self.emit_record_field_list(&x)); + let visibility = node.visibility().and_then(|x| self.emit_visibility(&x)); + let where_clause = node.where_clause().and_then(|x| self.emit_where_clause(&x)); let label = self.trap.emit(generated::Union { id: TrapId::Star, attrs, @@ -2447,46 +2956,56 @@ impl Translator<'_> { visibility, where_clause, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(Union, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_use(&mut self, node: ast::Use) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let use_tree = node.use_tree().and_then(|x| self.emit_use_tree(x)); - let visibility = node.visibility().and_then(|x| self.emit_visibility(x)); + pub(crate) fn emit_use(&mut self, node: &ast::Use) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let use_tree = node.use_tree().and_then(|x| self.emit_use_tree(&x)); + let visibility = node.visibility().and_then(|x| self.emit_visibility(&x)); let label = self.trap.emit(generated::Use { id: TrapId::Star, attrs, use_tree, visibility, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(Use, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_use_bound_generic_args(&mut self, node: ast::UseBoundGenericArgs) -> Option> { - let use_bound_generic_args = node.use_bound_generic_args().filter_map(|x| self.emit_use_bound_generic_arg(x)).collect(); + pub(crate) fn emit_use_bound_generic_args( + &mut self, + node: &ast::UseBoundGenericArgs, + ) -> Option> { + let use_bound_generic_args = node + .use_bound_generic_args() + .filter_map(|x| self.emit_use_bound_generic_arg(&x)) + .collect(); let label = self.trap.emit(generated::UseBoundGenericArgs { id: TrapId::Star, use_bound_generic_args, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(UseBoundGenericArgs, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_use_tree(&mut self, node: ast::UseTree) -> Option> { + pub(crate) fn emit_use_tree( + &mut self, + node: &ast::UseTree, + ) -> Option> { let is_glob = node.star_token().is_some(); - let path = node.path().and_then(|x| self.emit_path(x)); - let rename = node.rename().and_then(|x| self.emit_rename(x)); - let use_tree_list = node.use_tree_list().and_then(|x| self.emit_use_tree_list(x)); + let path = node.path().and_then(|x| self.emit_path(&x)); + let rename = node.rename().and_then(|x| self.emit_rename(&x)); + let use_tree_list = node + .use_tree_list() + .and_then(|x| self.emit_use_tree_list(&x)); let label = self.trap.emit(generated::UseTree { id: TrapId::Star, is_glob, @@ -2494,31 +3013,40 @@ impl Translator<'_> { rename, use_tree_list, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(UseTree, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_use_tree_list(&mut self, node: ast::UseTreeList) -> Option> { - let use_trees = node.use_trees().filter_map(|x| self.emit_use_tree(x)).collect(); + pub(crate) fn emit_use_tree_list( + &mut self, + node: &ast::UseTreeList, + ) -> Option> { + let use_trees = node + .use_trees() + .filter_map(|x| self.emit_use_tree(&x)) + .collect(); let label = self.trap.emit(generated::UseTreeList { id: TrapId::Star, use_trees, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(UseTreeList, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_variant(&mut self, node: ast::Variant) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let discriminant = node.expr().and_then(|x| self.emit_expr(x)); - let field_list = node.field_list().and_then(|x| self.emit_field_list(x)); - let name = node.name().and_then(|x| self.emit_name(x)); - let visibility = node.visibility().and_then(|x| self.emit_visibility(x)); + pub(crate) fn emit_variant( + &mut self, + node: &ast::Variant, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let discriminant = node.expr().and_then(|x| self.emit_expr(&x)); + let field_list = node.field_list().and_then(|x| self.emit_field_list(&x)); + let name = node.name().and_then(|x| self.emit_name(&x)); + let visibility = node.visibility().and_then(|x| self.emit_visibility(&x)); let label = self.trap.emit(generated::Variant { id: TrapId::Star, attrs, @@ -2527,53 +3055,71 @@ impl Translator<'_> { name, visibility, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(Variant, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_variant_list(&mut self, node: ast::VariantList) -> Option> { - let variants = node.variants().filter_map(|x| self.emit_variant(x)).collect(); + pub(crate) fn emit_variant_list( + &mut self, + node: &ast::VariantList, + ) -> Option> { + let variants = node + .variants() + .filter_map(|x| self.emit_variant(&x)) + .collect(); let label = self.trap.emit(generated::VariantList { id: TrapId::Star, variants, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(VariantList, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_visibility(&mut self, node: ast::Visibility) -> Option> { - let path = node.path().and_then(|x| self.emit_path(x)); + pub(crate) fn emit_visibility( + &mut self, + node: &ast::Visibility, + ) -> Option> { + let path = node.path().and_then(|x| self.emit_path(&x)); let label = self.trap.emit(generated::Visibility { id: TrapId::Star, path, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(Visibility, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_where_clause(&mut self, node: ast::WhereClause) -> Option> { - let predicates = node.predicates().filter_map(|x| self.emit_where_pred(x)).collect(); + pub(crate) fn emit_where_clause( + &mut self, + node: &ast::WhereClause, + ) -> Option> { + let predicates = node + .predicates() + .filter_map(|x| self.emit_where_pred(&x)) + .collect(); let label = self.trap.emit(generated::WhereClause { id: TrapId::Star, predicates, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(WhereClause, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); - Some(label) - } - - pub(crate) fn emit_where_pred(&mut self, node: ast::WherePred) -> Option> { - let generic_param_list = node.generic_param_list().and_then(|x| self.emit_generic_param_list(x)); - let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(x)); - let type_repr = node.ty().and_then(|x| self.emit_type(x)); - let type_bound_list = node.type_bound_list().and_then(|x| self.emit_type_bound_list(x)); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); + Some(label) + } + pub(crate) fn emit_where_pred( + &mut self, + node: &ast::WherePred, + ) -> Option> { + let generic_param_list = node + .generic_param_list() + .and_then(|x| self.emit_generic_param_list(&x)); + let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(&x)); + let type_repr = node.ty().and_then(|x| self.emit_type(&x)); + let type_bound_list = node + .type_bound_list() + .and_then(|x| self.emit_type_bound_list(&x)); let label = self.trap.emit(generated::WherePred { id: TrapId::Star, generic_param_list, @@ -2581,18 +3127,22 @@ impl Translator<'_> { type_repr, type_bound_list, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(WherePred, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_while_expr(&mut self, node: ast::WhileExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let condition = node.condition().and_then(|x| self.emit_expr(x)); - let label = node.label().and_then(|x| self.emit_label(x)); - let loop_body = node.loop_body().and_then(|x| self.emit_block_expr(x)); + pub(crate) fn emit_while_expr( + &mut self, + node: &ast::WhileExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let condition = node.condition().and_then(|x| self.emit_expr(&x)); + let label = node.label().and_then(|x| self.emit_label(&x)); + let loop_body = node.loop_body().and_then(|x| self.emit_block_expr(&x)); let label = self.trap.emit(generated::WhileExpr { id: TrapId::Star, attrs, @@ -2600,49 +3150,57 @@ impl Translator<'_> { label, loop_body, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(WhileExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_wildcard_pat(&mut self, node: ast::WildcardPat) -> Option> { - let label = self.trap.emit(generated::WildcardPat { - id: TrapId::Star, - }); - self.emit_location(label, &node); + pub(crate) fn emit_wildcard_pat( + &mut self, + node: &ast::WildcardPat, + ) -> Option> { + let label = self.trap.emit(generated::WildcardPat { id: TrapId::Star }); + self.emit_location(label, node); emit_detached!(WildcardPat, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_yeet_expr(&mut self, node: ast::YeetExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let expr = node.expr().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_yeet_expr( + &mut self, + node: &ast::YeetExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let expr = node.expr().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::YeetExpr { id: TrapId::Star, attrs, expr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(YeetExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } - - pub(crate) fn emit_yield_expr(&mut self, node: ast::YieldExpr) -> Option> { - if self.should_be_excluded(&node) { return None; } - let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let expr = node.expr().and_then(|x| self.emit_expr(x)); + pub(crate) fn emit_yield_expr( + &mut self, + node: &ast::YieldExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + let attrs = node.attrs().filter_map(|x| self.emit_attr(&x)).collect(); + let expr = node.expr().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::YieldExpr { id: TrapId::Star, attrs, expr, }); - self.emit_location(label, &node); + self.emit_location(label, node); emit_detached!(YieldExpr, self, node, label); - self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } } diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 0ff3e721e231..fd7c9c84bf63 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -1,4 +1,4 @@ -lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll d1cc3cfc9ae558b1cb473e3bfca66e5c424445b98ce343eb6f3050321fe4f8a0 8d00e385230b45360bc6281af01e0f674c58117593fd1b3cb7eb0c8a45517542 +lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll 9452207ba069c4174b9e2903614380c5fb09dccd46e612d6c68ed4305b26ac70 3dbc42e9091ea12456014425df347230471da3afd5e811136a9bc58ba6e5880a lib/codeql/rust/elements/Abi.qll 4c973d28b6d628f5959d1f1cc793704572fd0acaae9a97dfce82ff9d73f73476 250f68350180af080f904cd34cb2af481c5c688dc93edf7365fd0ae99855e893 lib/codeql/rust/elements/Addressable.qll 13011bfd2e1556694c3d440cc34af8527da4df49ad92b62f2939d3699ff2cea5 ddb25935f7553a1a384b1abe2e4b4fa90ab50b952dadec32fd867afcb054f4be lib/codeql/rust/elements/ArgList.qll 661f5100f5d3ef8351452d9058b663a2a5c720eea8cf11bedd628969741486a2 28e424aac01a90fb58cd6f9f83c7e4cf379eea39e636bc0ba07efc818be71c71 @@ -74,7 +74,7 @@ lib/codeql/rust/elements/Impl.qll 6407348d86e73cdb68e414f647260cb82cb90bd40860ba lib/codeql/rust/elements/ImplTraitTypeRepr.qll e2d5a3ade0a9eb7dcb7eec229a235581fe6f293d1cb66b1036f6917c01dff981 49367cada57d1873c9c9d2b752ee6191943a23724059b2674c2d7f85497cff97 lib/codeql/rust/elements/IndexExpr.qll 0e2e9f018d06ae72be0fc4ddbc019a9aacd8a06f42b4c4431760bd149e7f2290 2bcfd557abd53a48e48de7915c4f2089107c62dfb3e732a904848248dfd3727b lib/codeql/rust/elements/InferTypeRepr.qll 0a7b3e92512b2b167a8e04d650e12700dbbb8b646b10694056d622ba2501d299 e5e67b7c1124f430750f186da4642e646badcdcf66490dd328af3e64ac8da9e9 -lib/codeql/rust/elements/Item.qll 59353bf99dea5b464f45ed0dc5cef2db8208e92985d81dcd0b5ea09b638d10e4 2b0b87a4b1a1d9b512a67279d1dec2089d22d1df121585f7a9ca9661d689f74f +lib/codeql/rust/elements/Item.qll b1c41dcdd51fc94248abd52e838d9ca4d6f8c41f22f7bd1fa2e357b99d237b48 b05416c85d9f2ee67dbf25d2b900c270524b626f0b389fe0c9b90543fd05d8e1 lib/codeql/rust/elements/ItemList.qll c33e46a9ee45ccb194a0fe5b30a6ad3bcecb0f51486c94e0191a943710a17a7d 5a69c4e7712b4529681c4406d23dc1b6b9e5b3c03552688c55addab271912ed5 lib/codeql/rust/elements/Label.qll a31d41db351af7f99a55b26cdbbc7f13b4e96b660a74e2f1cc90c17ee8df8d73 689f87cb056c8a2aefe1a0bfc2486a32feb44eb3175803c61961a6aeee53d66e lib/codeql/rust/elements/LabelableExpr.qll 598be487cd051b004ab95cbbc3029100069dc9955851c492029d80f230e56f0d 92c49b3cfdaba07982f950e18a8d62dae4e96f5d9ae0d7d2f4292628361f0ddc @@ -89,7 +89,7 @@ lib/codeql/rust/elements/LiteralPat.qll daffb5f380a47543669c8cc92628b0e0de478c3a lib/codeql/rust/elements/Locatable.qll 2855efa4a469b54e0ca85daa89309a8b991cded6f3f10db361010831ba1e11d3 00c3406d14603f90abea11bf074eaf2c0b623a30e29cf6afc3a247cb58b92f0f lib/codeql/rust/elements/LoopExpr.qll ee171177650fa23eef102a9580765f4b6073a1cc41bab1ec31ad4f84ffe6c2c9 bfcf0cca4dc944270d9748a202829a38c64dfae167c0d3a4202788ceb9daf5f6 lib/codeql/rust/elements/LoopingExpr.qll 7ad7d4bbfd05adc0bb9b4ca90ff3377b8298121ca5360ffb45d5a7a1e20fe37a 964168b2045ee9bad827bba53f10a64d649b3513f2d1e3c17a1b1f11d0fc7f3a -lib/codeql/rust/elements/MacroCall.qll a39a11d387355f59af3007dcbab3282e2b9e3289c1f8f4c6b96154ddb802f8c3 88d4575e462af2aa780219ba1338a790547fdfc1d267c4b84f1b929f4bc08d05 +lib/codeql/rust/elements/MacroCall.qll 16933db15c6c0dbb717ef442f751ad8f63c444f36a12f8d56b8a05a3e5f71d1b ac05cbf50e4b06f39f58817cddbeac6f804c2d1e4f60956a960d63d495e7183d lib/codeql/rust/elements/MacroDef.qll acb39275a1a3257084314a46ad4d8477946130f57e401c70c5949ad6aafc5c5f 6a8a8db12a3ec345fede51ca36e8c6acbdce58c5144388bb94f0706416fa152a lib/codeql/rust/elements/MacroExpr.qll ea9fed13f610bab1a2c4541c994510e0cb806530b60beef0d0c36b23e3b620f0 ad11a6bbd3a229ad97a16049cc6b0f3c8740f9f75ea61bbf4eebb072db9b12d2 lib/codeql/rust/elements/MacroItems.qll 00a5d41f7bb836d952abbd9382e42f72a9d81e65646a15a460b35ccd07a866c6 00efdb4d701b5599d76096f740da9ec157804865267b7e29bc2a214cbf03763e @@ -536,7 +536,7 @@ lib/codeql/rust/elements/internal/generated/Impl.qll 863281820a933a86e6890e31a25 lib/codeql/rust/elements/internal/generated/ImplTraitTypeRepr.qll a1bbebe97a0421f02d2f2ee6c67c7d9107f897b9ba535ec2652bbd27c35d61df ba1f404a5d39cf560e322294194285302fe84074b173e049333fb7f4e5c8b278 lib/codeql/rust/elements/internal/generated/IndexExpr.qll cf951fc40f6690e966b4dc78fa9a6221aa5c6cade44759dcb52254f799292d11 1572e71918cc4e0b7e028331b6d98c9db23100a3646cd3874d1915e06ab6211d lib/codeql/rust/elements/internal/generated/InferTypeRepr.qll dab311562be68a2fcbbe29956b0c3fc66d58348658b734e59f7d080c820093ae ca099ecf9803d3c03b183e4ba19f998e24c881c86027b25037914884ce3de20e -lib/codeql/rust/elements/internal/generated/Item.qll 97f204f27c12689a01fef502a4eec3b587e4eaccd278ec07a34c70a33ce6119d 139af2d44f794d0f91d9aabc3d50d895107c34bd9bcb72457a2e243c14622e51 +lib/codeql/rust/elements/internal/generated/Item.qll 24f388cf0d9a47b38b6cfb93bbe92b9f0cbd0b05e9aa0e6adc1d8056b2cd2f57 66a14e6ff2190e8eebf879b02d0a9a38467e293d6be60685a08542ca1fc34803 lib/codeql/rust/elements/internal/generated/ItemList.qll 73c8398a96d4caa47a2dc114d76c657bd3fcc59e4c63cb397ffac4a85b8cf8ab 540a13ca68d414e3727c3d53c6b1cc97687994d572bc74b3df99ecc8b7d8e791 lib/codeql/rust/elements/internal/generated/Label.qll 6630fe16e9d2de6c759ff2684f5b9950bc8566a1525c835c131ebb26f3eea63e 671143775e811fd88ec90961837a6c0ee4db96e54f42efd80c5ae2571661f108 lib/codeql/rust/elements/internal/generated/LabelableExpr.qll 896fd165b438b60d7169e8f30fa2a94946490c4d284e1bbadfec4253b909ee6c 5c6b029ea0b22cf096df2b15fe6f9384ad3e65b50b253cae7f19a2e5ffb04a58 @@ -551,7 +551,7 @@ lib/codeql/rust/elements/internal/generated/LiteralPat.qll f36b09cf39330019c111e lib/codeql/rust/elements/internal/generated/Locatable.qll c897dc1bdd4dfcb6ded83a4a93332ca3d8f421bae02493ea2a0555023071775e b32d242f8c9480dc9b53c1e13a5cb8dcfce575b0373991c082c1db460a3e37b8 lib/codeql/rust/elements/internal/generated/LoopExpr.qll db6bc87e795c9852426ec661fa2c2c54106805897408b43a67f5b82fb4657afd 1492866ccf8213469be85bbdbcae0142f4e2a39df305d4c0d664229ecd1ebdb9 lib/codeql/rust/elements/internal/generated/LoopingExpr.qll 0792c38d84b8c68114da2bbdfef32ef803b696cb0fd06e10e101756d5c46976c 111fe961fad512722006323c3f2a075fddf59bd3eb5c7afc349835fcec8eb102 -lib/codeql/rust/elements/internal/generated/MacroCall.qll fc8988696493992cc4fdce8c0e5610c54ee92ea52ebb05262338f8b612353f50 188a2d7a484bd402a521787371e64f6e00e928306c8d437e6b19bf890a7aa14e +lib/codeql/rust/elements/internal/generated/MacroCall.qll 8b49d44e6aeac26dc2fc4b9ba03c482c65ebf0cba089d16f9d65e784e48ccbb0 9ecf6e278007adcbdc42ed1c10e7b1c0652b6c64738b780d256c9326afa3b393 lib/codeql/rust/elements/internal/generated/MacroDef.qll e9b3f07ba41aa12a8e0bd6ec1437b26a6c363065ce134b6d059478e96c2273a6 87470dea99da1a6afb3a19565291f9382e851ba864b50a995ac6f29589efbd70 lib/codeql/rust/elements/internal/generated/MacroExpr.qll 03a1daa41866f51e479ac20f51f8406d04e9946b24f3875e3cf75a6b172c3d35 1ae8ca0ee96bd2be32575d87c07cc999a6ff7770151b66c0e3406f9454153786 lib/codeql/rust/elements/internal/generated/MacroItems.qll 894890f61e118b3727d03ca813ae7220a15e45195f2d1d059cb1bba6802128c8 db3854b347f8782a3ec9f9a1439da822727b66f0bd33727383184ab65dbf29ac @@ -579,7 +579,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll c808c9d84dd7800573832b lib/codeql/rust/elements/internal/generated/ParenExpr.qll bc0731505bfe88516205ec360582a4222d2681d11342c93e15258590ddee82f2 d4bd6e0c80cf1d63746c88d4bcb3a01d4c75732e5da09e3ebd9437ced227fb60 lib/codeql/rust/elements/internal/generated/ParenPat.qll 4f168ef5d5bb87a903251cc31b2e44a759b099ec69c90af31783fbb15778c940 0e34f94a45a13396fd57d94c245dc64d1adde2ab0e22b56946f7e94c04e297fc lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll 40ab5c592e7699c621787793743e33988de71ff42ca27599f5ab3ddb70e3f7d8 12c0a6eed2202ee3e892f61da3b3ce77ac3190854cdf3097e8d2be98aa3cb91d -lib/codeql/rust/elements/internal/generated/ParentChild.qll d1770632e8d0c649ebcbcab9cbc653531ecf521bbf5d891941db8c0927ae6796 fb40a76aff319ec5f7dae9a05da083b337887b0918b3702641b39342213ddf6f +lib/codeql/rust/elements/internal/generated/ParentChild.qll b9fe4919578ae4889e6993df712b685da3dc2d6559b2a2b34a466c604623feee 306fb39ad5d3877c8afcce14aa6be67ff099b334279bd0ce6b2012719a1e812a lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll c5fa328ea60d3a3333d7c7bb3480969c1873166c7ac8ebb9d0afad7a8099d1a8 2dbbb6200d96f7db7dea4a55bdeab8d67b14d39a43e0bd54ada019f7e466f163 lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll 9b12afb46fc5a9ad3a811b05472621bbecccb900c47504feb7f29d96b28421ca bcacbffc36fb3e0c9b26523b5963af0ffa9fd6b19f00a2a31bdb2316071546bd @@ -594,7 +594,7 @@ lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll 51d1e9e683fc79dddbff 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 6e33d9fa21ee3287a0ebc27856a09f4fdc4d587b5a31ff1c4337106de7ca1a2e eece38e6accb6b9d8838fd05edd7cbaf6f7ee37190adbef2b023ad91064d1622 +lib/codeql/rust/elements/internal/generated/Raw.qll 6cfbf74f0635ce379cce096cdfe70c33b74c7e3a35d2e3af2e93bc06d374efee 5b20172d0662bdbcca737e94ee6ceefc58503898b9584bef372720fea0be2671 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 3d8c0bd296d33b91a81633f697a43269a6538df06d277262d3990d3f6880ef57 13680f39e89bcd8299c218aba396f3deec804597e6f7cb7d4a7e7c748b6faa77 @@ -736,10 +736,11 @@ test/extractor-tests/generated/ClosureExpr/ClosureExpr_getClosureBinder.ql cbfcf 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 ef2d2730e08ff6c9e5e8473f654e0b023296c51bc9acfbffd7d4cc5caeed7919 906f8624b10b3fade378d29e34af8537f86d9de16a22a188887ecfc165f5ded9 +test/extractor-tests/generated/Const/Const.ql ddce26b7dc205fe37651f4b289e62c76b08a2d9e8fdaf911ad22a8fdb2a18bc9 b7c7e3c13582b6424a0afd07588e24a258eff7eb3c8587cc11b20aa054d3c727 test/extractor-tests/generated/Const/Const_getAttr.ql bd6296dab00065db39663db8d09fe62146838875206ff9d8595d06d6439f5043 34cb55ca6d1f44e27d82a8b624f16f9408bae2485c85da94cc76327eed168577 test/extractor-tests/generated/Const/Const_getBody.ql f50f79b7f42bb1043b79ec96f999fa4740c8014e6969a25812d5d023d7a5a5d8 90e5060ba9757f1021429ed4ec4913bc78747f3fc415456ef7e7fc284b8a0026 test/extractor-tests/generated/Const/Const_getCrateOrigin.ql f042bf15f9bde6c62d129601806c79951a2a131b6388e8df24b1dc5d17fe89f7 7c6decb624f087fda178f87f6609510907d2ed3877b0f36e605e2422b4b13f57 +test/extractor-tests/generated/Const/Const_getExpanded.ql b2d0dc1857413cdf0e222bda4717951239b8af663522990d3949dfc170fab6f5 a21fed32088db850950cb65128f2f946d498aaa6873720b653d4b9b2787c7d00 test/extractor-tests/generated/Const/Const_getExtendedCanonicalPath.ql 3300b902e1d1f9928cfe918203b87043e13460cfa5348a8c93712d2e26d61ced 71e7b80d3290f17b1c235adaca2c48ae90eb8b2cb24d4c9e6dc66559daf3824c test/extractor-tests/generated/Const/Const_getName.ql b876a1964bbb857fbe8852fb05f589fba947a494f343e8c96a1171e791aa2b5e 83655b1fbc67a4a1704439726c1138bb6784553e35b6ac16250b807e6cd0f40c test/extractor-tests/generated/Const/Const_getTypeRepr.ql 87c5deaa31014c40a035deaf149d76b3aca15c4560c93dd6f4b1ee5f76714baa f3e6b31e4877849792778d4535bd0389f3afd482a6a02f9ceb7e792e46fca83e @@ -759,9 +760,10 @@ test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.ql 39dae987 test/extractor-tests/generated/Crate/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr.ql 513d64b564f359e1022ae6f3d6d4a8ad637f595f01f29a6c2a167d1c2e8f1f99 0c7a7af6ee1005126b9ab77b2a7732821f85f1d2d426312c98206cbbedc19bb2 test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr_getTypeBoundList.ql b20720ff0b147d55cea6f2de44d5bf297e79991eaf103938ccd7ab9d129e9656 eb8c9db2581cea00c29d7772de0b0a125be02c37092217a419f1a2b6a9711a6c -test/extractor-tests/generated/Enum/Enum.ql ed518d828d8e2e4790849284de1d0d5e728dbc2fe5e9f187e8ebfa2d503efd5a 7092b963eb133371e1cbc09d45f8c2308d7093523140b351d67073a8d258643e +test/extractor-tests/generated/Enum/Enum.ql 31645674671eda7b72230cd20b7a2e856190c3a3244e002ab3558787ed1261d9 1f40ee305173af30b244d8e1421a3e521d446d935ece752da5a62f4e57345412 test/extractor-tests/generated/Enum/Enum_getAttr.ql 8109ef2495f4a154e3bb408d549a16c6085e28de3aa9b40b51043af3d007afa7 868cf275a582266ffa8da556d99247bc8af0fdf3b43026c49e250cf0cac64687 test/extractor-tests/generated/Enum/Enum_getCrateOrigin.ql 76d32838b7800ed8e5cab895c9dbea76129f96afab949598bebec2b0cb34b7ff 226d099377c9d499cc614b45aa7e26756124d82f07b797863ad2ac6a6b2f5acb +test/extractor-tests/generated/Enum/Enum_getExpanded.ql 846117a6ee8e04f3d85dce1963bffcbd4bc9b4a95bfab6295c3c87a2f4eda50e 3a9c57fa5c8f514ec172e98126d21b12abe94a3a8a737fb50c838b47fe287ac4 test/extractor-tests/generated/Enum/Enum_getExtendedCanonicalPath.ql 001bb634adc4b20afb241bff41194bc91ba8544d1edd55958a01975e2ac428e1 c7c3fe3dc22a1887981a895a1e5262b1d0ad18f5052c67aa73094586de5212f6 test/extractor-tests/generated/Enum/Enum_getGenericParamList.ql 2a858a07195a4b26b8c92e28519995bd6eba64889bddd126e161038f4a8d78e0 db188f238db915c67b084bc85aa0784c6a20b97b5a5f1966b3530c4c945b5527 test/extractor-tests/generated/Enum/Enum_getName.ql 32a8638534f37bfd416a6906114a3bcaf985af118a165b78f2c8fffd9f1841b8 c9ca8030622932dd6ceab7d41e05f86b923f77067b457fb7ec196fe4f4155397 @@ -770,15 +772,17 @@ test/extractor-tests/generated/Enum/Enum_getVisibility.ql 7fdae1b147d3d2ed41e055 test/extractor-tests/generated/Enum/Enum_getWhereClause.ql 00be944242a2056cd760a59a04d7a4f95910c122fe8ea6eca3efe44be1386b0c 70107b11fb72ed722afa9464acc4a90916822410d6b8bf3b670f6388a193d27d test/extractor-tests/generated/ExprStmt/ExprStmt.ql 811d3c75a93d081002ecf03f4e299c248f708e3c2708fca9e17b36708da620e5 a4477e67931ba90fd948a7ef778b18b50c8492bae32689356899e7104a6d6794 test/extractor-tests/generated/ExprStmt/ExprStmt_getExpr.ql e269bb222317afe1470eee1be822d305fc37c65bca2999da8d24a86fa9337036 088369d6c5b072192290c34c1828b1068aeedaabdae131594ca529bbb1630548 -test/extractor-tests/generated/ExternBlock/ExternBlock.ql 45233abdf39caefd2d1d236990a5fbf06eb0b547d892f1ad3e82b8e3c215bc79 df30e0370ed20bef3b2c5bed6e8c27b27663716e7c9e14e85acb6e33a43f4edc +test/extractor-tests/generated/ExternBlock/ExternBlock.ql 14da23b2b22f3d61a06103d1416ad416333945fd30b3a07b471f351f682c4e16 eaaf4ac8dc23c17d667bc804ed3b88c816c0c5a6127b76e2781faec52534426c test/extractor-tests/generated/ExternBlock/ExternBlock_getAbi.ql 9b7c7263fcbc84e07361f5b419026a525f781836ede051412b22fb4ddb5d0c6a c3755faa7ffb69ad7d3b4c5d6c7b4d378beca2fa349ea072e3bef4401e18ec99 test/extractor-tests/generated/ExternBlock/ExternBlock_getAttr.ql 78ed6a2d31ccab67b02da4792e9d2c7c7084a9f20eb065d83f64cd1c0a603d1b e548d4fa8a3dc1ca4b7d7b893897537237a01242c187ac738493b9f5c4700521 test/extractor-tests/generated/ExternBlock/ExternBlock_getCrateOrigin.ql 5a2e0b546e17a998156f48f62e711c8a7b920d352516de3518dfcd0dfedde82d 1d11b8a790c943ef215784907ff2e367b13737a5d1c24ad0d869794114deaa32 +test/extractor-tests/generated/ExternBlock/ExternBlock_getExpanded.ql 13d466cb7d6ab8d7d5a98237775518826675e7107dbd7a3879133841eacfcadc b091495c25ead5e93b7a4d64443ca8c8bfdeb699a802bd601efa0259610cf9e7 test/extractor-tests/generated/ExternBlock/ExternBlock_getExtendedCanonicalPath.ql 40d6ee4bcb77c2669e07cf8070cc1aadfca22a638412c8fcf35ff892f5393b0c e9782a3b580e076800a1ad013c8f43cdda5c08fee30947599c0c38c2638820d6 test/extractor-tests/generated/ExternBlock/ExternBlock_getExternItemList.ql 2c2b29bdfdc3b27173c068cbaab9946b42053aa14cf371236b4b60ff2e723370 dfc20fc8ef81cdce6f0badd664ef3914d6d49082eb942b1da3f45239b4351e2f -test/extractor-tests/generated/ExternCrate/ExternCrate.ql c6c673d6f533fc47b1a15aac0deb5675ba146c9b53e4575f01e97106969ef38e 5a4d9e6f4fdb689d9687f4e7eb392b184c84bad80eec5dad0da775af27028604 +test/extractor-tests/generated/ExternCrate/ExternCrate.ql 3d4a4db58e34e6baa6689c801dd5c63d609549bcd9fa0c554b32042594a0bc46 63568f79c7b9ceb19c1847f5e8567aec6de5b904ef0215b57c7243fcf5e09a7a test/extractor-tests/generated/ExternCrate/ExternCrate_getAttr.ql cbe8efdfdbe5d46b4cd28d0e9d3bffcf08f0f9a093acf12314c15b692a9e502e 67fe03af83e4460725f371920277186c13cf1ed35629bce4ed9e23dd3d986b95 test/extractor-tests/generated/ExternCrate/ExternCrate_getCrateOrigin.ql c0bf9ba36beb93dc27cd1c688f18b606f961b687fd7a7afd4b3fc7328373dcfb 312da595252812bd311aecb356dd80f2f7dc5ecf77bc956e6478bbe96ec72fd9 +test/extractor-tests/generated/ExternCrate/ExternCrate_getExpanded.ql 007d4bae6dad9aa2d7db45dfc683a143d6ce1b3dd752233cdc46218e8bdab0b1 e77fe7e5128ee3673aec69aef44dc43f881a3767705866c956472e0137b86b60 test/extractor-tests/generated/ExternCrate/ExternCrate_getExtendedCanonicalPath.ql 88e16e2bbef466cec43ace25716e354408b5289f9054eaafe38abafd9df327e3 83a69487e16d59492d44d8c02f0baf7898c88ed5fcf67c73ed89d80f00c69fe8 test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.ql 6ce362fb4df37210ce491e2ef4e04c0899a67c7e15b746c37ef87a42b2b5d5f9 5209c8a64d5707e50771521850ff6deae20892d85a82803aad1328c2d6372d09 test/extractor-tests/generated/ExternCrate/ExternCrate_getRename.ql 52007ef7745e7ceb394de73212c5566300eb7962d1de669136633aea0263afb2 da98779b9e82a1b985c1b1310f0d43c784e5e66716a791ac0f2a78a10702f34b @@ -818,11 +822,12 @@ 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 c1c2a9b68c35f839ccd2b5e62e87d1acd94dcc2a3dc4c307c269b84b2a0806e6 1c446f19d2f81dd139aa5a1578d1b165e13bddbaeab8cfee8f0430bced3a99ab +test/extractor-tests/generated/Function/Function.ql 084e8c4a938e0eea6e2cd47b592021891cb2ad04edbec336f87f0f3faf6a7f32 200b8b17eb09f6df13b2e60869b0329b7a59e3d23a3273d17b03f6addd8ebf89 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_getBody.ql cf2716a751e309deba703ee4da70e607aae767c1961d3c0ac5b6728f7791f608 3beaf4032924720cb881ef6618a3dd22316f88635c86cbc1be60e3bdad173e21 test/extractor-tests/generated/Function/Function_getCrateOrigin.ql acec761c56b386600443411cabb438d7a88f3a5e221942b31a2bf949e77c14b4 ff2387acb13eebfad614b808278f057a702ef4a844386680b8767f9bb4438461 +test/extractor-tests/generated/Function/Function_getExpanded.ql dc93cca67a3436543cd5b8e5c291cceacde523b8652f162532b274e717378293 c0c28eeb6c97690dfc82bd97e31db1a6b72c6410b98eb193270a37fc95952518 test/extractor-tests/generated/Function/Function_getExtendedCanonicalPath.ql 0bcdca25bb92424007cea950409d73ba681e3ffbea53e0508f1d630fccfa8bed ff28c3349f5fc007d5f144e549579bd04870973c0fabef4198edce0fba0ef421 test/extractor-tests/generated/Function/Function_getGenericParamList.ql 0b255791c153b7cb03a64f1b9ab5beccc832984251f37516e1d06ce311e71c2b d200f90d4dd6f8dfd22ce49203423715d5bef27436c56ee553097c668e71c5a1 test/extractor-tests/generated/Function/Function_getName.ql 3d9e0518075d161213485389efe0adf8a9e6352dd1c6233ef0403a9abbcc7ed1 841e644ecefff7e9a82f458bcf14d9976d6a6dbe9191755ead88374d7c086375 @@ -843,10 +848,11 @@ test/extractor-tests/generated/IfExpr/IfExpr_getAttr.ql f5872cdbb21683bed689e753 test/extractor-tests/generated/IfExpr/IfExpr_getCondition.ql 5bab301a1d53fe6ee599edfb17f9c7edb2410ec6ea7108b3f4a5f0a8d14316e3 355183b52cca9dc81591a09891dab799150370fff2034ddcbf7b1e4a7cb43482 test/extractor-tests/generated/IfExpr/IfExpr_getElse.ql 8674cedf42fb7be513fdf6b9c3988308453ae3baf8051649832e7767b366c12f e064e5f0b8e394b080a05a7bccd57277a229c1f985aa4df37daea26aeade4603 test/extractor-tests/generated/IfExpr/IfExpr_getThen.ql 0989ddab2c231c0ee122ae805ffa0d3f0697fb7b6d9e53ee6d32b9140d4b0421 81028f9cd6b417c63091d46a8b85c3b32b1c77eea885f3f93ae12c99685bfe0a -test/extractor-tests/generated/Impl/Impl.ql c473ab1d919fc56b641684b9eb7ba0e65defe554e1bb2fa603b8246a896aa574 16f2f7d8456aee81b395bf8e44fcf0562cfa44294fa03e4f85f3b06f5ff1c57f +test/extractor-tests/generated/Impl/Impl.ql a6e19421a7785408ad5ce8e6508d9f88eceb71fe6f6f4abc5795285ecc778db6 158519bed8a89b8d25921a17f488267af6be626db559bd93bbbe79f07ebfed6c test/extractor-tests/generated/Impl/Impl_getAssocItemList.ql cf875361c53c081ac967482fd3af8daf735b0bc22f21dcf0936fcf70500a001a 0ad723839fa26d30fa1cd2badd01f9453977eba81add7f0f0a0fcb3adb76b87e test/extractor-tests/generated/Impl/Impl_getAttr.ql 018bdf6d9a9724d4f497d249de7cecd8bda0ac2340bde64b9b3d7c57482e715b cd065899d92aa35aca5d53ef64eadf7bb195d9a4e8ed632378a4e8c550b850cd test/extractor-tests/generated/Impl/Impl_getCrateOrigin.ql 494d5524ef7bac1286b8a465e833e98409c13f3f8155edab21d72424944f2ed9 b238ef992fce97699b14a5c45d386a2711287fd88fa44d43d18c0cdfd81ed72c +test/extractor-tests/generated/Impl/Impl_getExpanded.ql ce623514e77f67dda422566531515d839a422e75ea87a10d86ad162fa61e1469 533624938c937835a59326c086e341b7bacab32d84af132e7f3d0d17c6cd4864 test/extractor-tests/generated/Impl/Impl_getExtendedCanonicalPath.ql 3ab82fd7831d22c7ec125908abf9238a9e8562087d783c1c12c108b449c31c83 320afd5dd1cea9017dbc25cc31ebe1588d242e273d27207a5ad2578eee638f7e test/extractor-tests/generated/Impl/Impl_getGenericParamList.ql 88d5cd8fd03cb4cc2887393ee38b2e2315eeef8c4db40a9bd94cf86b95935bdd 9c72828669ccf8f7ca39851bc36a0c426325a91fc428b49681e4bb680d6547a9 test/extractor-tests/generated/Impl/Impl_getSelfTy.ql 2962d540a174b38815d150cdd9053796251de4843b7276d051191c6a6c8ecad4 b7156cec08bd6231f7b8f621e823da0642a0eb036b05476222f259101d9d37c0 @@ -894,18 +900,19 @@ test/extractor-tests/generated/LoopExpr/LoopExpr.ql 37b320acefa3734331f87414de27 test/extractor-tests/generated/LoopExpr/LoopExpr_getAttr.ql d557c1a34ae8762b32702d6b50e79c25bc506275c33a896b6b94bbbe73d04c49 34846c9eefa0219f4a16e28b518b2afa23f372d0aa03b08d042c5a35375e0cd6 test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.ql 0b77b9d9fb5903d37bce5a2c0d6b276e6269da56fcb37b83cd931872fb88490f c7f09c526e59dcadec13ec9719980d68b8619d630caab2c26b8368b06c1f2cc0 test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.ql 0267f54077640f3dfeb38524577e4a1229115eeb1c839398d0c5f460c1d65129 96ec876635b8c561f7add19e57574444f630eae3df9ab9bc33ac180e61f3a7b8 -test/extractor-tests/generated/MacroCall/MacroCall.ql f41552ce4c8132db854132e445aa0c8df514bfd375aa71cc9ed0ae838b7df9f1 442ecbe1481084bb072c6f8cf0eb595b7ad371587e8708610a10f2cc718535f7 +test/extractor-tests/generated/MacroCall/MacroCall.ql 989d90726edab22a69377480ce5d1a13309d9aac60e0382c2ad6d36e8c7f1df5 68ffd6e1afa0c2c17fb04f87a09baca9766421aa28acd4ef8a6d04798f4c3a57 test/extractor-tests/generated/MacroCall/MacroCall_getAttr.ql c22a2a29d705e85b03a6586d1eda1a2f4f99f95f7dfeb4e6908ec3188b5ad0ad 9b8d9dcc2116a123c15c520a880efab73ade20e08197c64bc3ed0c50902c4672 test/extractor-tests/generated/MacroCall/MacroCall_getCrateOrigin.ql 3030e87de6f773d510882ee4469146f6008898e23a4a4ccabcbaa7da1a4e765e a10fe67315eda1c59d726d538ead34f35ccffc3e121eeda74c286d49a4ce4f54 test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.ql 757c4a4c32888e4604044c798a3180aa6d4f73381eec9bc28ba9dc71ffcbd03a 27d5edaa2c1096a24c86744aaad0f006da20d5caa28ccfd8528e7c98aa1bead1 test/extractor-tests/generated/MacroCall/MacroCall_getExtendedCanonicalPath.ql 553b810f611014ae04d76663d1393c93687df8b96bda325bd71e264e950a8be9 a0e80c3dac6a0e48c635e9f25926b6a97adabd4b3c0e3cfb6766ae160bcb4ee7 test/extractor-tests/generated/MacroCall/MacroCall_getPath.ql 160edc6a001a2d946da6049ffb21a84b9a3756e85f9a2fb0a4d85058124b399a 1e25dd600f19ef89a99f328f86603bce12190220168387c5a88bfb9926da56d9 test/extractor-tests/generated/MacroCall/MacroCall_getTokenTree.ql 1cbf6b1ac7fa0910ff299b939743153fc00ad7e28a9a70c69a8297c6841e8238 570380c0dc4b20fe25c0499378569720a6da14bdb058e73d757e174bdd62d0c0 -test/extractor-tests/generated/MacroDef/MacroDef.ql b8186c22beb7f818a30fe80f36d2e4207887445863e4deeae88bd03c24863dbb 71bebfb1b57b56ea479bc6edd714a4f01bfce2fa8e12fb9eb1481f9dffa4515e +test/extractor-tests/generated/MacroDef/MacroDef.ql 2b9965d72ba85d531f66e547059110e95a03315889fbb3833cce121c1ad49309 2b5b03afbce92745b1d9750a958b602ccf5e7f9f7934fb12d8b3c20dfc8d3d28 test/extractor-tests/generated/MacroDef/MacroDef_getArgs.ql 61f11d6ba6ea3bd42708c4dc172be4016277c015d3560025d776e8fef447270f 331541eff1d8a835a9ecc6306f3adf234cbff96ea74b0638e482e03f3e336fd1 test/extractor-tests/generated/MacroDef/MacroDef_getAttr.ql 0a30875f7b02351a4facf454273fb124aa40c6ef8a47dfe5210072a226b03656 8e97307aef71bf93b28f787050bfaa50fe95edf6c3f5418acd07c1de64e62cc1 test/extractor-tests/generated/MacroDef/MacroDef_getBody.ql 7b350f48e6f208d9fa4725919efd439baf5e9ec4563ba9be261b7a17dacc451b 33f99a707bb89705c92195a5f86055d1f6019bcd33aafcc1942358a6ed413661 test/extractor-tests/generated/MacroDef/MacroDef_getCrateOrigin.ql 6c46366798df82ed96b8fb1efeb46bd84c2660f226ff2359af0041d5cdf004ba 8ab22599ef784dcad778d86828318699c2230c8927ae98ab0c60ac4639d6d1b5 +test/extractor-tests/generated/MacroDef/MacroDef_getExpanded.ql 7f2baed8b5a2ba8a6e67cb601e7a03a7d3276673d6bd3b05f83b76058622bc2d 85241a780e2cec0be062042bcea4a3c3282f3694f6bf7faa64a51f1126b1f438 test/extractor-tests/generated/MacroDef/MacroDef_getExtendedCanonicalPath.ql d09b262b8e5558078506ec370255a63c861ca0c41ab9af3eb4f987325dadd90c cd466062c59b6a8ea2a05ddac1bf5b6d04165755f4773867774215ec5e79afa3 test/extractor-tests/generated/MacroDef/MacroDef_getName.ql 6bc8a17804f23782e98f7baf70a0a87256a639c11f92e3c80940021319868847 726f9d8249b2ca6789d37bb4248bf5dd044acc9add5c25ed62607502c8af65aa test/extractor-tests/generated/MacroDef/MacroDef_getVisibility.ql d858ccaab381432c529bf4a621afc82ea5e4b810b463f2b1f551de79908e14e7 83a85c4f90417ab44570a862642d8f8fc9208e62ba20ca69b32d39a3190381aa @@ -915,9 +922,10 @@ test/extractor-tests/generated/MacroItems/MacroItems.ql 876b5d2a4ce7dcb599e02208 test/extractor-tests/generated/MacroItems/MacroItems_getItem.ql 53fc2db35a23b9aca6ee327d2a51202d23ddf482e6bdd92c5399b7f3a73959b1 63051c8b7a7bfbe9cc640f775e753c9a82f1eb8472989f7d3c8af94fdf26c7a0 test/extractor-tests/generated/MacroPat/MacroPat.ql d9ec72d4d6a7342ee2d9aa7e90227faa31792ca5842fe948d7fdf22597a123b7 74b0f21ef2bb6c13aae74dba1eea97451755110909a083360e2c56cfbc76fd91 test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.ql 398996f0d0f2aa6d3b58d80b26c7d1185b5094d455c6c5c7f075f6d414150aa6 b4662e57cac36ed0e692201f53ba46c3d0826bba99c5cc6dfcb302b44dd2154b -test/extractor-tests/generated/MacroRules/MacroRules.ql e8a243a1aa368d44c963d81b4459aa6eba7caf514d4865af5007cc33fe53dde4 9e9114cb808239e3bb15403cf5712f8dbaf4e2719e74efddbb800ec0be19f06a +test/extractor-tests/generated/MacroRules/MacroRules.ql 46c125145d836fd5d781d4eda02f9f09f2d39a35350dffb982610b27e4e4936f 4068314eca12ac08ad7e90ceb8b9d935a355c2fe8c38593972484abde1ac47b4 test/extractor-tests/generated/MacroRules/MacroRules_getAttr.ql 7de501c724e3465520cdc870c357911e7e7fce147f6fb5ed30ad37f21cf7d932 0d7754b89bcad6c012a0b43ee4e48e64dd20b608b3a7aeb4042f95eec50bb6e6 test/extractor-tests/generated/MacroRules/MacroRules_getCrateOrigin.ql fccedeee10ef85be3c26f6360b867e81d4ebce3e7f9cf90ccb641c5a14e73e7d 28c38a03a7597a9f56032077102e7a19378b0f3f3a6804e6c234526d0a441997 +test/extractor-tests/generated/MacroRules/MacroRules_getExpanded.ql 01746ce9f525dcf97517d121eb3d80a25a1ee7e1d550b52b3452ee6b8fd83a00 0ccb55088d949fa2cd0d0be34ea5a626c221ae1f35d56ccf2eb20c696d3c157b test/extractor-tests/generated/MacroRules/MacroRules_getExtendedCanonicalPath.ql a0098b1d945df46e546e748c2297444aaccd04a4d543ba3d94424e7f33be6d26 3bab748c7f5bbe486f30e1a1c422a421ab622f401f4f865afb003915ae47be83 test/extractor-tests/generated/MacroRules/MacroRules_getName.ql 591606e3accae8b8fb49e1218c4867a42724ac209cf99786db0e5d7ea0bf55d5 d2936ef5aa4bbf024372516dde3de578990aafb2b8675bbbf0f72e8b54eb82a8 test/extractor-tests/generated/MacroRules/MacroRules_getTokenTree.ql 7598d33c3d86f9ad8629219b90667b2b65e3a1e18c6b0887291df9455a319cab 69d90446743e78e851145683c17677497fe42ed02f61f2b2974e216dc6e05b01 @@ -953,9 +961,10 @@ test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getIdentifier.ql 13 test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getReceiver.ql 77407ac956c897ff7234132de1a825f1af5cfd0b6c1fd3a30f64fe08813d56db d80719e02d19c45bd6534c89ec7255652655f5680199854a0a6552b7c7793249 test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedCrateOrigin.ql c22504665900715e8a32dd47627111e8cef4ed2646f74a8886dead15fbc85bb5 d92462cf3cb40dcd383bcaffc67d9a43e840494df9d7491339cbd09a0a73427b test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedPath.ql 9e7bbb7ed60db49b45c3bdf8e01ec58de751889fc394f59ac33f9d6e98200aa1 c055d877e2ff0edc78cce6dd79c78b2881e7940889729cbb5c12e7029ddeb5a3 -test/extractor-tests/generated/Module/Module.ql 4bc4d74921a5af94b124a5010cdf6908cdc9ecf26124e354155fba781009071f acca26579b087ce1fc674703c4d95d8d353075d3021c464d2f3fc06891716774 +test/extractor-tests/generated/Module/Module.ql 3b534dc4377a6411d75c5d1d99ad649acaebd17364af2738cbc86f5a43315028 feeedeb64c4eccba1787bff746ee8009bddead00123de98b8d5ca0b401078443 test/extractor-tests/generated/Module/Module_getAttr.ql b97ae3f5175a358bf02c47ec154f7c2a0bd7ca54d0561517008d59344736d5cd f199116633c183826afa9ab8e409c3bf118d8e626647dbc617ae0d40d42e5d25 test/extractor-tests/generated/Module/Module_getCrateOrigin.ql ff479546bf8fe8ef3da60c9c95b7e8e523c415be61839b2fff5f44c146c4e7df b14d3c0577bd6d6e3b6e5f4b93448cdccde424e21327a2e0213715b16c064a52 +test/extractor-tests/generated/Module/Module_getExpanded.ql 03d49dd284795a59b7b5126218e1c8c7ce1cb0284c5070e2d8875e273d9d90fc fa004cf6b464afe0307c767e4dd29bbce7e1c65de61cdd714af542a8b68bbe44 test/extractor-tests/generated/Module/Module_getExtendedCanonicalPath.ql 55c5b633d05ddbe47d324535a337d5dfed5913ab23cdb826424ddd22009a2a53 ab9e11e334e99be0d4c8d2bd0580657211d05feeeb322fbb5400f07264219497 test/extractor-tests/generated/Module/Module_getItemList.ql 59b49af9788e9d8b5bceaeffe3c3d203038abd987880a720669117ac3db35388 9550939a0e07b11892b38ca03a0ce305d0e924c28d27f25c9acc47a819088969 test/extractor-tests/generated/Module/Module_getName.ql 7945dc007146c650cf4f5ac6e312bbd9c8b023246ff77f033a9410da29774ace 9de11a1806487d123376c6a267a332d72cd81e7d6e4baa48669e0bb28b7e352e @@ -1053,10 +1062,11 @@ test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr_getTypeRepr.ql a6604f test/extractor-tests/generated/SourceFile/SourceFile.ql c30a3c2c82be3114f3857295615e2ec1e59c823f0b65ea3918be85e6b7adb921 6a5bbe96f81861c953eb89f77ea64d580f996dca5950f717dd257a0b795453e6 test/extractor-tests/generated/SourceFile/SourceFile_getAttr.ql 450404306b3d991b23c60a7bb354631d37925e74dec7cc795452fe3263dc2358 07ffcc91523fd029bd599be28fe2fc909917e22f2b95c4257d3605f54f9d7551 test/extractor-tests/generated/SourceFile/SourceFile_getItem.ql f17e44bc0c829b2aadcb6d4ab9c687c10dc8f1afbed4e5190404e574d6ab3107 1cf49a37cc32a67fdc00d16b520daf39143e1b27205c1a610e24d2fe1a464b95 -test/extractor-tests/generated/Static/Static.ql ac93af3e443bd2339e460a2d5273415da3d8e3e1cbbfc3a0af5b43b559047154 2f38e26764f2a07f5bf6ddadf7ebe9db5e087d784d1f2c4e79766ed10bb97859 +test/extractor-tests/generated/Static/Static.ql 271ef78c98c5cb8c80812a1028bb6b21b5e3ae11976ed8276b35832bf41c4798 23ab4c55836873daf500973820d2d5eaa5892925ebdc5d35e314b87997ca6ce3 test/extractor-tests/generated/Static/Static_getAttr.ql adb0bbf55fb962c0e9d317fd815c09c88793c04f2fb78dfd62c259420c70bc68 d317429171c69c4d5d926c26e97b47f5df87cf0552338f575cd3aeea0e57d2c2 test/extractor-tests/generated/Static/Static_getBody.ql e735bbd421e22c67db792671f5cb78291c437621fdfd700e5ef13b5b76b3684d 9148dc9d1899cedf817258a30a274e4f2c34659140090ca2afeb1b6f2f21e52f test/extractor-tests/generated/Static/Static_getCrateOrigin.ql f24ac3dac6a6e04d3cc58ae11b09749114a89816c28b96bf6be0e96b2e20d37f e4051426c5daa7e73c1a5a9023d6e50a2b46ebf194f45befbe3dd45e64831a55 +test/extractor-tests/generated/Static/Static_getExpanded.ql 6f949494cba88f12b1657badd7d15bdd0b6aba73701674a64aac9d30cbb4907f 9ea0c4bb0100482e9ae0b03c410860f10fd88115e854b2516b61732acc634501 test/extractor-tests/generated/Static/Static_getExtendedCanonicalPath.ql 6ec02f7ec9cf4cb174a7cdf87921758a3e798c76171be85939614305d773b6a0 c51567dac069fc67ece0aa018ae6332187aa1145f33489093e4aee049d7cea52 test/extractor-tests/generated/Static/Static_getName.ql c7537e166d994b6f961547e8b97ab4328b78cbd038a0eb9afaae42e35f6d9cb4 bb5ae24b85cd7a8340a4ce9e9d56ec3be31558051c82257ccb84289291f38a42 test/extractor-tests/generated/Static/Static_getTypeRepr.ql 45efcf393a3c6d4eca92416d8d6c88e0d0e85a2bc017da097ae2bbbe8a271a32 374b551e2d58813203df6f475a1701c89508803693e2a4bec7afc86c2d58d60b @@ -1065,9 +1075,10 @@ test/extractor-tests/generated/StmtList/StmtList.ql 0010df0d5e30f7bed3bd5d916faf test/extractor-tests/generated/StmtList/StmtList_getAttr.ql 78d4bf65273498f04238706330b03d0b61dd03b001531f05fcb2230f24ceab64 6e02cee05c0b9f104ddea72b20097034edb76e985188b3f10f079bb03163b830 test/extractor-tests/generated/StmtList/StmtList_getStatement.ql abbc3bcf98aab395fc851d5cc58c9c8a13fe1bdd531723bec1bc1b8ddbec6614 e302a26079986fa055306a1f641533dfde36c9bc0dd7958d21e2518b59e808c2 test/extractor-tests/generated/StmtList/StmtList_getTailExpr.ql 578d7c944ef42bdb822fc6ce52fe3d49a0012cf7854cfddbb3d5117133700587 64ea407455a3b4dfbb86202e71a72b5abbff885479367b2834c0dd16d1f9d0ee -test/extractor-tests/generated/Struct/Struct.ql 14dc5ead6bed88c2c79d9fd3874198f845d8202290b0931b2d2375c0a397c44a 408b07b6bb40ca09f51d2becd94501cc2b95ec52e04ccc2703c2e25d6577b4c6 +test/extractor-tests/generated/Struct/Struct.ql 13d575bd8ca4ad029d233a13a485005bc03f58221b976c7e1df7456ddc788544 fc7cbaaf44d71e66aa8170b1822895fc0d0710d0b3a4da4f1b96ed9633f0b856 test/extractor-tests/generated/Struct/Struct_getAttr.ql 028d90ddc5189b82cfc8de20f9e05d98e8a12cc185705481f91dd209f2cb1f87 760780a48c12be4581c1675c46aae054a6198196a55b6b989402cc29b7caf245 test/extractor-tests/generated/Struct/Struct_getCrateOrigin.ql 289622244a1333277d3b1507c5cea7c7dd29a7905774f974d8c2100cea50b35f d32941a2d08d7830b42c263ee336bf54de5240bfc22082341b4420a20a1886c7 +test/extractor-tests/generated/Struct/Struct_getExpanded.ql fc6809bfafce55b6ff1794898fcd08ac220c4b2455782c52a51de64346ed09ba 9bcb24573b63831861b55c7f93af58e19af2929acf9bb1b8da94763bbfcde013 test/extractor-tests/generated/Struct/Struct_getExtendedCanonicalPath.ql 866a5893bd0869224fb8aadd071fba35b5386183bb476f5de45c9de7ab88c583 267aedc228d69e31ca8e95dcab6bcb1aa30f9ebaea43896a55016b7d68e3c441 test/extractor-tests/generated/Struct/Struct_getFieldList.ql f45d6d5d953741e52aca67129994b80f6904b2e6b43c519d6d42c29c7b663c42 77a7d07e8462fa608efc58af97ce8f17c5369f9573f9d200191136607cb0e600 test/extractor-tests/generated/Struct/Struct_getGenericParamList.ql cd72452713004690b77086163541fa319f8ab5faf503bb4a6a20bcaf2f790d38 4d72e891c5fac6e491d9e18b87ecf680dc423787d6b419da8f700fe1a14bc26f @@ -1111,19 +1122,21 @@ test/extractor-tests/generated/TokenTree/TokenTree.ql ba2ef197e0566640b57503579f test/extractor-tests/generated/Trait/AssocItemList.ql 0ea572b1350f87cc09ce4dc1794b392cc9ad292abb8439c106a7a1afe166868b 6e7493a3ace65c68b714e31234e149f3fc44941c3b4d125892531102b1060b2f test/extractor-tests/generated/Trait/AssocItemList_getAssocItem.ql 8149d905f6fc6caeb51fa1ddec787d0d90f4642687461c7b1a9d4ab93a27d65d 8fb9caad7d88a89dd71e5cc8e17496afbdf33800e58179f424ef482b1b765bb1 test/extractor-tests/generated/Trait/AssocItemList_getAttr.ql 06526c4a28fd4fdce04ca15fbadc2205b13dcc2d2de24177c370d812e02540e6 79c8ce6e1f8acc1aaca498531e2c1a0e7e2c0f2459d7fc9fe485fd82263c433f -test/extractor-tests/generated/Trait/Trait.ql e88ff04557cf050a5acb5038537bb4f7a444c85721eaf3e0aa4c10e7e7724c56 e37b9e60fa8cc64ef9e8db1707d2d8c5a62f9804233c939b4aaa39762b9b0a9a +test/extractor-tests/generated/Trait/Trait.ql a7407c80d297ba0b7651ae5756483c8d81874d20af4123552d929870e9125d13 62e45d36c9791702bc9d4a26eb04f22fe713d120a8e00fe6131032b081bad9f4 test/extractor-tests/generated/Trait/Trait_getAssocItemList.ql 05e6896f60afabf931a244e42f75ee55e09c749954a751d8895846de3121f58f def1f07d9945e8d9b45a659a285b0eb72b37509d20624c88e0a2d34abf7f0c72 test/extractor-tests/generated/Trait/Trait_getAttr.ql 9711125fa4fc0212b6357f06d1bc50df50b46168d139b649034296c64d732e21 901b6a9d04055b563f13d8742bd770c76ed1b2ccf9a7236a64de9d6d287fbd52 test/extractor-tests/generated/Trait/Trait_getCrateOrigin.ql d8433d63bb2c4b3befaaedc9ce862d1d7edcdf8b83b3fb5529262fab93880d20 3779f2678b3e00aac87259ecfe60903bb564aa5dbbc39adc6c98ad70117d8510 +test/extractor-tests/generated/Trait/Trait_getExpanded.ql 4a6912b74ad6cbfce27c6ffdff781271d182a91a4d781ee02b7ac35b775d681b 14c8df06c3909c9986fc238229208e87b39b238890eb5766af2185c36e3b00c9 test/extractor-tests/generated/Trait/Trait_getExtendedCanonicalPath.ql a2bd16e84f057ed8cb6aae3e2a117453a6e312705302f544a1496dbdd6fcb3e6 b4d419045430aa7acbc45f8043acf6bdacd8aff7fdda8a96c70ae6c364c9f4d1 test/extractor-tests/generated/Trait/Trait_getGenericParamList.ql b27ff28e3aff9ec3369bbbcbee40a07a4bd8af40928c8c1cb7dd1e407a88ffee 2b48e2049df18de61ae3026f8ab4c3e9e517f411605328b37a0b71b288826925 test/extractor-tests/generated/Trait/Trait_getName.ql d4ff3374f9d6068633bd125ede188fcd3f842f739ede214327cd33c3ace37379 3dcf91c303531113b65ea5205e9b6936c5d8b45cd3ddb60cd89ca7e49f0f00c1 test/extractor-tests/generated/Trait/Trait_getTypeBoundList.ql 8a4eb898424fe476db549207d67ba520999342f708cbb89ee0713e6bbf1c050d 69d01d97d161eef86f24dd0777e510530a4db5b0c31c760a9a3a54f70d6dc144 test/extractor-tests/generated/Trait/Trait_getVisibility.ql 8f4641558effd13a96c45d902e5726ba5e78fc9f39d3a05b4c72069993c499f4 553cf299e7d60a242cf44f2a68b8349fd8666cc4ccecab5ce200ce44ad244ba9 test/extractor-tests/generated/Trait/Trait_getWhereClause.ql b34562e7f9ad9003d2ae1f3a9be1b5c141944d3236eae3402a6c73f14652e8ad 509fa3815933737e8996ea2c1540f5d7f3f7de21947b02e10597006967efc9d1 -test/extractor-tests/generated/TraitAlias/TraitAlias.ql 8870048164ba3c3ea8d4c10e5793d860a4ed3ef0890bf32409827321ddde4b72 9a912ebba80977656e74e1d94478c193164684f01371e23f09817231b58007ff +test/extractor-tests/generated/TraitAlias/TraitAlias.ql 6ba52527c90cd067ce3a48bb5051ba94c3c108444d428244622d381c1264ba55 76acb3a91331fa55c390a1cf2fd70a35052d9019b0216f5e00271ee367607d33 test/extractor-tests/generated/TraitAlias/TraitAlias_getAttr.ql 128c24196bfa6204fffd4154ff6acebd2d1924bb366809cdb227f33d89e185c8 56e8329e652567f19ef7d4c4933ee670a27c0afb877a0fab060a0a2031d8133e test/extractor-tests/generated/TraitAlias/TraitAlias_getCrateOrigin.ql 303212122021da7f745050c5de76c756461e5c6e8f4b20e26c43aa63d821c2b6 fdbd024cbe13e34265505147c6faffd997e5c222386c3d9e719cd2a385bde51c +test/extractor-tests/generated/TraitAlias/TraitAlias_getExpanded.ql 8767d1ffb0a9c1e84c39907d3ab5456aff146e877f7bfe905786ff636a39acd9 9467a2b63f32b84501f4aa1ce1e0fc822845a9239216b9ebf4eaf0c23d6d27f3 test/extractor-tests/generated/TraitAlias/TraitAlias_getExtendedCanonicalPath.ql 601b6b0e5e7e7f2926626866085d9a4a9e31dc575791e9bd0019befc0e397193 9bd325414edc35364dba570f6eecc48a8e18c4cbff37d32e920859773c586319 test/extractor-tests/generated/TraitAlias/TraitAlias_getGenericParamList.ql 5a40c1760fcf5074dc9e9efa1a543fc6223f4e5d2984923355802f91edb307e4 9fd7ab65c1d6affe19f96b1037ec3fb9381e90f602dd4611bb958048710601fa test/extractor-tests/generated/TraitAlias/TraitAlias_getName.ql e91fa621774b9467ae820f3c408191ac75ad33dd73bcd417d299006a84c1a069 113e0c5dd2e3ac2ddb1fd6b099b9b5c91d5cdd4a02e62d4eb8e575096f7f4c6a @@ -1151,9 +1164,10 @@ 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 637d4c982691942fabcc99ef4a1765ec794d1271bdd376addb55c9d7ea31230e ef81773e2f1260f66f23ce537080c3273b1cf74f96fba37403d34dc1ee1e0458 +test/extractor-tests/generated/TypeAlias/TypeAlias.ql b7c4adb8322a2032657f4417471e7001dbe8236da79af963d6ac5ddf6c4e7c8a 7504a27f32fd76520398c95abd6adeca67be5b71ff4b8abdd086eb29c0d698fc test/extractor-tests/generated/TypeAlias/TypeAlias_getAttr.ql ecf4b45ef4876e46252785d2e42b11207e65757cdb26e60decafd765e7b03b49 21bb4d635d3d38abd731b9ad1a2b871f8e0788f48a03e9572823abeea0ea9382 test/extractor-tests/generated/TypeAlias/TypeAlias_getCrateOrigin.ql cd66db5b43bcb46a6cf6db8c262fd524017ef67cdb67c010af61fab303e3bc65 2aebae618448530ec537709c5381359ea98399db83eeae3be88825ebefa1829d +test/extractor-tests/generated/TypeAlias/TypeAlias_getExpanded.ql dc797269de5b29409484577d4f2e4de9462a1001232a57c141c1e9d3f0e7ad74 d2c3d55fcdf077523ceb899d11d479db15b449b5e82eb8610cb637ae79ef74e6 test/extractor-tests/generated/TypeAlias/TypeAlias_getExtendedCanonicalPath.ql fe9c4132e65b54eb071b779e508e9ed0081d860df20f8d4748332b45b7215fd5 448c10c3f8f785c380ce430996af4040419d8dccfa86f75253b6af83d2c8f1c9 test/extractor-tests/generated/TypeAlias/TypeAlias_getGenericParamList.ql e7e936458dce5a8c6675485a49e2769b6dbff29c112ed744c880e0fc7ae740ef e5fcf3a33d2416db6b0a73401a3cbc0cece22d0e06794e01a1645f2b3bca9306 test/extractor-tests/generated/TypeAlias/TypeAlias_getName.ql 757deb3493764677de3eb1ff7cc119a469482b7277ed01eb8aa0c38b4a8797fb 5efed24a6968544b10ff44bfac7d0432a9621bde0e53b8477563d600d4847825 @@ -1176,18 +1190,20 @@ test/extractor-tests/generated/TypeParam/TypeParam_getName.ql 9d5b6d6a9f2a5793e2 test/extractor-tests/generated/TypeParam/TypeParam_getTypeBoundList.ql 080a6b370ad460bf128fdfd632aa443af2ad91c3483e192ad756eb234dbfa4d8 8b048d282963f670db357f1eef9b8339f83d03adf57489a22b441d5c782aff62 test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr.ql 4ad6ed0c803fb4f58094a55b866940b947b16259756c674200172551ee6546e0 d3270bdcc4c026325159bd2a59848eb51d96298b2bf21402ea0a83ac1ea6d291 test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr_getAttr.ql d8502be88bcd97465f387c410b5078a4709e32b2baa556a4918ea5e609c40dd7 b238dc37404254e3e7806d50a7b1453e17e71da122931331b16a55853d3a843f -test/extractor-tests/generated/Union/Union.ql 2cbbdf085667e0741322cd21288d7987d6bdba72fb1b930aaf589494f5f9ea5e 2e64f70926141ea56aa14cc3122c522407f2f45ab9dc364ef4a3e3caf171befa +test/extractor-tests/generated/Union/Union.ql ef8005f4ac5d3e6f308b3bb1a1861403674cbb1b72e6558573e9506865ae985e 88933d0f9500ce61a847fbb792fd778d77a4e7379fc353d2a9f5060773eda64f test/extractor-tests/generated/Union/Union_getAttr.ql 42fa0878a6566208863b1d884baf7b68b46089827fdb1dbbfacbfccf5966a9a2 54aa94f0281ca80d1a4bdb0e2240f4384af2ab8d50f251875d1877d0964579fc test/extractor-tests/generated/Union/Union_getCrateOrigin.ql c218308cf17b1490550229a725542d248617661b1a5fa14e9b0e18d29c5ecc00 e0489242c8ff7aa4dbfdebcd46a5e0d9bea0aa618eb0617e76b9b6f863a2907a +test/extractor-tests/generated/Union/Union_getExpanded.ql a096814a812662a419b50aa9fd66ab2f6be9d4471df3d50351e9d0bcf061f194 51b406644ee819d74f1b80cdb3a451fa1fad6e6a65d89fa6e3dc87516d9d4292 test/extractor-tests/generated/Union/Union_getExtendedCanonicalPath.ql 6268ddb68c3e05906e3fc85e40635925b84e5c7290746ded9c6814d362033068 04473b3b9891012e95733463018db8da0e96659ea0b10458b33dc857c091d278 test/extractor-tests/generated/Union/Union_getGenericParamList.ql c55156ae26b766e385be7d21e67f8c3c45c29274201c93d660077fcc47e1ceee 4c4d338e17c32876ef6e51fd19cff67d125dd89c10e939dfaadbac824bef6a68 test/extractor-tests/generated/Union/Union_getName.ql 17247183e1a8c8bbb15e67120f65ca323630bddeb614fa8a48e1e74319f8ed37 e21c2a0205bc991ba86f3e508451ef31398bdf5441f6d2a3f72113aaae9e152b test/extractor-tests/generated/Union/Union_getStructFieldList.ql ae42dec53a42bcb712ec5e94a3137a5c0b7743ea3b635e44e7af8a0d59e59182 61b34bb8d6e05d9eb34ce353eef7cc07c684179bf2e3fdf9f5541e04bef41425 test/extractor-tests/generated/Union/Union_getVisibility.ql 86628736a677343d816e541ba76db02bdae3390f8367c09be3c1ff46d1ae8274 6514cdf4bfad8d9c968de290cc981be1063c0919051822cc6fdb03e8a891f123 test/extractor-tests/generated/Union/Union_getWhereClause.ql 508e68ffa87f4eca2e2f9c894d215ea76070d628a294809dc267082b9e36a359 29da765d11794441a32a5745d4cf594495a9733e28189d898f64da864817894f -test/extractor-tests/generated/Use/Use.ql b20f6221e6ee731718eb9a02fa765f298ad285f23393a3df0119707c48edd8b3 9ab45d9b3c51c6181a6609b72ebd763c336fee01b11757e7f044257510bd7f3f +test/extractor-tests/generated/Use/Use.ql 9a0a5efb8118830355fb90bc850de011ae8586c12dce92cfc8f39a870dd52100 7fd580282752a8e6a8ea9ac33ff23a950304030bc32cfbd3b9771368723fb8d6 test/extractor-tests/generated/Use/Use_getAttr.ql 6d43c25401398108553508aabb32ca476b3072060bb73eb07b1b60823a01f964 84e6f6953b4aa9a7472082f0a4f2df26ab1d157529ab2c661f0031603c94bb1d test/extractor-tests/generated/Use/Use_getCrateOrigin.ql 912ebc1089aa3390d4142a39ea73d5490eae525d1fb51654fdd05e9dd48a94b6 c59e36362016ae536421e6d517889cea0b2670818ea1f9e997796f51a9b381e2 +test/extractor-tests/generated/Use/Use_getExpanded.ql 386631ee0ee002d3d6f7f6e48c87d2bb2c4349aa3692d16730c0bc31853b11cf 50e03f47cc1099d7f2f27724ea82d3b69b85e826b66736361b0cbeceb88f88a4 test/extractor-tests/generated/Use/Use_getExtendedCanonicalPath.ql ccfde95c861cf4199e688b6efeeee9dab58a27cfecd520e39cc20f89143c03c9 6ff93df4134667d7cb74ae7efe102fe2db3ad4c67b4b5a0f8955f21997806f16 test/extractor-tests/generated/Use/Use_getUseTree.ql 1dfe6bb40b29fbf823d67fecfc36ba928b43f17c38227b8eedf19fa252edf3af aacdcc4cf418ef1eec267287d2af905fe73f5bcfb080ef5373d08da31c608720 test/extractor-tests/generated/Use/Use_getVisibility.ql 587f80acdd780042c48aeb347004be5e9fd9df063d263e6e4f2b660c48c53a8f 0c2c04f95838bca93dfe93fa208e1df7677797efc62b4e8052a4f9c5d20831dd diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index 382565f3b86b..9fb82167e791 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -742,6 +742,7 @@ /test/extractor-tests/generated/Const/Const_getAttr.ql linguist-generated /test/extractor-tests/generated/Const/Const_getBody.ql linguist-generated /test/extractor-tests/generated/Const/Const_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Const/Const_getExpanded.ql linguist-generated /test/extractor-tests/generated/Const/Const_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Const/Const_getName.ql linguist-generated /test/extractor-tests/generated/Const/Const_getTypeRepr.ql linguist-generated @@ -764,6 +765,7 @@ /test/extractor-tests/generated/Enum/Enum.ql linguist-generated /test/extractor-tests/generated/Enum/Enum_getAttr.ql linguist-generated /test/extractor-tests/generated/Enum/Enum_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Enum/Enum_getExpanded.ql linguist-generated /test/extractor-tests/generated/Enum/Enum_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Enum/Enum_getGenericParamList.ql linguist-generated /test/extractor-tests/generated/Enum/Enum_getName.ql linguist-generated @@ -776,11 +778,13 @@ /test/extractor-tests/generated/ExternBlock/ExternBlock_getAbi.ql linguist-generated /test/extractor-tests/generated/ExternBlock/ExternBlock_getAttr.ql linguist-generated /test/extractor-tests/generated/ExternBlock/ExternBlock_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/ExternBlock/ExternBlock_getExpanded.ql linguist-generated /test/extractor-tests/generated/ExternBlock/ExternBlock_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/ExternBlock/ExternBlock_getExternItemList.ql linguist-generated /test/extractor-tests/generated/ExternCrate/ExternCrate.ql linguist-generated /test/extractor-tests/generated/ExternCrate/ExternCrate_getAttr.ql linguist-generated /test/extractor-tests/generated/ExternCrate/ExternCrate_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/ExternCrate/ExternCrate_getExpanded.ql linguist-generated /test/extractor-tests/generated/ExternCrate/ExternCrate_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.ql linguist-generated /test/extractor-tests/generated/ExternCrate/ExternCrate_getRename.ql linguist-generated @@ -825,6 +829,7 @@ /test/extractor-tests/generated/Function/Function_getAttr.ql linguist-generated /test/extractor-tests/generated/Function/Function_getBody.ql linguist-generated /test/extractor-tests/generated/Function/Function_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Function/Function_getExpanded.ql linguist-generated /test/extractor-tests/generated/Function/Function_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Function/Function_getGenericParamList.ql linguist-generated /test/extractor-tests/generated/Function/Function_getName.ql linguist-generated @@ -849,6 +854,7 @@ /test/extractor-tests/generated/Impl/Impl_getAssocItemList.ql linguist-generated /test/extractor-tests/generated/Impl/Impl_getAttr.ql linguist-generated /test/extractor-tests/generated/Impl/Impl_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Impl/Impl_getExpanded.ql linguist-generated /test/extractor-tests/generated/Impl/Impl_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Impl/Impl_getGenericParamList.ql linguist-generated /test/extractor-tests/generated/Impl/Impl_getSelfTy.ql linguist-generated @@ -908,6 +914,7 @@ /test/extractor-tests/generated/MacroDef/MacroDef_getAttr.ql linguist-generated /test/extractor-tests/generated/MacroDef/MacroDef_getBody.ql linguist-generated /test/extractor-tests/generated/MacroDef/MacroDef_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/MacroDef/MacroDef_getExpanded.ql linguist-generated /test/extractor-tests/generated/MacroDef/MacroDef_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/MacroDef/MacroDef_getName.ql linguist-generated /test/extractor-tests/generated/MacroDef/MacroDef_getVisibility.ql linguist-generated @@ -920,6 +927,7 @@ /test/extractor-tests/generated/MacroRules/MacroRules.ql linguist-generated /test/extractor-tests/generated/MacroRules/MacroRules_getAttr.ql linguist-generated /test/extractor-tests/generated/MacroRules/MacroRules_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/MacroRules/MacroRules_getExpanded.ql linguist-generated /test/extractor-tests/generated/MacroRules/MacroRules_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/MacroRules/MacroRules_getName.ql linguist-generated /test/extractor-tests/generated/MacroRules/MacroRules_getTokenTree.ql linguist-generated @@ -958,6 +966,7 @@ /test/extractor-tests/generated/Module/Module.ql linguist-generated /test/extractor-tests/generated/Module/Module_getAttr.ql linguist-generated /test/extractor-tests/generated/Module/Module_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Module/Module_getExpanded.ql linguist-generated /test/extractor-tests/generated/Module/Module_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Module/Module_getItemList.ql linguist-generated /test/extractor-tests/generated/Module/Module_getName.ql linguist-generated @@ -1059,6 +1068,7 @@ /test/extractor-tests/generated/Static/Static_getAttr.ql linguist-generated /test/extractor-tests/generated/Static/Static_getBody.ql linguist-generated /test/extractor-tests/generated/Static/Static_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Static/Static_getExpanded.ql linguist-generated /test/extractor-tests/generated/Static/Static_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Static/Static_getName.ql linguist-generated /test/extractor-tests/generated/Static/Static_getTypeRepr.ql linguist-generated @@ -1070,6 +1080,7 @@ /test/extractor-tests/generated/Struct/Struct.ql linguist-generated /test/extractor-tests/generated/Struct/Struct_getAttr.ql linguist-generated /test/extractor-tests/generated/Struct/Struct_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Struct/Struct_getExpanded.ql linguist-generated /test/extractor-tests/generated/Struct/Struct_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Struct/Struct_getFieldList.ql linguist-generated /test/extractor-tests/generated/Struct/Struct_getGenericParamList.ql linguist-generated @@ -1117,6 +1128,7 @@ /test/extractor-tests/generated/Trait/Trait_getAssocItemList.ql linguist-generated /test/extractor-tests/generated/Trait/Trait_getAttr.ql linguist-generated /test/extractor-tests/generated/Trait/Trait_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Trait/Trait_getExpanded.ql linguist-generated /test/extractor-tests/generated/Trait/Trait_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Trait/Trait_getGenericParamList.ql linguist-generated /test/extractor-tests/generated/Trait/Trait_getName.ql linguist-generated @@ -1126,6 +1138,7 @@ /test/extractor-tests/generated/TraitAlias/TraitAlias.ql linguist-generated /test/extractor-tests/generated/TraitAlias/TraitAlias_getAttr.ql linguist-generated /test/extractor-tests/generated/TraitAlias/TraitAlias_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/TraitAlias/TraitAlias_getExpanded.ql linguist-generated /test/extractor-tests/generated/TraitAlias/TraitAlias_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/TraitAlias/TraitAlias_getGenericParamList.ql linguist-generated /test/extractor-tests/generated/TraitAlias/TraitAlias_getName.ql linguist-generated @@ -1156,6 +1169,7 @@ /test/extractor-tests/generated/TypeAlias/TypeAlias.ql linguist-generated /test/extractor-tests/generated/TypeAlias/TypeAlias_getAttr.ql linguist-generated /test/extractor-tests/generated/TypeAlias/TypeAlias_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/TypeAlias/TypeAlias_getExpanded.ql linguist-generated /test/extractor-tests/generated/TypeAlias/TypeAlias_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/TypeAlias/TypeAlias_getGenericParamList.ql linguist-generated /test/extractor-tests/generated/TypeAlias/TypeAlias_getName.ql linguist-generated @@ -1181,6 +1195,7 @@ /test/extractor-tests/generated/Union/Union.ql linguist-generated /test/extractor-tests/generated/Union/Union_getAttr.ql linguist-generated /test/extractor-tests/generated/Union/Union_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Union/Union_getExpanded.ql linguist-generated /test/extractor-tests/generated/Union/Union_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Union/Union_getGenericParamList.ql linguist-generated /test/extractor-tests/generated/Union/Union_getName.ql linguist-generated @@ -1190,6 +1205,7 @@ /test/extractor-tests/generated/Use/Use.ql linguist-generated /test/extractor-tests/generated/Use/Use_getAttr.ql linguist-generated /test/extractor-tests/generated/Use/Use_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Use/Use_getExpanded.ql linguist-generated /test/extractor-tests/generated/Use/Use_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Use/Use_getUseTree.ql linguist-generated /test/extractor-tests/generated/Use/Use_getVisibility.ql linguist-generated diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll b/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll index 12ef6847b821..8631e242e823 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll @@ -1818,16 +1818,6 @@ module MakeCfgNodes Input> { * Holds if `getTokenTree()` exists. */ predicate hasTokenTree() { exists(this.getTokenTree()) } - - /** - * Gets the expanded of this macro call, if it exists. - */ - AstNode getExpanded() { result = node.getExpanded() } - - /** - * Holds if `getExpanded()` exists. - */ - predicate hasExpanded() { exists(this.getExpanded()) } } final private class ParentMacroExpr extends ParentAstNode, MacroExpr { diff --git a/rust/ql/lib/codeql/rust/elements/Item.qll b/rust/ql/lib/codeql/rust/elements/Item.qll index b95620551bad..30c11c6481e4 100644 --- a/rust/ql/lib/codeql/rust/elements/Item.qll +++ b/rust/ql/lib/codeql/rust/elements/Item.qll @@ -5,6 +5,7 @@ private import internal.ItemImpl import codeql.rust.elements.Addressable +import codeql.rust.elements.AstNode import codeql.rust.elements.Stmt /** diff --git a/rust/ql/lib/codeql/rust/elements/MacroCall.qll b/rust/ql/lib/codeql/rust/elements/MacroCall.qll index b0985ea3fed8..5399f1f2a872 100644 --- a/rust/ql/lib/codeql/rust/elements/MacroCall.qll +++ b/rust/ql/lib/codeql/rust/elements/MacroCall.qll @@ -5,7 +5,6 @@ private import internal.MacroCallImpl import codeql.rust.elements.AssocItem -import codeql.rust.elements.AstNode import codeql.rust.elements.Attr import codeql.rust.elements.ExternItem import codeql.rust.elements.Item 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 39149c252587..e93d25f86f33 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Item.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Item.qll @@ -7,6 +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.AstNode import codeql.rust.elements.internal.StmtImpl::Impl as StmtImpl /** @@ -22,5 +23,17 @@ 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 { } + class Item extends Synth::TItem, StmtImpl::Stmt, AddressableImpl::Addressable { + /** + * Gets the expanded attribute or procedural macro call of this item, if it exists. + */ + AstNode getExpanded() { + result = Synth::convertAstNodeFromRaw(Synth::convertItemToRaw(this).(Raw::Item).getExpanded()) + } + + /** + * Holds if `getExpanded()` exists. + */ + final predicate hasExpanded() { exists(this.getExpanded()) } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroCall.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroCall.qll index d95a29cd3029..30717a1a3919 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroCall.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroCall.qll @@ -7,7 +7,6 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.internal.AssocItemImpl::Impl as AssocItemImpl -import codeql.rust.elements.AstNode import codeql.rust.elements.Attr import codeql.rust.elements.internal.ExternItemImpl::Impl as ExternItemImpl import codeql.rust.elements.internal.ItemImpl::Impl as ItemImpl @@ -77,20 +76,5 @@ module Generated { * Holds if `getTokenTree()` exists. */ final predicate hasTokenTree() { exists(this.getTokenTree()) } - - /** - * Gets the expanded of this macro call, if it exists. - */ - AstNode getExpanded() { - result = - Synth::convertAstNodeFromRaw(Synth::convertMacroCallToRaw(this) - .(Raw::MacroCall) - .getExpanded()) - } - - /** - * Holds if `getExpanded()` exists. - */ - final predicate hasExpanded() { exists(this.getExpanded()) } } } 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 4268ef3f8409..d84b28f91173 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -2204,18 +2204,21 @@ private module Impl { } private Element getImmediateChildOfItem(Item e, int index, string partialPredicateCall) { - exists(int b, int bStmt, int bAddressable, int n | + exists(int b, int bStmt, int bAddressable, int n, int nExpanded | 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 + nExpanded = n + 1 and ( none() or result = getImmediateChildOfStmt(e, index - b, partialPredicateCall) or result = getImmediateChildOfAddressable(e, index - bStmt, partialPredicateCall) + or + index = n and result = e.getExpanded() and partialPredicateCall = "Expanded()" ) ) } @@ -3495,8 +3498,7 @@ private module Impl { private Element getImmediateChildOfMacroCall(MacroCall e, int index, string partialPredicateCall) { exists( - int b, int bAssocItem, int bExternItem, int bItem, int n, int nAttr, int nPath, - int nTokenTree, int nExpanded + int b, int bAssocItem, int bExternItem, int bItem, int n, int nAttr, int nPath, int nTokenTree | b = 0 and bAssocItem = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAssocItem(e, i, _)) | i) and @@ -3507,7 +3509,6 @@ private module Impl { nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nPath = nAttr + 1 and nTokenTree = nPath + 1 and - nExpanded = nTokenTree + 1 and ( none() or @@ -3523,8 +3524,6 @@ private module Impl { index = nAttr and result = e.getPath() and partialPredicateCall = "Path()" or index = nPath and result = e.getTokenTree() and partialPredicateCall = "TokenTree()" - or - index = nTokenTree and result = e.getExpanded() and partialPredicateCall = "Expanded()" ) ) } 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 3bd57ae98620..275f143083a5 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -2180,7 +2180,12 @@ module Raw { * todo!() * ``` */ - class Item extends @item, Stmt, Addressable { } + class Item extends @item, Stmt, Addressable { + /** + * Gets the expanded attribute or procedural macro call of this item, if it exists. + */ + AstNode getExpanded() { item_expandeds(this, result) } + } /** * INTERNAL: Do not use. @@ -3620,11 +3625,6 @@ module Raw { * Gets the token tree of this macro call, if it exists. */ TokenTree getTokenTree() { macro_call_token_trees(this, result) } - - /** - * Gets the expanded of this macro call, if it exists. - */ - AstNode getExpanded() { macro_call_expandeds(this, result) } } /** diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index e8707b675dc5..f78cb8f2ab3b 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -1959,6 +1959,12 @@ infer_type_reprs( | @use ; +#keyset[id] +item_expandeds( + int id: @item ref, + int expanded: @ast_node ref +); + @labelable_expr = @block_expr | @looping_expr @@ -3082,12 +3088,6 @@ macro_call_token_trees( int token_tree: @token_tree ref ); -#keyset[id] -macro_call_expandeds( - int id: @macro_call ref, - int expanded: @ast_node ref -); - macro_defs( unique int id: @macro_def ); diff --git a/rust/ql/lib/upgrades/e8707b675dc574aca9863eabcc09ac76f15bb9c2/old.dbscheme b/rust/ql/lib/upgrades/e8707b675dc574aca9863eabcc09ac76f15bb9c2/old.dbscheme new file mode 100644 index 000000000000..e8707b675dc5 --- /dev/null +++ b/rust/ql/lib/upgrades/e8707b675dc574aca9863eabcc09ac76f15bb9c2/old.dbscheme @@ -0,0 +1,3606 @@ +// 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 +| @macro_stmts +| @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] +crate_modules( + int id: @crate ref, + int module: @module 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_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 +); + +macro_stmts( + unique int id: @macro_stmts +); + +#keyset[id] +macro_stmts_exprs( + int id: @macro_stmts ref, + int expr: @expr ref +); + +#keyset[id, index] +macro_stmts_statements( + int id: @macro_stmts ref, + int index: int ref, + int statement: @stmt 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 +; + +@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_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 +); + +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 +); + +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_expandeds( + int id: @macro_call ref, + int expanded: @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/e8707b675dc574aca9863eabcc09ac76f15bb9c2/rust.dbscheme b/rust/ql/lib/upgrades/e8707b675dc574aca9863eabcc09ac76f15bb9c2/rust.dbscheme new file mode 100644 index 000000000000..f78cb8f2ab3b --- /dev/null +++ b/rust/ql/lib/upgrades/e8707b675dc574aca9863eabcc09ac76f15bb9c2/rust.dbscheme @@ -0,0 +1,3606 @@ +// 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 +| @macro_stmts +| @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] +crate_modules( + int id: @crate ref, + int module: @module 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_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 +); + +macro_stmts( + unique int id: @macro_stmts +); + +#keyset[id] +macro_stmts_exprs( + int id: @macro_stmts ref, + int expr: @expr ref +); + +#keyset[id, index] +macro_stmts_statements( + int id: @macro_stmts ref, + int index: int ref, + int statement: @stmt 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_expandeds( + int id: @item ref, + int expanded: @ast_node 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_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 +); + +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 +); + +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 +); + +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/e8707b675dc574aca9863eabcc09ac76f15bb9c2/upgrade.properties b/rust/ql/lib/upgrades/e8707b675dc574aca9863eabcc09ac76f15bb9c2/upgrade.properties new file mode 100644 index 000000000000..5834a727f49c --- /dev/null +++ b/rust/ql/lib/upgrades/e8707b675dc574aca9863eabcc09ac76f15bb9c2/upgrade.properties @@ -0,0 +1,4 @@ +description: Add `expanded` to all `@item` elements +compatibility: backwards +item_expandeds.rel: reorder macro_call_expandeds.rel (@macro_call id, @ast_node expanded) id expanded +macro_call_expandeds.rel: delete diff --git a/rust/ql/test/extractor-tests/attribute_macro_expansion/attr_macro_expansion.rs b/rust/ql/test/extractor-tests/attribute_macro_expansion/attr_macro_expansion.rs new file mode 100644 index 000000000000..8ccaa6276c6a --- /dev/null +++ b/rust/ql/test/extractor-tests/attribute_macro_expansion/attr_macro_expansion.rs @@ -0,0 +1,2 @@ +#[ctor::ctor] +fn foo() {} diff --git a/rust/ql/test/extractor-tests/attribute_macro_expansion/options.yml b/rust/ql/test/extractor-tests/attribute_macro_expansion/options.yml new file mode 100644 index 000000000000..07ec8d1b4eb3 --- /dev/null +++ b/rust/ql/test/extractor-tests/attribute_macro_expansion/options.yml @@ -0,0 +1,2 @@ +qltest_dependencies: + - ctor = { version = "0.2.9" } diff --git a/rust/ql/test/extractor-tests/attribute_macro_expansion/test.expected b/rust/ql/test/extractor-tests/attribute_macro_expansion/test.expected new file mode 100644 index 000000000000..c6815fb38287 --- /dev/null +++ b/rust/ql/test/extractor-tests/attribute_macro_expansion/test.expected @@ -0,0 +1,2 @@ +| attr_macro_expansion.rs:1:1:2:11 | fn foo | attr_macro_expansion.rs:2:4:2:6 | Static | +| attr_macro_expansion.rs:1:1:2:11 | fn foo | attr_macro_expansion.rs:2:4:2:10 | fn foo | diff --git a/rust/ql/test/extractor-tests/attribute_macro_expansion/test.ql b/rust/ql/test/extractor-tests/attribute_macro_expansion/test.ql new file mode 100644 index 000000000000..f8d2f17b75e0 --- /dev/null +++ b/rust/ql/test/extractor-tests/attribute_macro_expansion/test.ql @@ -0,0 +1,6 @@ +import rust +import TestUtils + +from Item i, MacroItems items, Item expanded +where toBeTested(i) and i.getExpanded() = items and items.getAnItem() = expanded +select i, expanded diff --git a/rust/ql/test/extractor-tests/generated/Const/Const.ql b/rust/ql/test/extractor-tests/generated/Const/Const.ql index f1509aac3689..859bc139866f 100644 --- a/rust/ql/test/extractor-tests/generated/Const/Const.ql +++ b/rust/ql/test/extractor-tests/generated/Const/Const.ql @@ -3,9 +3,9 @@ import codeql.rust.elements import TestUtils from - Const x, string hasExtendedCanonicalPath, string hasCrateOrigin, int getNumberOfAttrs, - string hasBody, string isConst, string isDefault, string hasName, string hasTypeRepr, - string hasVisibility + Const x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, + int getNumberOfAttrs, string hasBody, string isConst, string isDefault, string hasName, + string hasTypeRepr, string hasVisibility where toBeTested(x) and not x.isUnknown() and @@ -15,6 +15,7 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "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 @@ -23,5 +24,6 @@ where (if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no") and if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "getNumberOfAttrs:", getNumberOfAttrs, "hasBody:", hasBody, "isConst:", isConst, "isDefault:", - isDefault, "hasName:", hasName, "hasTypeRepr:", hasTypeRepr, "hasVisibility:", hasVisibility + "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasBody:", hasBody, + "isConst:", isConst, "isDefault:", isDefault, "hasName:", hasName, "hasTypeRepr:", hasTypeRepr, + "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getExpanded.ql b/rust/ql/test/extractor-tests/generated/Const/Const_getExpanded.ql new file mode 100644 index 000000000000..8f608b857bc9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Const/Const_getExpanded.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Const x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpanded() diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum.ql b/rust/ql/test/extractor-tests/generated/Enum/Enum.ql index 3468056c072b..76f3c2941b0d 100644 --- a/rust/ql/test/extractor-tests/generated/Enum/Enum.ql +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum.ql @@ -3,9 +3,9 @@ import codeql.rust.elements import TestUtils from - Enum x, string hasExtendedCanonicalPath, string hasCrateOrigin, int getNumberOfAttrs, - string hasGenericParamList, string hasName, string hasVariantList, string hasVisibility, - string hasWhereClause + Enum x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, + int getNumberOfAttrs, string hasGenericParamList, string hasName, string hasVariantList, + string hasVisibility, string hasWhereClause where toBeTested(x) and not x.isUnknown() and @@ -15,6 +15,7 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no") and (if x.hasName() then hasName = "yes" else hasName = "no") and @@ -22,6 +23,6 @@ where (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, - "getNumberOfAttrs:", getNumberOfAttrs, "hasGenericParamList:", hasGenericParamList, "hasName:", - hasName, "hasVariantList:", hasVariantList, "hasVisibility:", hasVisibility, "hasWhereClause:", - hasWhereClause + "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasGenericParamList:", + hasGenericParamList, "hasName:", hasName, "hasVariantList:", hasVariantList, "hasVisibility:", + hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getExpanded.ql b/rust/ql/test/extractor-tests/generated/Enum/Enum_getExpanded.ql new file mode 100644 index 000000000000..428223feaae5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum_getExpanded.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Enum x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpanded() diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.ql b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.ql index 3d58a4714123..b1fa57580a12 100644 --- a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.ql +++ b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.ql @@ -3,8 +3,8 @@ import codeql.rust.elements import TestUtils from - ExternBlock x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasAbi, - int getNumberOfAttrs, string hasExternItemList, string isUnsafe + ExternBlock x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, + string hasAbi, int getNumberOfAttrs, string hasExternItemList, string isUnsafe where toBeTested(x) and not x.isUnknown() and @@ -14,10 +14,11 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no") and (if x.hasAbi() then hasAbi = "yes" else hasAbi = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasExternItemList() then hasExternItemList = "yes" else hasExternItemList = "no") and if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no" select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "hasAbi:", hasAbi, "getNumberOfAttrs:", getNumberOfAttrs, "hasExternItemList:", hasExternItemList, - "isUnsafe:", isUnsafe + "hasExpanded:", hasExpanded, "hasAbi:", hasAbi, "getNumberOfAttrs:", getNumberOfAttrs, + "hasExternItemList:", hasExternItemList, "isUnsafe:", isUnsafe diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExpanded.ql b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExpanded.ql new file mode 100644 index 000000000000..e7819652b38a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExpanded.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ExternBlock x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpanded() diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.ql b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.ql index c8250d86b4b0..03ef38925eab 100644 --- a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.ql +++ b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.ql @@ -3,8 +3,8 @@ import codeql.rust.elements import TestUtils from - ExternCrate x, string hasExtendedCanonicalPath, string hasCrateOrigin, int getNumberOfAttrs, - string hasIdentifier, string hasRename, string hasVisibility + ExternCrate x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, + int getNumberOfAttrs, string hasIdentifier, string hasRename, string hasVisibility where toBeTested(x) and not x.isUnknown() and @@ -14,10 +14,11 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasIdentifier() then hasIdentifier = "yes" else hasIdentifier = "no") and (if x.hasRename() then hasRename = "yes" else hasRename = "no") and if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "getNumberOfAttrs:", getNumberOfAttrs, "hasIdentifier:", hasIdentifier, "hasRename:", hasRename, - "hasVisibility:", hasVisibility + "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasIdentifier:", + hasIdentifier, "hasRename:", hasRename, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getExpanded.ql b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getExpanded.ql new file mode 100644 index 000000000000..28cdb0138d97 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getExpanded.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ExternCrate x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpanded() diff --git a/rust/ql/test/extractor-tests/generated/Function/Function.ql b/rust/ql/test/extractor-tests/generated/Function/Function.ql index a6e969111fb9..162f8af6d753 100644 --- a/rust/ql/test/extractor-tests/generated/Function/Function.ql +++ b/rust/ql/test/extractor-tests/generated/Function/Function.ql @@ -4,9 +4,9 @@ import TestUtils from Function x, string hasParamList, int getNumberOfAttrs, 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 hasCrateOrigin, string hasExpanded, string hasAbi, string hasBody, + string hasGenericParamList, string isAsync, string isConst, string isDefault, string isGen, + string isUnsafe, string hasName, string hasRetType, string hasVisibility, string hasWhereClause where toBeTested(x) and not x.isUnknown() and @@ -18,6 +18,7 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "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 @@ -32,7 +33,7 @@ where if x.hasWhereClause() then hasWhereClause = "yes" else hasWhereClause = "no" select x, "hasParamList:", hasParamList, "getNumberOfAttrs:", getNumberOfAttrs, "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, - "hasWhereClause:", hasWhereClause + "hasExpanded:", hasExpanded, "hasAbi:", hasAbi, "hasBody:", hasBody, "hasGenericParamList:", + hasGenericParamList, "isAsync:", isAsync, "isConst:", isConst, "isDefault:", isDefault, "isGen:", + isGen, "isUnsafe:", isUnsafe, "hasName:", hasName, "hasRetType:", hasRetType, "hasVisibility:", + hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getExpanded.ql b/rust/ql/test/extractor-tests/generated/Function/Function_getExpanded.ql new file mode 100644 index 000000000000..7a994831e7db --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getExpanded.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Function x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpanded() diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl.ql b/rust/ql/test/extractor-tests/generated/Impl/Impl.ql index 5af0d0da0d44..cc7ffd762088 100644 --- a/rust/ql/test/extractor-tests/generated/Impl/Impl.ql +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl.ql @@ -3,9 +3,10 @@ import codeql.rust.elements import TestUtils from - Impl x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasAssocItemList, - int getNumberOfAttrs, string hasGenericParamList, string isConst, string isDefault, - string isUnsafe, string hasSelfTy, string hasTrait, string hasVisibility, string hasWhereClause + Impl x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, + string hasAssocItemList, int getNumberOfAttrs, string hasGenericParamList, string isConst, + string isDefault, string isUnsafe, string hasSelfTy, string hasTrait, string hasVisibility, + string hasWhereClause where toBeTested(x) and not x.isUnknown() and @@ -15,6 +16,7 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no") and (if x.hasAssocItemList() then hasAssocItemList = "yes" else hasAssocItemList = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no") and @@ -26,7 +28,7 @@ where (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, - "hasAssocItemList:", hasAssocItemList, "getNumberOfAttrs:", getNumberOfAttrs, - "hasGenericParamList:", hasGenericParamList, "isConst:", isConst, "isDefault:", isDefault, - "isUnsafe:", isUnsafe, "hasSelfTy:", hasSelfTy, "hasTrait:", hasTrait, "hasVisibility:", - hasVisibility, "hasWhereClause:", hasWhereClause + "hasExpanded:", hasExpanded, "hasAssocItemList:", hasAssocItemList, "getNumberOfAttrs:", + getNumberOfAttrs, "hasGenericParamList:", hasGenericParamList, "isConst:", isConst, "isDefault:", + isDefault, "isUnsafe:", isUnsafe, "hasSelfTy:", hasSelfTy, "hasTrait:", hasTrait, + "hasVisibility:", hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getExpanded.ql b/rust/ql/test/extractor-tests/generated/Impl/Impl_getExpanded.ql new file mode 100644 index 000000000000..dc85f4c06fdb --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl_getExpanded.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Impl x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpanded() diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql index 56044c127c26..c9fa32e3c00e 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql @@ -3,8 +3,8 @@ import codeql.rust.elements import TestUtils from - MacroCall x, string hasExtendedCanonicalPath, string hasCrateOrigin, int getNumberOfAttrs, - string hasPath, string hasTokenTree, string hasExpanded + MacroCall x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, + int getNumberOfAttrs, string hasPath, string hasTokenTree where toBeTested(x) and not x.isUnknown() and @@ -14,10 +14,10 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "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.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no" + if x.hasTokenTree() then hasTokenTree = "yes" else hasTokenTree = "no" select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "getNumberOfAttrs:", getNumberOfAttrs, "hasPath:", hasPath, "hasTokenTree:", hasTokenTree, - "hasExpanded:", hasExpanded + "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasPath:", hasPath, + "hasTokenTree:", hasTokenTree diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.ql b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.ql index 957d5b9ea9ee..ed235d8312a6 100644 --- a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.ql +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.ql @@ -3,8 +3,8 @@ import codeql.rust.elements import TestUtils from - MacroDef x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasArgs, - int getNumberOfAttrs, string hasBody, string hasName, string hasVisibility + MacroDef x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, + string hasArgs, int getNumberOfAttrs, string hasBody, string hasName, string hasVisibility where toBeTested(x) and not x.isUnknown() and @@ -14,11 +14,12 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no") and (if x.hasArgs() then hasArgs = "yes" else hasArgs = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasBody() then hasBody = "yes" else hasBody = "no") and (if x.hasName() then hasName = "yes" else hasName = "no") and if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "hasArgs:", hasArgs, "getNumberOfAttrs:", getNumberOfAttrs, "hasBody:", hasBody, "hasName:", - hasName, "hasVisibility:", hasVisibility + "hasExpanded:", hasExpanded, "hasArgs:", hasArgs, "getNumberOfAttrs:", getNumberOfAttrs, + "hasBody:", hasBody, "hasName:", hasName, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getExpanded.ql b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getExpanded.ql new file mode 100644 index 000000000000..cc97ad20927b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getExpanded.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroDef x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpanded() diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.ql b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.ql index 7bdc462c01cd..a04df90d75d0 100644 --- a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.ql +++ b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.ql @@ -3,8 +3,8 @@ import codeql.rust.elements import TestUtils from - MacroRules x, string hasExtendedCanonicalPath, string hasCrateOrigin, int getNumberOfAttrs, - string hasName, string hasTokenTree, string hasVisibility + MacroRules x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, + int getNumberOfAttrs, string hasName, string hasTokenTree, string hasVisibility where toBeTested(x) and not x.isUnknown() and @@ -14,10 +14,11 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasName() then hasName = "yes" else hasName = "no") and (if x.hasTokenTree() then hasTokenTree = "yes" else hasTokenTree = "no") and if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "getNumberOfAttrs:", getNumberOfAttrs, "hasName:", hasName, "hasTokenTree:", hasTokenTree, - "hasVisibility:", hasVisibility + "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasName:", hasName, + "hasTokenTree:", hasTokenTree, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getExpanded.ql b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getExpanded.ql new file mode 100644 index 000000000000..4fdf9f944698 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getExpanded.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroRules x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpanded() diff --git a/rust/ql/test/extractor-tests/generated/Module/Module.ql b/rust/ql/test/extractor-tests/generated/Module/Module.ql index a33b7daa8954..8cf7f20a20fb 100644 --- a/rust/ql/test/extractor-tests/generated/Module/Module.ql +++ b/rust/ql/test/extractor-tests/generated/Module/Module.ql @@ -3,8 +3,8 @@ import codeql.rust.elements import TestUtils from - Module x, string hasExtendedCanonicalPath, string hasCrateOrigin, int getNumberOfAttrs, - string hasItemList, string hasName, string hasVisibility + Module x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, + int getNumberOfAttrs, string hasItemList, string hasName, string hasVisibility where toBeTested(x) and not x.isUnknown() and @@ -14,10 +14,11 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasItemList() then hasItemList = "yes" else hasItemList = "no") and (if x.hasName() then hasName = "yes" else hasName = "no") and if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "getNumberOfAttrs:", getNumberOfAttrs, "hasItemList:", hasItemList, "hasName:", hasName, - "hasVisibility:", hasVisibility + "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasItemList:", hasItemList, + "hasName:", hasName, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getExpanded.ql b/rust/ql/test/extractor-tests/generated/Module/Module_getExpanded.ql new file mode 100644 index 000000000000..139b6d007dd6 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Module/Module_getExpanded.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Module x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpanded() diff --git a/rust/ql/test/extractor-tests/generated/Static/Static.ql b/rust/ql/test/extractor-tests/generated/Static/Static.ql index fa0776ca377c..84a5077826bd 100644 --- a/rust/ql/test/extractor-tests/generated/Static/Static.ql +++ b/rust/ql/test/extractor-tests/generated/Static/Static.ql @@ -3,9 +3,9 @@ import codeql.rust.elements import TestUtils from - Static x, string hasExtendedCanonicalPath, string hasCrateOrigin, int getNumberOfAttrs, - string hasBody, string isMut, string isStatic, string isUnsafe, string hasName, - string hasTypeRepr, string hasVisibility + Static x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, + int getNumberOfAttrs, string hasBody, string isMut, string isStatic, string isUnsafe, + string hasName, string hasTypeRepr, string hasVisibility where toBeTested(x) and not x.isUnknown() and @@ -15,6 +15,7 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasBody() then hasBody = "yes" else hasBody = "no") and (if x.isMut() then isMut = "yes" else isMut = "no") and @@ -24,6 +25,6 @@ where (if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no") and if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "getNumberOfAttrs:", getNumberOfAttrs, "hasBody:", hasBody, "isMut:", isMut, "isStatic:", - isStatic, "isUnsafe:", isUnsafe, "hasName:", hasName, "hasTypeRepr:", hasTypeRepr, - "hasVisibility:", hasVisibility + "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasBody:", hasBody, "isMut:", + isMut, "isStatic:", isStatic, "isUnsafe:", isUnsafe, "hasName:", hasName, "hasTypeRepr:", + hasTypeRepr, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getExpanded.ql b/rust/ql/test/extractor-tests/generated/Static/Static_getExpanded.ql new file mode 100644 index 000000000000..2f8c034f4c9a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Static/Static_getExpanded.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Static x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpanded() diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct.ql b/rust/ql/test/extractor-tests/generated/Struct/Struct.ql index d2b3a349386c..5e9936dd07fd 100644 --- a/rust/ql/test/extractor-tests/generated/Struct/Struct.ql +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct.ql @@ -3,9 +3,9 @@ import codeql.rust.elements import TestUtils from - Struct x, string hasExtendedCanonicalPath, string hasCrateOrigin, int getNumberOfAttrs, - string hasFieldList, string hasGenericParamList, string hasName, string hasVisibility, - string hasWhereClause + Struct x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, + int getNumberOfAttrs, string hasFieldList, string hasGenericParamList, string hasName, + string hasVisibility, string hasWhereClause where toBeTested(x) and not x.isUnknown() and @@ -15,6 +15,7 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasFieldList() then hasFieldList = "yes" else hasFieldList = "no") and (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no") and @@ -22,6 +23,6 @@ where (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, - "getNumberOfAttrs:", getNumberOfAttrs, "hasFieldList:", hasFieldList, "hasGenericParamList:", - hasGenericParamList, "hasName:", hasName, "hasVisibility:", hasVisibility, "hasWhereClause:", - hasWhereClause + "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasFieldList:", hasFieldList, + "hasGenericParamList:", hasGenericParamList, "hasName:", hasName, "hasVisibility:", hasVisibility, + "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getExpanded.ql b/rust/ql/test/extractor-tests/generated/Struct/Struct_getExpanded.ql new file mode 100644 index 000000000000..cd9b80356c43 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct_getExpanded.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Struct x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpanded() diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait.ql b/rust/ql/test/extractor-tests/generated/Trait/Trait.ql index b4548cddceee..c10c3685fc95 100644 --- a/rust/ql/test/extractor-tests/generated/Trait/Trait.ql +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait.ql @@ -3,9 +3,10 @@ import codeql.rust.elements import TestUtils from - Trait x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasAssocItemList, - int getNumberOfAttrs, string hasGenericParamList, string isAuto, string isUnsafe, string hasName, - string hasTypeBoundList, string hasVisibility, string hasWhereClause + Trait x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, + string hasAssocItemList, int getNumberOfAttrs, string hasGenericParamList, string isAuto, + string isUnsafe, string hasName, string hasTypeBoundList, string hasVisibility, + string hasWhereClause where toBeTested(x) and not x.isUnknown() and @@ -15,6 +16,7 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no") and (if x.hasAssocItemList() then hasAssocItemList = "yes" else hasAssocItemList = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no") and @@ -25,7 +27,7 @@ where (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, - "hasAssocItemList:", hasAssocItemList, "getNumberOfAttrs:", getNumberOfAttrs, - "hasGenericParamList:", hasGenericParamList, "isAuto:", isAuto, "isUnsafe:", isUnsafe, "hasName:", - hasName, "hasTypeBoundList:", hasTypeBoundList, "hasVisibility:", hasVisibility, - "hasWhereClause:", hasWhereClause + "hasExpanded:", hasExpanded, "hasAssocItemList:", hasAssocItemList, "getNumberOfAttrs:", + getNumberOfAttrs, "hasGenericParamList:", hasGenericParamList, "isAuto:", isAuto, "isUnsafe:", + isUnsafe, "hasName:", hasName, "hasTypeBoundList:", hasTypeBoundList, "hasVisibility:", + hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getExpanded.ql b/rust/ql/test/extractor-tests/generated/Trait/Trait_getExpanded.ql new file mode 100644 index 000000000000..22425676ccb2 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getExpanded.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Trait x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpanded() diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.ql b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.ql index 80fe86e27493..d01a2bf22c7f 100644 --- a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.ql +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.ql @@ -3,9 +3,9 @@ import codeql.rust.elements import TestUtils from - TraitAlias x, string hasExtendedCanonicalPath, string hasCrateOrigin, int getNumberOfAttrs, - string hasGenericParamList, string hasName, string hasTypeBoundList, string hasVisibility, - string hasWhereClause + TraitAlias x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, + int getNumberOfAttrs, string hasGenericParamList, string hasName, string hasTypeBoundList, + string hasVisibility, string hasWhereClause where toBeTested(x) and not x.isUnknown() and @@ -15,6 +15,7 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no") and (if x.hasName() then hasName = "yes" else hasName = "no") and @@ -22,6 +23,6 @@ where (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, - "getNumberOfAttrs:", getNumberOfAttrs, "hasGenericParamList:", hasGenericParamList, "hasName:", - hasName, "hasTypeBoundList:", hasTypeBoundList, "hasVisibility:", hasVisibility, - "hasWhereClause:", hasWhereClause + "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasGenericParamList:", + hasGenericParamList, "hasName:", hasName, "hasTypeBoundList:", hasTypeBoundList, "hasVisibility:", + hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getExpanded.ql b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getExpanded.ql new file mode 100644 index 000000000000..3a8abe17f826 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getExpanded.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TraitAlias x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpanded() diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql index 16e92ed7e023..51544c36a820 100644 --- a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql @@ -3,9 +3,9 @@ import codeql.rust.elements import TestUtils from - TypeAlias x, string hasExtendedCanonicalPath, string hasCrateOrigin, int getNumberOfAttrs, - string hasGenericParamList, string isDefault, string hasName, string hasTypeRepr, - string hasTypeBoundList, string hasVisibility, string hasWhereClause + TypeAlias x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, + int getNumberOfAttrs, string hasGenericParamList, string isDefault, string hasName, + string hasTypeRepr, string hasTypeBoundList, string hasVisibility, string hasWhereClause where toBeTested(x) and not x.isUnknown() and @@ -15,6 +15,7 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "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 @@ -24,6 +25,7 @@ where (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, - "getNumberOfAttrs:", getNumberOfAttrs, "hasGenericParamList:", hasGenericParamList, "isDefault:", - isDefault, "hasName:", hasName, "hasTypeRepr:", hasTypeRepr, "hasTypeBoundList:", - hasTypeBoundList, "hasVisibility:", hasVisibility, "hasWhereClause:", hasWhereClause + "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasGenericParamList:", + hasGenericParamList, "isDefault:", isDefault, "hasName:", hasName, "hasTypeRepr:", hasTypeRepr, + "hasTypeBoundList:", hasTypeBoundList, "hasVisibility:", hasVisibility, "hasWhereClause:", + hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getExpanded.ql b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getExpanded.ql new file mode 100644 index 000000000000..2a3857594228 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getExpanded.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TypeAlias x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpanded() diff --git a/rust/ql/test/extractor-tests/generated/Union/Union.ql b/rust/ql/test/extractor-tests/generated/Union/Union.ql index a514017b7345..a5eb910d0b3c 100644 --- a/rust/ql/test/extractor-tests/generated/Union/Union.ql +++ b/rust/ql/test/extractor-tests/generated/Union/Union.ql @@ -3,9 +3,9 @@ import codeql.rust.elements import TestUtils from - Union x, string hasExtendedCanonicalPath, string hasCrateOrigin, int getNumberOfAttrs, - string hasGenericParamList, string hasName, string hasStructFieldList, string hasVisibility, - string hasWhereClause + Union x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, + int getNumberOfAttrs, string hasGenericParamList, string hasName, string hasStructFieldList, + string hasVisibility, string hasWhereClause where toBeTested(x) and not x.isUnknown() and @@ -15,6 +15,7 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no") and (if x.hasName() then hasName = "yes" else hasName = "no") and @@ -22,6 +23,6 @@ where (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, - "getNumberOfAttrs:", getNumberOfAttrs, "hasGenericParamList:", hasGenericParamList, "hasName:", - hasName, "hasStructFieldList:", hasStructFieldList, "hasVisibility:", hasVisibility, - "hasWhereClause:", hasWhereClause + "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasGenericParamList:", + hasGenericParamList, "hasName:", hasName, "hasStructFieldList:", hasStructFieldList, + "hasVisibility:", hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getExpanded.ql b/rust/ql/test/extractor-tests/generated/Union/Union_getExpanded.ql new file mode 100644 index 000000000000..d76e97d362a5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Union/Union_getExpanded.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Union x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpanded() diff --git a/rust/ql/test/extractor-tests/generated/Use/Use.ql b/rust/ql/test/extractor-tests/generated/Use/Use.ql index b88b3a693322..d88546c73fea 100644 --- a/rust/ql/test/extractor-tests/generated/Use/Use.ql +++ b/rust/ql/test/extractor-tests/generated/Use/Use.ql @@ -3,8 +3,8 @@ import codeql.rust.elements import TestUtils from - Use x, string hasExtendedCanonicalPath, string hasCrateOrigin, int getNumberOfAttrs, - string hasUseTree, string hasVisibility + Use x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, + int getNumberOfAttrs, string hasUseTree, string hasVisibility where toBeTested(x) and not x.isUnknown() and @@ -14,8 +14,10 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasUseTree() then hasUseTree = "yes" else hasUseTree = "no") and if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "getNumberOfAttrs:", getNumberOfAttrs, "hasUseTree:", hasUseTree, "hasVisibility:", hasVisibility + "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasUseTree:", hasUseTree, + "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/Use/Use_getExpanded.ql b/rust/ql/test/extractor-tests/generated/Use/Use_getExpanded.ql new file mode 100644 index 000000000000..39d2fa9f4f63 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Use/Use_getExpanded.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Use x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpanded() diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index a5c3ff56651a..d6289e795c4f 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -1232,7 +1232,6 @@ class _: todo!() ``` """ - expanded: optional[AstNode] | child | rust.detach @annotate(MacroDef) @@ -1945,4 +1944,4 @@ class FormatArgument(Locatable): @annotate(Item, add_bases=(Addressable,)) class _: - pass + expanded: optional[AstNode] | child | rust.detach | doc("expanded attribute or procedural macro call of this item") From adeaceb7afe7e3a9b4c8c97bf80a73f4a1784307 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Fri, 25 Apr 2025 17:41:13 +0200 Subject: [PATCH 02/10] Rust: accept test changes --- .../extractor-tests/generated/Function/Function.expected | 4 ++-- .../extractor-tests/generated/MacroCall/MacroCall.expected | 2 +- .../test/extractor-tests/generated/Module/Module.expected | 6 +++--- rust/ql/test/extractor-tests/generated/Trait/Trait.expected | 4 ++-- .../extractor-tests/generated/TypeAlias/TypeAlias.expected | 4 ++-- .../library-tests/dataflow/sources/TaintSources.expected | 1 + 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/rust/ql/test/extractor-tests/generated/Function/Function.expected b/rust/ql/test/extractor-tests/generated/Function/Function.expected index b96996beef94..e37c985985a7 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 | 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 | -| gen_function.rs:7:5:7:13 | fn bar | hasParamList: | yes | getNumberOfAttrs: | 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 | +| gen_function.rs:3:1:4:38 | fn foo | hasParamList: | yes | getNumberOfAttrs: | 0 | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasExpanded: | 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 | +| gen_function.rs:7:5:7:13 | fn bar | hasParamList: | yes | getNumberOfAttrs: | 0 | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasExpanded: | 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 | diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected index db69c4e068ab..b5bf260e2f40 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected @@ -1 +1 @@ -| gen_macro_call.rs:5:5:5:11 | todo!... | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | getNumberOfAttrs: | 0 | hasPath: | yes | hasTokenTree: | yes | hasExpanded: | yes | +| gen_macro_call.rs:5:5:5:11 | todo!... | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasExpanded: | yes | getNumberOfAttrs: | 0 | hasPath: | yes | hasTokenTree: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Module/Module.expected b/rust/ql/test/extractor-tests/generated/Module/Module.expected index 11b6d9e1e9bd..18f7e911fe3f 100644 --- a/rust/ql/test/extractor-tests/generated/Module/Module.expected +++ b/rust/ql/test/extractor-tests/generated/Module/Module.expected @@ -1,3 +1,3 @@ -| gen_module.rs:3:1:4:8 | mod foo | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | getNumberOfAttrs: | 0 | hasItemList: | no | hasName: | yes | hasVisibility: | no | -| gen_module.rs:5:1:7:1 | mod bar | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | getNumberOfAttrs: | 0 | hasItemList: | yes | hasName: | yes | hasVisibility: | no | -| lib.rs:1:1:1:15 | mod gen_module | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | getNumberOfAttrs: | 0 | hasItemList: | no | hasName: | yes | hasVisibility: | no | +| gen_module.rs:3:1:4:8 | mod foo | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasExpanded: | no | getNumberOfAttrs: | 0 | hasItemList: | no | hasName: | yes | hasVisibility: | no | +| gen_module.rs:5:1:7:1 | mod bar | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasExpanded: | no | getNumberOfAttrs: | 0 | hasItemList: | yes | hasName: | yes | hasVisibility: | no | +| lib.rs:1:1:1:15 | mod gen_module | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasExpanded: | no | getNumberOfAttrs: | 0 | hasItemList: | no | hasName: | yes | hasVisibility: | no | diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait.expected index 451422d330ab..33dd170e7664 100644 --- a/rust/ql/test/extractor-tests/generated/Trait/Trait.expected +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait.expected @@ -1,2 +1,2 @@ -| gen_trait.rs:3:1:8:1 | trait Frobinizable | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAssocItemList: | yes | getNumberOfAttrs: | 0 | hasGenericParamList: | no | isAuto: | no | isUnsafe: | no | hasName: | yes | hasTypeBoundList: | no | hasVisibility: | no | hasWhereClause: | no | -| gen_trait.rs:10:1:10:57 | trait Foo | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAssocItemList: | yes | getNumberOfAttrs: | 0 | hasGenericParamList: | yes | isAuto: | no | isUnsafe: | no | hasName: | yes | hasTypeBoundList: | no | hasVisibility: | yes | hasWhereClause: | yes | +| gen_trait.rs:3:1:8:1 | trait Frobinizable | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasExpanded: | no | hasAssocItemList: | yes | getNumberOfAttrs: | 0 | hasGenericParamList: | no | isAuto: | no | isUnsafe: | no | hasName: | yes | hasTypeBoundList: | no | hasVisibility: | no | hasWhereClause: | no | +| gen_trait.rs:10:1:10:57 | trait Foo | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasExpanded: | no | hasAssocItemList: | yes | getNumberOfAttrs: | 0 | hasGenericParamList: | yes | isAuto: | no | isUnsafe: | no | hasName: | yes | hasTypeBoundList: | no | hasVisibility: | yes | hasWhereClause: | yes | diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.expected b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.expected index 19ccc9349b1f..9168aed43d51 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 | 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 | 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 | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasExpanded: | 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 | hasExpanded: | no | getNumberOfAttrs: | 0 | hasGenericParamList: | no | isDefault: | no | hasName: | yes | hasTypeRepr: | no | hasTypeBoundList: | no | hasVisibility: | no | hasWhereClause: | no | diff --git a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected index ba7eeae00081..2b3b91e1abc9 100644 --- a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected +++ b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected @@ -47,3 +47,4 @@ | test.rs:369:25:369:43 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | | test.rs:377:22:377:35 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | | test.rs:386:16:386:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:386:16:386:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | From 2d32c366d8a470d74ce05f74913a80e02c75aafd Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 28 Apr 2025 10:46:36 +0200 Subject: [PATCH 03/10] Rust: add missing expected files --- .../extractor-tests/generated/Const/Const_getExpanded.expected | 0 .../test/extractor-tests/generated/Enum/Enum_getExpanded.expected | 0 .../generated/ExternBlock/ExternBlock_getExpanded.expected | 0 .../generated/ExternCrate/ExternCrate_getExpanded.expected | 0 .../generated/Function/Function_getExpanded.expected | 0 .../test/extractor-tests/generated/Impl/Impl_getExpanded.expected | 0 .../generated/MacroDef/MacroDef_getExpanded.expected | 0 .../generated/MacroRules/MacroRules_getExpanded.expected | 0 .../extractor-tests/generated/Module/Module_getExpanded.expected | 0 .../extractor-tests/generated/Static/Static_getExpanded.expected | 0 .../extractor-tests/generated/Struct/Struct_getExpanded.expected | 0 .../extractor-tests/generated/Trait/Trait_getExpanded.expected | 0 .../generated/TraitAlias/TraitAlias_getExpanded.expected | 0 .../generated/TypeAlias/TypeAlias_getExpanded.expected | 0 .../extractor-tests/generated/Union/Union_getExpanded.expected | 0 .../test/extractor-tests/generated/Use/Use_getExpanded.expected | 0 16 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 rust/ql/test/extractor-tests/generated/Const/Const_getExpanded.expected create mode 100644 rust/ql/test/extractor-tests/generated/Enum/Enum_getExpanded.expected create mode 100644 rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExpanded.expected create mode 100644 rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getExpanded.expected create mode 100644 rust/ql/test/extractor-tests/generated/Function/Function_getExpanded.expected create mode 100644 rust/ql/test/extractor-tests/generated/Impl/Impl_getExpanded.expected create mode 100644 rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getExpanded.expected create mode 100644 rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getExpanded.expected create mode 100644 rust/ql/test/extractor-tests/generated/Module/Module_getExpanded.expected create mode 100644 rust/ql/test/extractor-tests/generated/Static/Static_getExpanded.expected create mode 100644 rust/ql/test/extractor-tests/generated/Struct/Struct_getExpanded.expected create mode 100644 rust/ql/test/extractor-tests/generated/Trait/Trait_getExpanded.expected create mode 100644 rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getExpanded.expected create mode 100644 rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getExpanded.expected create mode 100644 rust/ql/test/extractor-tests/generated/Union/Union_getExpanded.expected create mode 100644 rust/ql/test/extractor-tests/generated/Use/Use_getExpanded.expected diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getExpanded.expected b/rust/ql/test/extractor-tests/generated/Const/Const_getExpanded.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getExpanded.expected b/rust/ql/test/extractor-tests/generated/Enum/Enum_getExpanded.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExpanded.expected b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExpanded.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getExpanded.expected b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getExpanded.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getExpanded.expected b/rust/ql/test/extractor-tests/generated/Function/Function_getExpanded.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getExpanded.expected b/rust/ql/test/extractor-tests/generated/Impl/Impl_getExpanded.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getExpanded.expected b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getExpanded.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getExpanded.expected b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getExpanded.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getExpanded.expected b/rust/ql/test/extractor-tests/generated/Module/Module_getExpanded.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getExpanded.expected b/rust/ql/test/extractor-tests/generated/Static/Static_getExpanded.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getExpanded.expected b/rust/ql/test/extractor-tests/generated/Struct/Struct_getExpanded.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getExpanded.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait_getExpanded.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getExpanded.expected b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getExpanded.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getExpanded.expected b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getExpanded.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getExpanded.expected b/rust/ql/test/extractor-tests/generated/Union/Union_getExpanded.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Use/Use_getExpanded.expected b/rust/ql/test/extractor-tests/generated/Use/Use_getExpanded.expected new file mode 100644 index 000000000000..e69de29bb2d1 From a7a887c828f1c2f7cd507606e13feaf052ff97a1 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 29 Apr 2025 16:18:40 +0200 Subject: [PATCH 04/10] Rust: separate attribute macro and macro call expansions --- rust/extractor/src/generated/.generated.list | 2 +- rust/extractor/src/generated/top.rs | 10 ++- rust/extractor/src/translate/base.rs | 11 ++- rust/ql/.generated.list | 89 ++++++++++--------- rust/ql/.gitattributes | 35 ++++---- .../lib/codeql/rust/controlflow/CfgNodes.qll | 2 +- .../rust/controlflow/internal/CfgNodes.qll | 2 +- .../rust/controlflow/internal/Completion.qll | 2 +- .../internal/ControlFlowGraphImpl.qll | 4 +- .../internal/generated/CfgNodes.qll | 10 +++ rust/ql/lib/codeql/rust/elements/Item.qll | 2 +- .../ql/lib/codeql/rust/elements/MacroCall.qll | 1 + .../lib/codeql/rust/elements/MacroItems.qll | 10 ++- .../rust/elements/internal/AstNodeImpl.qll | 2 +- .../rust/elements/internal/MacroItemsImpl.qll | 10 ++- .../rust/elements/internal/generated/Item.qll | 15 ++-- .../elements/internal/generated/MacroCall.qll | 16 ++++ .../internal/generated/MacroItems.qll | 10 ++- .../internal/generated/ParentChild.qll | 16 +++- .../rust/elements/internal/generated/Raw.qll | 19 +++- rust/ql/lib/rust.dbscheme | 10 ++- .../rust.dbscheme | 10 ++- .../upgrade.properties | 4 +- .../attribute_macro_expansion/test.expected | 2 - .../attribute_macro_expansion/test.ql | 6 -- .../generated/.generated_tests.list | 2 +- .../extractor-tests/generated/Const/Const.ql | 18 ++-- ...Const_getAttributeMacroExpansion.expected} | 0 ...ql => Const_getAttributeMacroExpansion.ql} | 2 +- .../extractor-tests/generated/Enum/Enum.ql | 14 +-- ... Enum_getAttributeMacroExpansion.expected} | 0 ....ql => Enum_getAttributeMacroExpansion.ql} | 2 +- .../generated/ExternBlock/ExternBlock.ql | 15 ++-- ...Block_getAttributeMacroExpansion.expected} | 0 ...ExternBlock_getAttributeMacroExpansion.ql} | 2 +- .../generated/ExternCrate/ExternCrate.ql | 15 ++-- ...Crate_getAttributeMacroExpansion.expected} | 0 ...ExternCrate_getAttributeMacroExpansion.ql} | 2 +- .../generated/Function/Function.expected | 4 +- .../generated/Function/Function.ql | 16 ++-- ...ction_getAttributeMacroExpansion.expected} | 0 ...=> Function_getAttributeMacroExpansion.ql} | 2 +- .../extractor-tests/generated/Impl/Impl.ql | 16 ++-- ... Impl_getAttributeMacroExpansion.expected} | 0 ....ql => Impl_getAttributeMacroExpansion.ql} | 2 +- .../generated/MacroCall/MacroCall.expected | 2 +- .../generated/MacroCall/MacroCall.ql | 19 ++-- ...oCall_getAttributeMacroExpansion.expected} | 0 .../MacroCall_getAttributeMacroExpansion.ql | 7 ++ ... MacroCall_getMacroCallExpansion.expected} | 0 ....ql => MacroCall_getMacroCallExpansion.ql} | 2 +- .../generated/MacroDef/MacroDef.ql | 16 ++-- ...roDef_getAttributeMacroExpansion.expected} | 0 ...=> MacroDef_getAttributeMacroExpansion.ql} | 2 +- .../generated/MacroItems/gen_macro_items.rs | 10 ++- .../generated/MacroRules/MacroRules.ql | 15 ++-- ...Rules_getAttributeMacroExpansion.expected} | 0 ... MacroRules_getAttributeMacroExpansion.ql} | 2 +- .../generated/Module/Module.expected | 6 +- .../generated/Module/Module.ql | 15 ++-- ...odule_getAttributeMacroExpansion.expected} | 0 ...l => Module_getAttributeMacroExpansion.ql} | 2 +- .../generated/Static/Static.ql | 18 ++-- ...tatic_getAttributeMacroExpansion.expected} | 0 ...l => Static_getAttributeMacroExpansion.ql} | 2 +- .../generated/Struct/Struct.ql | 18 ++-- ...truct_getAttributeMacroExpansion.expected} | 0 ...l => Struct_getAttributeMacroExpansion.ql} | 2 +- .../generated/Trait/Trait.expected | 4 +- .../extractor-tests/generated/Trait/Trait.ql | 22 +++-- ...Trait_getAttributeMacroExpansion.expected} | 0 ...ql => Trait_getAttributeMacroExpansion.ql} | 2 +- .../generated/TraitAlias/TraitAlias.ql | 18 ++-- ...Alias_getAttributeMacroExpansion.expected} | 0 ... TraitAlias_getAttributeMacroExpansion.ql} | 2 +- .../generated/TypeAlias/TypeAlias.expected | 4 +- .../generated/TypeAlias/TypeAlias.ql | 21 +++-- ...Alias_getAttributeMacroExpansion.expected} | 0 ...> TypeAlias_getAttributeMacroExpansion.ql} | 2 +- .../extractor-tests/generated/Union/Union.ql | 18 ++-- ...Union_getAttributeMacroExpansion.expected} | 0 ...ql => Union_getAttributeMacroExpansion.ql} | 2 +- .../test/extractor-tests/generated/Use/Use.ql | 12 ++- .../Use_getAttributeMacroExpansion.expected | 0 ...d.ql => Use_getAttributeMacroExpansion.ql} | 2 +- .../macro_expansion.rs} | 0 .../options.yml | 0 .../macro_expansion/test.expected | 2 + .../extractor-tests/macro_expansion/test.ql | 6 ++ rust/schema/annotations.py | 19 ++-- 90 files changed, 442 insertions(+), 244 deletions(-) delete mode 100644 rust/ql/test/extractor-tests/attribute_macro_expansion/test.expected delete mode 100644 rust/ql/test/extractor-tests/attribute_macro_expansion/test.ql rename rust/ql/test/extractor-tests/generated/Const/{Const_getExpanded.expected => Const_getAttributeMacroExpansion.expected} (100%) rename rust/ql/test/extractor-tests/generated/Const/{Const_getExpanded.ql => Const_getAttributeMacroExpansion.ql} (77%) rename rust/ql/test/extractor-tests/generated/Enum/{Enum_getExpanded.expected => Enum_getAttributeMacroExpansion.expected} (100%) rename rust/ql/test/extractor-tests/generated/Enum/{Enum_getExpanded.ql => Enum_getAttributeMacroExpansion.ql} (76%) rename rust/ql/test/extractor-tests/generated/ExternBlock/{ExternBlock_getExpanded.expected => ExternBlock_getAttributeMacroExpansion.expected} (100%) rename rust/ql/test/extractor-tests/generated/ExternBlock/{ExternBlock_getExpanded.ql => ExternBlock_getAttributeMacroExpansion.ql} (77%) rename rust/ql/test/extractor-tests/generated/ExternCrate/{ExternCrate_getExpanded.expected => ExternCrate_getAttributeMacroExpansion.expected} (100%) rename rust/ql/test/extractor-tests/generated/ExternCrate/{ExternCrate_getExpanded.ql => ExternCrate_getAttributeMacroExpansion.ql} (77%) rename rust/ql/test/extractor-tests/generated/Function/{Function_getExpanded.expected => Function_getAttributeMacroExpansion.expected} (100%) rename rust/ql/test/extractor-tests/generated/Function/{Function_getExpanded.ql => Function_getAttributeMacroExpansion.ql} (77%) rename rust/ql/test/extractor-tests/generated/Impl/{Impl_getExpanded.expected => Impl_getAttributeMacroExpansion.expected} (100%) rename rust/ql/test/extractor-tests/generated/Impl/{Impl_getExpanded.ql => Impl_getAttributeMacroExpansion.ql} (76%) rename rust/ql/test/extractor-tests/generated/{MacroDef/MacroDef_getExpanded.expected => MacroCall/MacroCall_getAttributeMacroExpansion.expected} (100%) create mode 100644 rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getAttributeMacroExpansion.ql rename rust/ql/test/extractor-tests/generated/MacroCall/{MacroCall_getExpanded.expected => MacroCall_getMacroCallExpansion.expected} (100%) rename rust/ql/test/extractor-tests/generated/MacroCall/{MacroCall_getExpanded.ql => MacroCall_getMacroCallExpansion.ql} (79%) rename rust/ql/test/extractor-tests/generated/{MacroRules/MacroRules_getExpanded.expected => MacroDef/MacroDef_getAttributeMacroExpansion.expected} (100%) rename rust/ql/test/extractor-tests/generated/MacroDef/{MacroDef_getExpanded.ql => MacroDef_getAttributeMacroExpansion.ql} (77%) rename rust/ql/test/extractor-tests/generated/{Module/Module_getExpanded.expected => MacroRules/MacroRules_getAttributeMacroExpansion.expected} (100%) rename rust/ql/test/extractor-tests/generated/MacroRules/{MacroRules_getExpanded.ql => MacroRules_getAttributeMacroExpansion.ql} (77%) rename rust/ql/test/extractor-tests/generated/{Static/Static_getExpanded.expected => Module/Module_getAttributeMacroExpansion.expected} (100%) rename rust/ql/test/extractor-tests/generated/Module/{Module_getExpanded.ql => Module_getAttributeMacroExpansion.ql} (77%) rename rust/ql/test/extractor-tests/generated/{Struct/Struct_getExpanded.expected => Static/Static_getAttributeMacroExpansion.expected} (100%) rename rust/ql/test/extractor-tests/generated/Static/{Static_getExpanded.ql => Static_getAttributeMacroExpansion.ql} (77%) rename rust/ql/test/extractor-tests/generated/{Trait/Trait_getExpanded.expected => Struct/Struct_getAttributeMacroExpansion.expected} (100%) rename rust/ql/test/extractor-tests/generated/Struct/{Struct_getExpanded.ql => Struct_getAttributeMacroExpansion.ql} (77%) rename rust/ql/test/extractor-tests/generated/{TraitAlias/TraitAlias_getExpanded.expected => Trait/Trait_getAttributeMacroExpansion.expected} (100%) rename rust/ql/test/extractor-tests/generated/Trait/{Trait_getExpanded.ql => Trait_getAttributeMacroExpansion.ql} (77%) rename rust/ql/test/extractor-tests/generated/{TypeAlias/TypeAlias_getExpanded.expected => TraitAlias/TraitAlias_getAttributeMacroExpansion.expected} (100%) rename rust/ql/test/extractor-tests/generated/TraitAlias/{TraitAlias_getExpanded.ql => TraitAlias_getAttributeMacroExpansion.ql} (77%) rename rust/ql/test/extractor-tests/generated/{Union/Union_getExpanded.expected => TypeAlias/TypeAlias_getAttributeMacroExpansion.expected} (100%) rename rust/ql/test/extractor-tests/generated/TypeAlias/{TypeAlias_getExpanded.ql => TypeAlias_getAttributeMacroExpansion.ql} (77%) rename rust/ql/test/extractor-tests/generated/{Use/Use_getExpanded.expected => Union/Union_getAttributeMacroExpansion.expected} (100%) rename rust/ql/test/extractor-tests/generated/Union/{Union_getExpanded.ql => Union_getAttributeMacroExpansion.ql} (77%) create mode 100644 rust/ql/test/extractor-tests/generated/Use/Use_getAttributeMacroExpansion.expected rename rust/ql/test/extractor-tests/generated/Use/{Use_getExpanded.ql => Use_getAttributeMacroExpansion.ql} (76%) rename rust/ql/test/extractor-tests/{attribute_macro_expansion/attr_macro_expansion.rs => macro_expansion/macro_expansion.rs} (100%) rename rust/ql/test/extractor-tests/{attribute_macro_expansion => macro_expansion}/options.yml (100%) create mode 100644 rust/ql/test/extractor-tests/macro_expansion/test.expected create mode 100644 rust/ql/test/extractor-tests/macro_expansion/test.ql diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index 4888deae33cb..fce8b6e8b666 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 af7f3cf5d0941e7dffd6fa4ce75ac432f433a5367a408fb944176dc1a932883b af7f3cf5d0941e7dffd6fa4ce75ac432f433a5367a408fb944176dc1a932883b +top.rs 7fa95af0d85ffc251cfcd543129baa8cb0dde9df310194f3aff1868dd66417f4 7fa95af0d85ffc251cfcd543129baa8cb0dde9df310194f3aff1868dd66417f4 diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index d1a7068848f6..2a63514d1eb0 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -5819,8 +5819,8 @@ pub struct Item { } impl Item { - pub fn emit_expanded(id: trap::Label, value: trap::Label, out: &mut trap::Writer) { - out.add_tuple("item_expandeds", vec![id.into(), value.into()]); + 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()]); } } @@ -9771,6 +9771,12 @@ impl trap::TrapEntry for MacroCall { } } +impl MacroCall { + pub fn emit_macro_call_expansion(id: trap::Label, value: trap::Label, out: &mut trap::Writer) { + out.add_tuple("macro_call_macro_call_expansions", vec![id.into(), value.into()]); + } +} + impl trap::TrapClass for MacroCall { fn class_name() -> &'static str { "MacroCall" } } diff --git a/rust/extractor/src/translate/base.rs b/rust/extractor/src/translate/base.rs index a8e8bc0c890c..527f4e9497a8 100644 --- a/rust/extractor/src/translate/base.rs +++ b/rust/extractor/src/translate/base.rs @@ -328,7 +328,11 @@ impl<'a> Translator<'a> { let expand_to = ra_ap_hir_expand::ExpandTo::from_call_site(mcall); let kind = expanded.kind(); if let Some(value) = self.emit_expanded_as(expand_to, expanded) { - generated::Item::emit_expanded(label.into(), value, &mut self.trap.writer); + generated::MacroCall::emit_macro_call_expansion( + label, + value, + &mut self.trap.writer, + ); } else { let range = self.text_range_for_node(mcall); self.emit_parse_error(mcall, &SyntaxError::new( @@ -655,8 +659,9 @@ impl<'a> Translator<'a> { } = semantics.expand_attr_macro(node)?; // TODO emit err? self.emit_macro_expansion_parse_errors(node, &expanded); - let expanded = self.emit_expanded_as(ExpandTo::Items, expanded)?; - generated::Item::emit_expanded(label, expanded, &mut self.trap.writer); + let macro_items = ast::MacroItems::cast(expanded)?; + let expanded = self.emit_macro_items(¯o_items)?; + generated::Item::emit_attribute_macro_expansion(label, expanded, &mut self.trap.writer); Some(()) })(); } diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index fd7c9c84bf63..d9ddca8bdd08 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -1,4 +1,4 @@ -lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll 9452207ba069c4174b9e2903614380c5fb09dccd46e612d6c68ed4305b26ac70 3dbc42e9091ea12456014425df347230471da3afd5e811136a9bc58ba6e5880a +lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll 016c66674aa4739c82ee92123c7ec2f1247537f4bba3b08a833714fc4a0f998f 8be64927ddce9f98f294a4243edccb1bb8f1b7b8867febcbe498e98d8083e5b4 lib/codeql/rust/elements/Abi.qll 4c973d28b6d628f5959d1f1cc793704572fd0acaae9a97dfce82ff9d73f73476 250f68350180af080f904cd34cb2af481c5c688dc93edf7365fd0ae99855e893 lib/codeql/rust/elements/Addressable.qll 13011bfd2e1556694c3d440cc34af8527da4df49ad92b62f2939d3699ff2cea5 ddb25935f7553a1a384b1abe2e4b4fa90ab50b952dadec32fd867afcb054f4be lib/codeql/rust/elements/ArgList.qll 661f5100f5d3ef8351452d9058b663a2a5c720eea8cf11bedd628969741486a2 28e424aac01a90fb58cd6f9f83c7e4cf379eea39e636bc0ba07efc818be71c71 @@ -74,7 +74,7 @@ lib/codeql/rust/elements/Impl.qll 6407348d86e73cdb68e414f647260cb82cb90bd40860ba lib/codeql/rust/elements/ImplTraitTypeRepr.qll e2d5a3ade0a9eb7dcb7eec229a235581fe6f293d1cb66b1036f6917c01dff981 49367cada57d1873c9c9d2b752ee6191943a23724059b2674c2d7f85497cff97 lib/codeql/rust/elements/IndexExpr.qll 0e2e9f018d06ae72be0fc4ddbc019a9aacd8a06f42b4c4431760bd149e7f2290 2bcfd557abd53a48e48de7915c4f2089107c62dfb3e732a904848248dfd3727b lib/codeql/rust/elements/InferTypeRepr.qll 0a7b3e92512b2b167a8e04d650e12700dbbb8b646b10694056d622ba2501d299 e5e67b7c1124f430750f186da4642e646badcdcf66490dd328af3e64ac8da9e9 -lib/codeql/rust/elements/Item.qll b1c41dcdd51fc94248abd52e838d9ca4d6f8c41f22f7bd1fa2e357b99d237b48 b05416c85d9f2ee67dbf25d2b900c270524b626f0b389fe0c9b90543fd05d8e1 +lib/codeql/rust/elements/Item.qll e4058f50dda638385dcddfc290b52e32158fe3099958ef598ba618195a9e88bb fe1ea393641adb3576ef269ec63bc62edc6fa3d55737e422f636b6e9abfa1f2c lib/codeql/rust/elements/ItemList.qll c33e46a9ee45ccb194a0fe5b30a6ad3bcecb0f51486c94e0191a943710a17a7d 5a69c4e7712b4529681c4406d23dc1b6b9e5b3c03552688c55addab271912ed5 lib/codeql/rust/elements/Label.qll a31d41db351af7f99a55b26cdbbc7f13b4e96b660a74e2f1cc90c17ee8df8d73 689f87cb056c8a2aefe1a0bfc2486a32feb44eb3175803c61961a6aeee53d66e lib/codeql/rust/elements/LabelableExpr.qll 598be487cd051b004ab95cbbc3029100069dc9955851c492029d80f230e56f0d 92c49b3cfdaba07982f950e18a8d62dae4e96f5d9ae0d7d2f4292628361f0ddc @@ -89,10 +89,10 @@ lib/codeql/rust/elements/LiteralPat.qll daffb5f380a47543669c8cc92628b0e0de478c3a lib/codeql/rust/elements/Locatable.qll 2855efa4a469b54e0ca85daa89309a8b991cded6f3f10db361010831ba1e11d3 00c3406d14603f90abea11bf074eaf2c0b623a30e29cf6afc3a247cb58b92f0f lib/codeql/rust/elements/LoopExpr.qll ee171177650fa23eef102a9580765f4b6073a1cc41bab1ec31ad4f84ffe6c2c9 bfcf0cca4dc944270d9748a202829a38c64dfae167c0d3a4202788ceb9daf5f6 lib/codeql/rust/elements/LoopingExpr.qll 7ad7d4bbfd05adc0bb9b4ca90ff3377b8298121ca5360ffb45d5a7a1e20fe37a 964168b2045ee9bad827bba53f10a64d649b3513f2d1e3c17a1b1f11d0fc7f3a -lib/codeql/rust/elements/MacroCall.qll 16933db15c6c0dbb717ef442f751ad8f63c444f36a12f8d56b8a05a3e5f71d1b ac05cbf50e4b06f39f58817cddbeac6f804c2d1e4f60956a960d63d495e7183d +lib/codeql/rust/elements/MacroCall.qll a39a11d387355f59af3007dcbab3282e2b9e3289c1f8f4c6b96154ddb802f8c3 88d4575e462af2aa780219ba1338a790547fdfc1d267c4b84f1b929f4bc08d05 lib/codeql/rust/elements/MacroDef.qll acb39275a1a3257084314a46ad4d8477946130f57e401c70c5949ad6aafc5c5f 6a8a8db12a3ec345fede51ca36e8c6acbdce58c5144388bb94f0706416fa152a lib/codeql/rust/elements/MacroExpr.qll ea9fed13f610bab1a2c4541c994510e0cb806530b60beef0d0c36b23e3b620f0 ad11a6bbd3a229ad97a16049cc6b0f3c8740f9f75ea61bbf4eebb072db9b12d2 -lib/codeql/rust/elements/MacroItems.qll 00a5d41f7bb836d952abbd9382e42f72a9d81e65646a15a460b35ccd07a866c6 00efdb4d701b5599d76096f740da9ec157804865267b7e29bc2a214cbf03763e +lib/codeql/rust/elements/MacroItems.qll f2d80ff23634ac6bc3e96e8d73154587f9d24edb56654b5c0ae426124d2709ea f794f751b77fc50d7cc3069c93c22dd3a479182edce15c1b22c8da31d2e30a12 lib/codeql/rust/elements/MacroPat.qll dbf193b4fb544ac0b5a7dcfc31a6652de7239b6e643ff15b05868b2c142e940c 19b45c0a1eb1198e450c05d564b5d4aa0d6da29e7db84b9521eadf901e20a932 lib/codeql/rust/elements/MacroRules.qll a94535506798077043b9c1470992ac4310bf67bcce5f722080886d1b3e6d90d1 bd8e08a7171991abc85100b45267631e66d1b332caf1e5882cd17caee5cf18a3 lib/codeql/rust/elements/MacroStmts.qll 6e9a1f90231cb72b27d3ff9479e399a9fba4abd0872a5005ab2fac45d5ca9be0 d6ca3a8254fc45794a93c451a3305c9b4be033a467ad72158d40d6f675a377a0 @@ -316,7 +316,7 @@ lib/codeql/rust/elements/internal/MacroDefImpl.qll f26e787ffd43e8cb079db01eba044 lib/codeql/rust/elements/internal/MacroExprConstructor.qll b12edb21ea189a1b28d96309c69c3d08e08837621af22edd67ff9416c097d2df d35bc98e7b7b5451930214c0d93dce33a2c7b5b74f36bf99f113f53db1f19c14 lib/codeql/rust/elements/internal/MacroExprImpl.qll 92dd9f658a85ae407e055f090385f451084de59190d8a00c7e1fba453c3eced4 89d544634fecdbead2ff06a26fc8132e127dab07f38b9322fa14dc55657b9f1a lib/codeql/rust/elements/internal/MacroItemsConstructor.qll 8e9ab7ec1e0f50a22605d4e993f99a85ca8059fbb506d67bc8f5a281af367b05 2602f9db31ea0c48192c3dde3bb5625a8ed1cae4cd3408729b9e09318d5bd071 -lib/codeql/rust/elements/internal/MacroItemsImpl.qll 76fd50a1f27336e9efc6d3f73ef4d724f19627cadbaa805d1e14d2cfa4f19899 40c0e512090050b39b69128730f4f4581f51ffd3c687fb52913617bd70a144e9 +lib/codeql/rust/elements/internal/MacroItemsImpl.qll f89f46b578f27241e055acf56e8b4495da042ad37fb3e091f606413d3ac18e14 12e9f6d7196871fb3f0d53cccf19869dc44f623b4888a439a7c213dbe1e439be lib/codeql/rust/elements/internal/MacroPatConstructor.qll 24744c1bbe21c1d249a04205fb09795ae38ed106ba1423e86ccbc5e62359eaa2 4fac3f731a1ffd87c1230d561c5236bd28dcde0d1ce0dcd7d7a84ba393669d4a lib/codeql/rust/elements/internal/MacroPatImpl.qll 7470e2d88c38c7300a64986f058ba92bb22b4945438e2e0e268f180c4f267b71 c1507df74fc4c92887f3e0a4f857f54b61f174ffae5b1af6fb70f466175d658b lib/codeql/rust/elements/internal/MacroRulesConstructor.qll dc04726ad59915ec980501c4cd3b3d2ad774f454ddbf138ff5808eba6bd63dea 8d6bf20feb850c47d1176237027ef131f18c5cbb095f6ab8b3ec58cea9bce856 @@ -536,7 +536,7 @@ lib/codeql/rust/elements/internal/generated/Impl.qll 863281820a933a86e6890e31a25 lib/codeql/rust/elements/internal/generated/ImplTraitTypeRepr.qll a1bbebe97a0421f02d2f2ee6c67c7d9107f897b9ba535ec2652bbd27c35d61df ba1f404a5d39cf560e322294194285302fe84074b173e049333fb7f4e5c8b278 lib/codeql/rust/elements/internal/generated/IndexExpr.qll cf951fc40f6690e966b4dc78fa9a6221aa5c6cade44759dcb52254f799292d11 1572e71918cc4e0b7e028331b6d98c9db23100a3646cd3874d1915e06ab6211d lib/codeql/rust/elements/internal/generated/InferTypeRepr.qll dab311562be68a2fcbbe29956b0c3fc66d58348658b734e59f7d080c820093ae ca099ecf9803d3c03b183e4ba19f998e24c881c86027b25037914884ce3de20e -lib/codeql/rust/elements/internal/generated/Item.qll 24f388cf0d9a47b38b6cfb93bbe92b9f0cbd0b05e9aa0e6adc1d8056b2cd2f57 66a14e6ff2190e8eebf879b02d0a9a38467e293d6be60685a08542ca1fc34803 +lib/codeql/rust/elements/internal/generated/Item.qll 159de50e79228ed910c8b6d7755a6bde42bbf0a47491caffa77b9d8e0503fa88 e016c2e77d2d911048b31aeac62df1cce1c14b1a86449159638a2ca99b1cfa01 lib/codeql/rust/elements/internal/generated/ItemList.qll 73c8398a96d4caa47a2dc114d76c657bd3fcc59e4c63cb397ffac4a85b8cf8ab 540a13ca68d414e3727c3d53c6b1cc97687994d572bc74b3df99ecc8b7d8e791 lib/codeql/rust/elements/internal/generated/Label.qll 6630fe16e9d2de6c759ff2684f5b9950bc8566a1525c835c131ebb26f3eea63e 671143775e811fd88ec90961837a6c0ee4db96e54f42efd80c5ae2571661f108 lib/codeql/rust/elements/internal/generated/LabelableExpr.qll 896fd165b438b60d7169e8f30fa2a94946490c4d284e1bbadfec4253b909ee6c 5c6b029ea0b22cf096df2b15fe6f9384ad3e65b50b253cae7f19a2e5ffb04a58 @@ -551,10 +551,10 @@ lib/codeql/rust/elements/internal/generated/LiteralPat.qll f36b09cf39330019c111e lib/codeql/rust/elements/internal/generated/Locatable.qll c897dc1bdd4dfcb6ded83a4a93332ca3d8f421bae02493ea2a0555023071775e b32d242f8c9480dc9b53c1e13a5cb8dcfce575b0373991c082c1db460a3e37b8 lib/codeql/rust/elements/internal/generated/LoopExpr.qll db6bc87e795c9852426ec661fa2c2c54106805897408b43a67f5b82fb4657afd 1492866ccf8213469be85bbdbcae0142f4e2a39df305d4c0d664229ecd1ebdb9 lib/codeql/rust/elements/internal/generated/LoopingExpr.qll 0792c38d84b8c68114da2bbdfef32ef803b696cb0fd06e10e101756d5c46976c 111fe961fad512722006323c3f2a075fddf59bd3eb5c7afc349835fcec8eb102 -lib/codeql/rust/elements/internal/generated/MacroCall.qll 8b49d44e6aeac26dc2fc4b9ba03c482c65ebf0cba089d16f9d65e784e48ccbb0 9ecf6e278007adcbdc42ed1c10e7b1c0652b6c64738b780d256c9326afa3b393 +lib/codeql/rust/elements/internal/generated/MacroCall.qll 34845d451a0f2119f8fa096e882e3bb515f9d31a3364e17c3ea3e42c61307b50 f7bb4982ccb2e5d3a9c80e7cfc742620959de06a2446baf96dd002312b575bd6 lib/codeql/rust/elements/internal/generated/MacroDef.qll e9b3f07ba41aa12a8e0bd6ec1437b26a6c363065ce134b6d059478e96c2273a6 87470dea99da1a6afb3a19565291f9382e851ba864b50a995ac6f29589efbd70 lib/codeql/rust/elements/internal/generated/MacroExpr.qll 03a1daa41866f51e479ac20f51f8406d04e9946b24f3875e3cf75a6b172c3d35 1ae8ca0ee96bd2be32575d87c07cc999a6ff7770151b66c0e3406f9454153786 -lib/codeql/rust/elements/internal/generated/MacroItems.qll 894890f61e118b3727d03ca813ae7220a15e45195f2d1d059cb1bba6802128c8 db3854b347f8782a3ec9f9a1439da822727b66f0bd33727383184ab65dbf29ac +lib/codeql/rust/elements/internal/generated/MacroItems.qll bf10b946e9addb8dd7cef032ebc4480492ab3f9625edbabe69f41dcb81d448fe f6788fe1022e1d699056111d47e0f815eb1fa2826c3b6a6b43c0216d82d3904b lib/codeql/rust/elements/internal/generated/MacroPat.qll 26bc55459a66359ad83ed7b25284a25cdbd48a868fd1bbf7e23e18b449395c43 f16ede334becba951873e585c52a3a9873c9251e3dab9a3c1a1681f632f2079f lib/codeql/rust/elements/internal/generated/MacroRules.qll 4fbd94f22b5ee0f3e5aaae39c2b9a5e9b7bf878a1017811ca589942f6de92843 49fb69543ee867bae196febea6918e621f335afdf4d3ccbf219965b37c7537b1 lib/codeql/rust/elements/internal/generated/MacroStmts.qll cb4f3c2721a4d0c8522e51f567c675f4fc95f39bac8a2bd97e125d5553515ad2 09b5a739ccee75e6c556b34ecd6f78c7dc799029d9bc7df2e6169098d24f0ccd @@ -579,7 +579,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll c808c9d84dd7800573832b lib/codeql/rust/elements/internal/generated/ParenExpr.qll bc0731505bfe88516205ec360582a4222d2681d11342c93e15258590ddee82f2 d4bd6e0c80cf1d63746c88d4bcb3a01d4c75732e5da09e3ebd9437ced227fb60 lib/codeql/rust/elements/internal/generated/ParenPat.qll 4f168ef5d5bb87a903251cc31b2e44a759b099ec69c90af31783fbb15778c940 0e34f94a45a13396fd57d94c245dc64d1adde2ab0e22b56946f7e94c04e297fc lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll 40ab5c592e7699c621787793743e33988de71ff42ca27599f5ab3ddb70e3f7d8 12c0a6eed2202ee3e892f61da3b3ce77ac3190854cdf3097e8d2be98aa3cb91d -lib/codeql/rust/elements/internal/generated/ParentChild.qll b9fe4919578ae4889e6993df712b685da3dc2d6559b2a2b34a466c604623feee 306fb39ad5d3877c8afcce14aa6be67ff099b334279bd0ce6b2012719a1e812a +lib/codeql/rust/elements/internal/generated/ParentChild.qll 23f333104e9ed2eef07f86de0d122b31f61e1c37923827c95fe2848ae14ec5d7 74d4d3c028110ea1491ebc2a707326b44e273a11c676708e46ada0a5bfc51fe9 lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll c5fa328ea60d3a3333d7c7bb3480969c1873166c7ac8ebb9d0afad7a8099d1a8 2dbbb6200d96f7db7dea4a55bdeab8d67b14d39a43e0bd54ada019f7e466f163 lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll 9b12afb46fc5a9ad3a811b05472621bbecccb900c47504feb7f29d96b28421ca bcacbffc36fb3e0c9b26523b5963af0ffa9fd6b19f00a2a31bdb2316071546bd @@ -594,7 +594,7 @@ lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll 51d1e9e683fc79dddbff 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 6cfbf74f0635ce379cce096cdfe70c33b74c7e3a35d2e3af2e93bc06d374efee 5b20172d0662bdbcca737e94ee6ceefc58503898b9584bef372720fea0be2671 +lib/codeql/rust/elements/internal/generated/Raw.qll 03ebbfdedbc03ab7b1363cd0c806afca26c6f020a0d6d97f2622048e011c12a8 d60479d4739c53c53c63d7be15fd8ce6bf212e80ddda6746534971d867dfed1e 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 3d8c0bd296d33b91a81633f697a43269a6538df06d277262d3990d3f6880ef57 13680f39e89bcd8299c218aba396f3deec804597e6f7cb7d4a7e7c748b6faa77 @@ -736,11 +736,11 @@ test/extractor-tests/generated/ClosureExpr/ClosureExpr_getClosureBinder.ql cbfcf 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 ddce26b7dc205fe37651f4b289e62c76b08a2d9e8fdaf911ad22a8fdb2a18bc9 b7c7e3c13582b6424a0afd07588e24a258eff7eb3c8587cc11b20aa054d3c727 +test/extractor-tests/generated/Const/Const.ql 6794d0056060a82258d1e832ad265e2eb276206f0224a3f0eb9221e225370066 0a6134fb5a849ce9bd1a28de783460301cafca5773bd7caa4fb1f774f81b476a 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 test/extractor-tests/generated/Const/Const_getCrateOrigin.ql f042bf15f9bde6c62d129601806c79951a2a131b6388e8df24b1dc5d17fe89f7 7c6decb624f087fda178f87f6609510907d2ed3877b0f36e605e2422b4b13f57 -test/extractor-tests/generated/Const/Const_getExpanded.ql b2d0dc1857413cdf0e222bda4717951239b8af663522990d3949dfc170fab6f5 a21fed32088db850950cb65128f2f946d498aaa6873720b653d4b9b2787c7d00 test/extractor-tests/generated/Const/Const_getExtendedCanonicalPath.ql 3300b902e1d1f9928cfe918203b87043e13460cfa5348a8c93712d2e26d61ced 71e7b80d3290f17b1c235adaca2c48ae90eb8b2cb24d4c9e6dc66559daf3824c test/extractor-tests/generated/Const/Const_getName.ql b876a1964bbb857fbe8852fb05f589fba947a494f343e8c96a1171e791aa2b5e 83655b1fbc67a4a1704439726c1138bb6784553e35b6ac16250b807e6cd0f40c test/extractor-tests/generated/Const/Const_getTypeRepr.ql 87c5deaa31014c40a035deaf149d76b3aca15c4560c93dd6f4b1ee5f76714baa f3e6b31e4877849792778d4535bd0389f3afd482a6a02f9ceb7e792e46fca83e @@ -760,10 +760,10 @@ test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.ql 39dae987 test/extractor-tests/generated/Crate/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr.ql 513d64b564f359e1022ae6f3d6d4a8ad637f595f01f29a6c2a167d1c2e8f1f99 0c7a7af6ee1005126b9ab77b2a7732821f85f1d2d426312c98206cbbedc19bb2 test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr_getTypeBoundList.ql b20720ff0b147d55cea6f2de44d5bf297e79991eaf103938ccd7ab9d129e9656 eb8c9db2581cea00c29d7772de0b0a125be02c37092217a419f1a2b6a9711a6c -test/extractor-tests/generated/Enum/Enum.ql 31645674671eda7b72230cd20b7a2e856190c3a3244e002ab3558787ed1261d9 1f40ee305173af30b244d8e1421a3e521d446d935ece752da5a62f4e57345412 +test/extractor-tests/generated/Enum/Enum.ql eebc780aef77b87e6062724dd8ddb8f3ad33021061c95924c2c2439798ffbb87 0d19552872a2254f66a78b999a488ce2becdb0b0611b858e0bee2b119ee08eae test/extractor-tests/generated/Enum/Enum_getAttr.ql 8109ef2495f4a154e3bb408d549a16c6085e28de3aa9b40b51043af3d007afa7 868cf275a582266ffa8da556d99247bc8af0fdf3b43026c49e250cf0cac64687 +test/extractor-tests/generated/Enum/Enum_getAttributeMacroExpansion.ql 571ec6396fb7fc703b23aab651b3c6c05c9b5cd9d69a9ae8f5e36d69a18c89d3 c04025992f76bce7638728847f1ef835d3a48d3dc3368a4d3b73b778f1334618 test/extractor-tests/generated/Enum/Enum_getCrateOrigin.ql 76d32838b7800ed8e5cab895c9dbea76129f96afab949598bebec2b0cb34b7ff 226d099377c9d499cc614b45aa7e26756124d82f07b797863ad2ac6a6b2f5acb -test/extractor-tests/generated/Enum/Enum_getExpanded.ql 846117a6ee8e04f3d85dce1963bffcbd4bc9b4a95bfab6295c3c87a2f4eda50e 3a9c57fa5c8f514ec172e98126d21b12abe94a3a8a737fb50c838b47fe287ac4 test/extractor-tests/generated/Enum/Enum_getExtendedCanonicalPath.ql 001bb634adc4b20afb241bff41194bc91ba8544d1edd55958a01975e2ac428e1 c7c3fe3dc22a1887981a895a1e5262b1d0ad18f5052c67aa73094586de5212f6 test/extractor-tests/generated/Enum/Enum_getGenericParamList.ql 2a858a07195a4b26b8c92e28519995bd6eba64889bddd126e161038f4a8d78e0 db188f238db915c67b084bc85aa0784c6a20b97b5a5f1966b3530c4c945b5527 test/extractor-tests/generated/Enum/Enum_getName.ql 32a8638534f37bfd416a6906114a3bcaf985af118a165b78f2c8fffd9f1841b8 c9ca8030622932dd6ceab7d41e05f86b923f77067b457fb7ec196fe4f4155397 @@ -772,17 +772,17 @@ test/extractor-tests/generated/Enum/Enum_getVisibility.ql 7fdae1b147d3d2ed41e055 test/extractor-tests/generated/Enum/Enum_getWhereClause.ql 00be944242a2056cd760a59a04d7a4f95910c122fe8ea6eca3efe44be1386b0c 70107b11fb72ed722afa9464acc4a90916822410d6b8bf3b670f6388a193d27d test/extractor-tests/generated/ExprStmt/ExprStmt.ql 811d3c75a93d081002ecf03f4e299c248f708e3c2708fca9e17b36708da620e5 a4477e67931ba90fd948a7ef778b18b50c8492bae32689356899e7104a6d6794 test/extractor-tests/generated/ExprStmt/ExprStmt_getExpr.ql e269bb222317afe1470eee1be822d305fc37c65bca2999da8d24a86fa9337036 088369d6c5b072192290c34c1828b1068aeedaabdae131594ca529bbb1630548 -test/extractor-tests/generated/ExternBlock/ExternBlock.ql 14da23b2b22f3d61a06103d1416ad416333945fd30b3a07b471f351f682c4e16 eaaf4ac8dc23c17d667bc804ed3b88c816c0c5a6127b76e2781faec52534426c +test/extractor-tests/generated/ExternBlock/ExternBlock.ql 237040dfe227530c23b77f4039d2a9ed5f247e1e8353dc99099b18d651428db2 49c8672faa8cc503cc12db6f694895ee90e9ab024a8597673fd4a620a39f28cf test/extractor-tests/generated/ExternBlock/ExternBlock_getAbi.ql 9b7c7263fcbc84e07361f5b419026a525f781836ede051412b22fb4ddb5d0c6a c3755faa7ffb69ad7d3b4c5d6c7b4d378beca2fa349ea072e3bef4401e18ec99 test/extractor-tests/generated/ExternBlock/ExternBlock_getAttr.ql 78ed6a2d31ccab67b02da4792e9d2c7c7084a9f20eb065d83f64cd1c0a603d1b e548d4fa8a3dc1ca4b7d7b893897537237a01242c187ac738493b9f5c4700521 +test/extractor-tests/generated/ExternBlock/ExternBlock_getAttributeMacroExpansion.ql 39b006e3acb71272cd0f211d37048949c41cc2cdf5bad1702ca95d7ff889f23f 2fceb9fa8375391cfe3d062f2d96160983d4cf94281e0098ab94c7f182cb008d test/extractor-tests/generated/ExternBlock/ExternBlock_getCrateOrigin.ql 5a2e0b546e17a998156f48f62e711c8a7b920d352516de3518dfcd0dfedde82d 1d11b8a790c943ef215784907ff2e367b13737a5d1c24ad0d869794114deaa32 -test/extractor-tests/generated/ExternBlock/ExternBlock_getExpanded.ql 13d466cb7d6ab8d7d5a98237775518826675e7107dbd7a3879133841eacfcadc b091495c25ead5e93b7a4d64443ca8c8bfdeb699a802bd601efa0259610cf9e7 test/extractor-tests/generated/ExternBlock/ExternBlock_getExtendedCanonicalPath.ql 40d6ee4bcb77c2669e07cf8070cc1aadfca22a638412c8fcf35ff892f5393b0c e9782a3b580e076800a1ad013c8f43cdda5c08fee30947599c0c38c2638820d6 test/extractor-tests/generated/ExternBlock/ExternBlock_getExternItemList.ql 2c2b29bdfdc3b27173c068cbaab9946b42053aa14cf371236b4b60ff2e723370 dfc20fc8ef81cdce6f0badd664ef3914d6d49082eb942b1da3f45239b4351e2f -test/extractor-tests/generated/ExternCrate/ExternCrate.ql 3d4a4db58e34e6baa6689c801dd5c63d609549bcd9fa0c554b32042594a0bc46 63568f79c7b9ceb19c1847f5e8567aec6de5b904ef0215b57c7243fcf5e09a7a +test/extractor-tests/generated/ExternCrate/ExternCrate.ql 25721ab97d58155c7eb434dc09f458a7cb7346a81d62fae762c84ae0795da06d d8315c4cf2950d87ecf12861cf9ca1e1a5f9312939dce9d01c265b00ba8103fd test/extractor-tests/generated/ExternCrate/ExternCrate_getAttr.ql cbe8efdfdbe5d46b4cd28d0e9d3bffcf08f0f9a093acf12314c15b692a9e502e 67fe03af83e4460725f371920277186c13cf1ed35629bce4ed9e23dd3d986b95 +test/extractor-tests/generated/ExternCrate/ExternCrate_getAttributeMacroExpansion.ql 254a0be2f36e593f1473dfc4d4466a959683a4c09d8b8273f33b39f04bb41a7b a087003503a0b611de2cd02da4414bb0bbbc73ef60021376a4748e0e34a44119 test/extractor-tests/generated/ExternCrate/ExternCrate_getCrateOrigin.ql c0bf9ba36beb93dc27cd1c688f18b606f961b687fd7a7afd4b3fc7328373dcfb 312da595252812bd311aecb356dd80f2f7dc5ecf77bc956e6478bbe96ec72fd9 -test/extractor-tests/generated/ExternCrate/ExternCrate_getExpanded.ql 007d4bae6dad9aa2d7db45dfc683a143d6ce1b3dd752233cdc46218e8bdab0b1 e77fe7e5128ee3673aec69aef44dc43f881a3767705866c956472e0137b86b60 test/extractor-tests/generated/ExternCrate/ExternCrate_getExtendedCanonicalPath.ql 88e16e2bbef466cec43ace25716e354408b5289f9054eaafe38abafd9df327e3 83a69487e16d59492d44d8c02f0baf7898c88ed5fcf67c73ed89d80f00c69fe8 test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.ql 6ce362fb4df37210ce491e2ef4e04c0899a67c7e15b746c37ef87a42b2b5d5f9 5209c8a64d5707e50771521850ff6deae20892d85a82803aad1328c2d6372d09 test/extractor-tests/generated/ExternCrate/ExternCrate_getRename.ql 52007ef7745e7ceb394de73212c5566300eb7962d1de669136633aea0263afb2 da98779b9e82a1b985c1b1310f0d43c784e5e66716a791ac0f2a78a10702f34b @@ -822,12 +822,12 @@ 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 084e8c4a938e0eea6e2cd47b592021891cb2ad04edbec336f87f0f3faf6a7f32 200b8b17eb09f6df13b2e60869b0329b7a59e3d23a3273d17b03f6addd8ebf89 +test/extractor-tests/generated/Function/Function.ql 2efae1916e8f501668b3dbb2237cda788243fdd643683eda41b108dfdc578a90 6ec948518963985ec41b66e2b3b2b953e1da872dcd052a6d8c8f61c25bf09600 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 test/extractor-tests/generated/Function/Function_getBody.ql cf2716a751e309deba703ee4da70e607aae767c1961d3c0ac5b6728f7791f608 3beaf4032924720cb881ef6618a3dd22316f88635c86cbc1be60e3bdad173e21 test/extractor-tests/generated/Function/Function_getCrateOrigin.ql acec761c56b386600443411cabb438d7a88f3a5e221942b31a2bf949e77c14b4 ff2387acb13eebfad614b808278f057a702ef4a844386680b8767f9bb4438461 -test/extractor-tests/generated/Function/Function_getExpanded.ql dc93cca67a3436543cd5b8e5c291cceacde523b8652f162532b274e717378293 c0c28eeb6c97690dfc82bd97e31db1a6b72c6410b98eb193270a37fc95952518 test/extractor-tests/generated/Function/Function_getExtendedCanonicalPath.ql 0bcdca25bb92424007cea950409d73ba681e3ffbea53e0508f1d630fccfa8bed ff28c3349f5fc007d5f144e549579bd04870973c0fabef4198edce0fba0ef421 test/extractor-tests/generated/Function/Function_getGenericParamList.ql 0b255791c153b7cb03a64f1b9ab5beccc832984251f37516e1d06ce311e71c2b d200f90d4dd6f8dfd22ce49203423715d5bef27436c56ee553097c668e71c5a1 test/extractor-tests/generated/Function/Function_getName.ql 3d9e0518075d161213485389efe0adf8a9e6352dd1c6233ef0403a9abbcc7ed1 841e644ecefff7e9a82f458bcf14d9976d6a6dbe9191755ead88374d7c086375 @@ -848,11 +848,11 @@ test/extractor-tests/generated/IfExpr/IfExpr_getAttr.ql f5872cdbb21683bed689e753 test/extractor-tests/generated/IfExpr/IfExpr_getCondition.ql 5bab301a1d53fe6ee599edfb17f9c7edb2410ec6ea7108b3f4a5f0a8d14316e3 355183b52cca9dc81591a09891dab799150370fff2034ddcbf7b1e4a7cb43482 test/extractor-tests/generated/IfExpr/IfExpr_getElse.ql 8674cedf42fb7be513fdf6b9c3988308453ae3baf8051649832e7767b366c12f e064e5f0b8e394b080a05a7bccd57277a229c1f985aa4df37daea26aeade4603 test/extractor-tests/generated/IfExpr/IfExpr_getThen.ql 0989ddab2c231c0ee122ae805ffa0d3f0697fb7b6d9e53ee6d32b9140d4b0421 81028f9cd6b417c63091d46a8b85c3b32b1c77eea885f3f93ae12c99685bfe0a -test/extractor-tests/generated/Impl/Impl.ql a6e19421a7785408ad5ce8e6508d9f88eceb71fe6f6f4abc5795285ecc778db6 158519bed8a89b8d25921a17f488267af6be626db559bd93bbbe79f07ebfed6c +test/extractor-tests/generated/Impl/Impl.ql 3a82dc8738ad09d624be31cad86a5a387981ec927d21074ec6c9820c124dfd57 8fabe8e48396fb3ad5102539241e6b1d3d2455e4e5831a1fa2da39e4faf68a0e test/extractor-tests/generated/Impl/Impl_getAssocItemList.ql cf875361c53c081ac967482fd3af8daf735b0bc22f21dcf0936fcf70500a001a 0ad723839fa26d30fa1cd2badd01f9453977eba81add7f0f0a0fcb3adb76b87e test/extractor-tests/generated/Impl/Impl_getAttr.ql 018bdf6d9a9724d4f497d249de7cecd8bda0ac2340bde64b9b3d7c57482e715b cd065899d92aa35aca5d53ef64eadf7bb195d9a4e8ed632378a4e8c550b850cd +test/extractor-tests/generated/Impl/Impl_getAttributeMacroExpansion.ql 526d4651f2bc703ee107f72b9940a3062777645d2421a3522429bf1d3925f6a2 c08c3d7501552987e50b28ab12a34abd539f6a395b8636167b109d9a470f195e test/extractor-tests/generated/Impl/Impl_getCrateOrigin.ql 494d5524ef7bac1286b8a465e833e98409c13f3f8155edab21d72424944f2ed9 b238ef992fce97699b14a5c45d386a2711287fd88fa44d43d18c0cdfd81ed72c -test/extractor-tests/generated/Impl/Impl_getExpanded.ql ce623514e77f67dda422566531515d839a422e75ea87a10d86ad162fa61e1469 533624938c937835a59326c086e341b7bacab32d84af132e7f3d0d17c6cd4864 test/extractor-tests/generated/Impl/Impl_getExtendedCanonicalPath.ql 3ab82fd7831d22c7ec125908abf9238a9e8562087d783c1c12c108b449c31c83 320afd5dd1cea9017dbc25cc31ebe1588d242e273d27207a5ad2578eee638f7e test/extractor-tests/generated/Impl/Impl_getGenericParamList.ql 88d5cd8fd03cb4cc2887393ee38b2e2315eeef8c4db40a9bd94cf86b95935bdd 9c72828669ccf8f7ca39851bc36a0c426325a91fc428b49681e4bb680d6547a9 test/extractor-tests/generated/Impl/Impl_getSelfTy.ql 2962d540a174b38815d150cdd9053796251de4843b7276d051191c6a6c8ecad4 b7156cec08bd6231f7b8f621e823da0642a0eb036b05476222f259101d9d37c0 @@ -900,19 +900,20 @@ test/extractor-tests/generated/LoopExpr/LoopExpr.ql 37b320acefa3734331f87414de27 test/extractor-tests/generated/LoopExpr/LoopExpr_getAttr.ql d557c1a34ae8762b32702d6b50e79c25bc506275c33a896b6b94bbbe73d04c49 34846c9eefa0219f4a16e28b518b2afa23f372d0aa03b08d042c5a35375e0cd6 test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.ql 0b77b9d9fb5903d37bce5a2c0d6b276e6269da56fcb37b83cd931872fb88490f c7f09c526e59dcadec13ec9719980d68b8619d630caab2c26b8368b06c1f2cc0 test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.ql 0267f54077640f3dfeb38524577e4a1229115eeb1c839398d0c5f460c1d65129 96ec876635b8c561f7add19e57574444f630eae3df9ab9bc33ac180e61f3a7b8 -test/extractor-tests/generated/MacroCall/MacroCall.ql 989d90726edab22a69377480ce5d1a13309d9aac60e0382c2ad6d36e8c7f1df5 68ffd6e1afa0c2c17fb04f87a09baca9766421aa28acd4ef8a6d04798f4c3a57 +test/extractor-tests/generated/MacroCall/MacroCall.ql 992e338a9c1353030f4bb31cae6ae4a1b957052e28c8753bae5b6d33dbe03fe9 863fbfd712a4f9ed613abb64ecb814b0a72b9ab65c50aa0dc5279d319249ae6a 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 -test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.ql 757c4a4c32888e4604044c798a3180aa6d4f73381eec9bc28ba9dc71ffcbd03a 27d5edaa2c1096a24c86744aaad0f006da20d5caa28ccfd8528e7c98aa1bead1 test/extractor-tests/generated/MacroCall/MacroCall_getExtendedCanonicalPath.ql 553b810f611014ae04d76663d1393c93687df8b96bda325bd71e264e950a8be9 a0e80c3dac6a0e48c635e9f25926b6a97adabd4b3c0e3cfb6766ae160bcb4ee7 +test/extractor-tests/generated/MacroCall/MacroCall_getMacroCallExpansion.ql 1416adaedf6a11680c7261c912aa523db72d015fbfdad3a288999216050380a6 10b87d50f21ac5e1b7706fe3979cab72ecb95f51699540f2659ee161c9186138 test/extractor-tests/generated/MacroCall/MacroCall_getPath.ql 160edc6a001a2d946da6049ffb21a84b9a3756e85f9a2fb0a4d85058124b399a 1e25dd600f19ef89a99f328f86603bce12190220168387c5a88bfb9926da56d9 test/extractor-tests/generated/MacroCall/MacroCall_getTokenTree.ql 1cbf6b1ac7fa0910ff299b939743153fc00ad7e28a9a70c69a8297c6841e8238 570380c0dc4b20fe25c0499378569720a6da14bdb058e73d757e174bdd62d0c0 -test/extractor-tests/generated/MacroDef/MacroDef.ql 2b9965d72ba85d531f66e547059110e95a03315889fbb3833cce121c1ad49309 2b5b03afbce92745b1d9750a958b602ccf5e7f9f7934fb12d8b3c20dfc8d3d28 +test/extractor-tests/generated/MacroDef/MacroDef.ql 13ef4bdde6910b09cefe47f8753f092ed61db4d9f3cece0f67071b12af81991c a68091e30a38a9b42373497b79c9b4bde23ef0ab8e3a334ff73bfdde0c9895b2 test/extractor-tests/generated/MacroDef/MacroDef_getArgs.ql 61f11d6ba6ea3bd42708c4dc172be4016277c015d3560025d776e8fef447270f 331541eff1d8a835a9ecc6306f3adf234cbff96ea74b0638e482e03f3e336fd1 test/extractor-tests/generated/MacroDef/MacroDef_getAttr.ql 0a30875f7b02351a4facf454273fb124aa40c6ef8a47dfe5210072a226b03656 8e97307aef71bf93b28f787050bfaa50fe95edf6c3f5418acd07c1de64e62cc1 +test/extractor-tests/generated/MacroDef/MacroDef_getAttributeMacroExpansion.ql bd076cf1bab968a1502467652d73259d1ce0fe7f8af73bdf914e2ed1d903adf7 4673df049b36082be9a5b325f6afa7118b930bccdb5689e57ff7192b21d07345 test/extractor-tests/generated/MacroDef/MacroDef_getBody.ql 7b350f48e6f208d9fa4725919efd439baf5e9ec4563ba9be261b7a17dacc451b 33f99a707bb89705c92195a5f86055d1f6019bcd33aafcc1942358a6ed413661 test/extractor-tests/generated/MacroDef/MacroDef_getCrateOrigin.ql 6c46366798df82ed96b8fb1efeb46bd84c2660f226ff2359af0041d5cdf004ba 8ab22599ef784dcad778d86828318699c2230c8927ae98ab0c60ac4639d6d1b5 -test/extractor-tests/generated/MacroDef/MacroDef_getExpanded.ql 7f2baed8b5a2ba8a6e67cb601e7a03a7d3276673d6bd3b05f83b76058622bc2d 85241a780e2cec0be062042bcea4a3c3282f3694f6bf7faa64a51f1126b1f438 test/extractor-tests/generated/MacroDef/MacroDef_getExtendedCanonicalPath.ql d09b262b8e5558078506ec370255a63c861ca0c41ab9af3eb4f987325dadd90c cd466062c59b6a8ea2a05ddac1bf5b6d04165755f4773867774215ec5e79afa3 test/extractor-tests/generated/MacroDef/MacroDef_getName.ql 6bc8a17804f23782e98f7baf70a0a87256a639c11f92e3c80940021319868847 726f9d8249b2ca6789d37bb4248bf5dd044acc9add5c25ed62607502c8af65aa test/extractor-tests/generated/MacroDef/MacroDef_getVisibility.ql d858ccaab381432c529bf4a621afc82ea5e4b810b463f2b1f551de79908e14e7 83a85c4f90417ab44570a862642d8f8fc9208e62ba20ca69b32d39a3190381aa @@ -922,10 +923,10 @@ test/extractor-tests/generated/MacroItems/MacroItems.ql 876b5d2a4ce7dcb599e02208 test/extractor-tests/generated/MacroItems/MacroItems_getItem.ql 53fc2db35a23b9aca6ee327d2a51202d23ddf482e6bdd92c5399b7f3a73959b1 63051c8b7a7bfbe9cc640f775e753c9a82f1eb8472989f7d3c8af94fdf26c7a0 test/extractor-tests/generated/MacroPat/MacroPat.ql d9ec72d4d6a7342ee2d9aa7e90227faa31792ca5842fe948d7fdf22597a123b7 74b0f21ef2bb6c13aae74dba1eea97451755110909a083360e2c56cfbc76fd91 test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.ql 398996f0d0f2aa6d3b58d80b26c7d1185b5094d455c6c5c7f075f6d414150aa6 b4662e57cac36ed0e692201f53ba46c3d0826bba99c5cc6dfcb302b44dd2154b -test/extractor-tests/generated/MacroRules/MacroRules.ql 46c125145d836fd5d781d4eda02f9f09f2d39a35350dffb982610b27e4e4936f 4068314eca12ac08ad7e90ceb8b9d935a355c2fe8c38593972484abde1ac47b4 +test/extractor-tests/generated/MacroRules/MacroRules.ql 3c88db0c2ba65a1871340a5e940b66d471477852a1e3edba59a86234b7a9c498 98778dd95d029e4801c42081238db84a39e3ed60b30932436ea0fb51eedfcda1 test/extractor-tests/generated/MacroRules/MacroRules_getAttr.ql 7de501c724e3465520cdc870c357911e7e7fce147f6fb5ed30ad37f21cf7d932 0d7754b89bcad6c012a0b43ee4e48e64dd20b608b3a7aeb4042f95eec50bb6e6 +test/extractor-tests/generated/MacroRules/MacroRules_getAttributeMacroExpansion.ql 461651a72e5f860864ed4342973a666efa5b5749b7fcb00297808352a93f86e0 8b18a507753014f9faf716061d2366f7768dee0e8ea6c04e5276729306f26ce0 test/extractor-tests/generated/MacroRules/MacroRules_getCrateOrigin.ql fccedeee10ef85be3c26f6360b867e81d4ebce3e7f9cf90ccb641c5a14e73e7d 28c38a03a7597a9f56032077102e7a19378b0f3f3a6804e6c234526d0a441997 -test/extractor-tests/generated/MacroRules/MacroRules_getExpanded.ql 01746ce9f525dcf97517d121eb3d80a25a1ee7e1d550b52b3452ee6b8fd83a00 0ccb55088d949fa2cd0d0be34ea5a626c221ae1f35d56ccf2eb20c696d3c157b test/extractor-tests/generated/MacroRules/MacroRules_getExtendedCanonicalPath.ql a0098b1d945df46e546e748c2297444aaccd04a4d543ba3d94424e7f33be6d26 3bab748c7f5bbe486f30e1a1c422a421ab622f401f4f865afb003915ae47be83 test/extractor-tests/generated/MacroRules/MacroRules_getName.ql 591606e3accae8b8fb49e1218c4867a42724ac209cf99786db0e5d7ea0bf55d5 d2936ef5aa4bbf024372516dde3de578990aafb2b8675bbbf0f72e8b54eb82a8 test/extractor-tests/generated/MacroRules/MacroRules_getTokenTree.ql 7598d33c3d86f9ad8629219b90667b2b65e3a1e18c6b0887291df9455a319cab 69d90446743e78e851145683c17677497fe42ed02f61f2b2974e216dc6e05b01 @@ -961,10 +962,10 @@ test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getIdentifier.ql 13 test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getReceiver.ql 77407ac956c897ff7234132de1a825f1af5cfd0b6c1fd3a30f64fe08813d56db d80719e02d19c45bd6534c89ec7255652655f5680199854a0a6552b7c7793249 test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedCrateOrigin.ql c22504665900715e8a32dd47627111e8cef4ed2646f74a8886dead15fbc85bb5 d92462cf3cb40dcd383bcaffc67d9a43e840494df9d7491339cbd09a0a73427b test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedPath.ql 9e7bbb7ed60db49b45c3bdf8e01ec58de751889fc394f59ac33f9d6e98200aa1 c055d877e2ff0edc78cce6dd79c78b2881e7940889729cbb5c12e7029ddeb5a3 -test/extractor-tests/generated/Module/Module.ql 3b534dc4377a6411d75c5d1d99ad649acaebd17364af2738cbc86f5a43315028 feeedeb64c4eccba1787bff746ee8009bddead00123de98b8d5ca0b401078443 +test/extractor-tests/generated/Module/Module.ql 9e75a0f22f1f71eb473ebe73e6ffc618cbb59ea9f22b6e8bc85d3fb00b771c52 3eb5201ef046259207cb64fb123a20b01f2e742b7e4dd38400bd24743e2db1ad test/extractor-tests/generated/Module/Module_getAttr.ql b97ae3f5175a358bf02c47ec154f7c2a0bd7ca54d0561517008d59344736d5cd f199116633c183826afa9ab8e409c3bf118d8e626647dbc617ae0d40d42e5d25 +test/extractor-tests/generated/Module/Module_getAttributeMacroExpansion.ql 9f7c04c405d25448ed6d0e7bf1bb7fea851ea0e400db2246151dd705292ae3a8 f55d86901c7cf053cd68cb7ceb4d6b786834d2d35394079326ea992e7fbc9ce1 test/extractor-tests/generated/Module/Module_getCrateOrigin.ql ff479546bf8fe8ef3da60c9c95b7e8e523c415be61839b2fff5f44c146c4e7df b14d3c0577bd6d6e3b6e5f4b93448cdccde424e21327a2e0213715b16c064a52 -test/extractor-tests/generated/Module/Module_getExpanded.ql 03d49dd284795a59b7b5126218e1c8c7ce1cb0284c5070e2d8875e273d9d90fc fa004cf6b464afe0307c767e4dd29bbce7e1c65de61cdd714af542a8b68bbe44 test/extractor-tests/generated/Module/Module_getExtendedCanonicalPath.ql 55c5b633d05ddbe47d324535a337d5dfed5913ab23cdb826424ddd22009a2a53 ab9e11e334e99be0d4c8d2bd0580657211d05feeeb322fbb5400f07264219497 test/extractor-tests/generated/Module/Module_getItemList.ql 59b49af9788e9d8b5bceaeffe3c3d203038abd987880a720669117ac3db35388 9550939a0e07b11892b38ca03a0ce305d0e924c28d27f25c9acc47a819088969 test/extractor-tests/generated/Module/Module_getName.ql 7945dc007146c650cf4f5ac6e312bbd9c8b023246ff77f033a9410da29774ace 9de11a1806487d123376c6a267a332d72cd81e7d6e4baa48669e0bb28b7e352e @@ -1062,11 +1063,11 @@ test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr_getTypeRepr.ql a6604f test/extractor-tests/generated/SourceFile/SourceFile.ql c30a3c2c82be3114f3857295615e2ec1e59c823f0b65ea3918be85e6b7adb921 6a5bbe96f81861c953eb89f77ea64d580f996dca5950f717dd257a0b795453e6 test/extractor-tests/generated/SourceFile/SourceFile_getAttr.ql 450404306b3d991b23c60a7bb354631d37925e74dec7cc795452fe3263dc2358 07ffcc91523fd029bd599be28fe2fc909917e22f2b95c4257d3605f54f9d7551 test/extractor-tests/generated/SourceFile/SourceFile_getItem.ql f17e44bc0c829b2aadcb6d4ab9c687c10dc8f1afbed4e5190404e574d6ab3107 1cf49a37cc32a67fdc00d16b520daf39143e1b27205c1a610e24d2fe1a464b95 -test/extractor-tests/generated/Static/Static.ql 271ef78c98c5cb8c80812a1028bb6b21b5e3ae11976ed8276b35832bf41c4798 23ab4c55836873daf500973820d2d5eaa5892925ebdc5d35e314b87997ca6ce3 +test/extractor-tests/generated/Static/Static.ql f5f71ff62984d3b337b2065b0a5bc13eed71a61bbf5869f1a1977c5e35dfdd50 630c4d30987e3ca873487f6f0cf7f498827ae0ace005005acdd573cf0e660f6e test/extractor-tests/generated/Static/Static_getAttr.ql adb0bbf55fb962c0e9d317fd815c09c88793c04f2fb78dfd62c259420c70bc68 d317429171c69c4d5d926c26e97b47f5df87cf0552338f575cd3aeea0e57d2c2 +test/extractor-tests/generated/Static/Static_getAttributeMacroExpansion.ql 828ba050c964781dace382e4673c232f2aa80aa4e414d371fd421c3afc2b6902 018f8b75e1779829c87299d2d8f1ab5e7fa1aaa153599da789cf29b599d78477 test/extractor-tests/generated/Static/Static_getBody.ql e735bbd421e22c67db792671f5cb78291c437621fdfd700e5ef13b5b76b3684d 9148dc9d1899cedf817258a30a274e4f2c34659140090ca2afeb1b6f2f21e52f test/extractor-tests/generated/Static/Static_getCrateOrigin.ql f24ac3dac6a6e04d3cc58ae11b09749114a89816c28b96bf6be0e96b2e20d37f e4051426c5daa7e73c1a5a9023d6e50a2b46ebf194f45befbe3dd45e64831a55 -test/extractor-tests/generated/Static/Static_getExpanded.ql 6f949494cba88f12b1657badd7d15bdd0b6aba73701674a64aac9d30cbb4907f 9ea0c4bb0100482e9ae0b03c410860f10fd88115e854b2516b61732acc634501 test/extractor-tests/generated/Static/Static_getExtendedCanonicalPath.ql 6ec02f7ec9cf4cb174a7cdf87921758a3e798c76171be85939614305d773b6a0 c51567dac069fc67ece0aa018ae6332187aa1145f33489093e4aee049d7cea52 test/extractor-tests/generated/Static/Static_getName.ql c7537e166d994b6f961547e8b97ab4328b78cbd038a0eb9afaae42e35f6d9cb4 bb5ae24b85cd7a8340a4ce9e9d56ec3be31558051c82257ccb84289291f38a42 test/extractor-tests/generated/Static/Static_getTypeRepr.ql 45efcf393a3c6d4eca92416d8d6c88e0d0e85a2bc017da097ae2bbbe8a271a32 374b551e2d58813203df6f475a1701c89508803693e2a4bec7afc86c2d58d60b @@ -1075,10 +1076,10 @@ test/extractor-tests/generated/StmtList/StmtList.ql 0010df0d5e30f7bed3bd5d916faf test/extractor-tests/generated/StmtList/StmtList_getAttr.ql 78d4bf65273498f04238706330b03d0b61dd03b001531f05fcb2230f24ceab64 6e02cee05c0b9f104ddea72b20097034edb76e985188b3f10f079bb03163b830 test/extractor-tests/generated/StmtList/StmtList_getStatement.ql abbc3bcf98aab395fc851d5cc58c9c8a13fe1bdd531723bec1bc1b8ddbec6614 e302a26079986fa055306a1f641533dfde36c9bc0dd7958d21e2518b59e808c2 test/extractor-tests/generated/StmtList/StmtList_getTailExpr.ql 578d7c944ef42bdb822fc6ce52fe3d49a0012cf7854cfddbb3d5117133700587 64ea407455a3b4dfbb86202e71a72b5abbff885479367b2834c0dd16d1f9d0ee -test/extractor-tests/generated/Struct/Struct.ql 13d575bd8ca4ad029d233a13a485005bc03f58221b976c7e1df7456ddc788544 fc7cbaaf44d71e66aa8170b1822895fc0d0710d0b3a4da4f1b96ed9633f0b856 +test/extractor-tests/generated/Struct/Struct.ql a4e5d3fe4f994bdf911ebed54a65d237cd5a00510337e911bd5286637bc8ea80 a335224605f3cc35635bf5fd0bebcb50800429c0a82a5aa86a37cb9f6eb3f651 test/extractor-tests/generated/Struct/Struct_getAttr.ql 028d90ddc5189b82cfc8de20f9e05d98e8a12cc185705481f91dd209f2cb1f87 760780a48c12be4581c1675c46aae054a6198196a55b6b989402cc29b7caf245 +test/extractor-tests/generated/Struct/Struct_getAttributeMacroExpansion.ql a17504527a307615d26c2c4b6c21fe9b508f5a77a741d68ca605d2e69668e385 f755d8965c10568a57ff44432a795a0a36b86007fc7470bc652d555946e19231 test/extractor-tests/generated/Struct/Struct_getCrateOrigin.ql 289622244a1333277d3b1507c5cea7c7dd29a7905774f974d8c2100cea50b35f d32941a2d08d7830b42c263ee336bf54de5240bfc22082341b4420a20a1886c7 -test/extractor-tests/generated/Struct/Struct_getExpanded.ql fc6809bfafce55b6ff1794898fcd08ac220c4b2455782c52a51de64346ed09ba 9bcb24573b63831861b55c7f93af58e19af2929acf9bb1b8da94763bbfcde013 test/extractor-tests/generated/Struct/Struct_getExtendedCanonicalPath.ql 866a5893bd0869224fb8aadd071fba35b5386183bb476f5de45c9de7ab88c583 267aedc228d69e31ca8e95dcab6bcb1aa30f9ebaea43896a55016b7d68e3c441 test/extractor-tests/generated/Struct/Struct_getFieldList.ql f45d6d5d953741e52aca67129994b80f6904b2e6b43c519d6d42c29c7b663c42 77a7d07e8462fa608efc58af97ce8f17c5369f9573f9d200191136607cb0e600 test/extractor-tests/generated/Struct/Struct_getGenericParamList.ql cd72452713004690b77086163541fa319f8ab5faf503bb4a6a20bcaf2f790d38 4d72e891c5fac6e491d9e18b87ecf680dc423787d6b419da8f700fe1a14bc26f @@ -1122,21 +1123,21 @@ test/extractor-tests/generated/TokenTree/TokenTree.ql ba2ef197e0566640b57503579f test/extractor-tests/generated/Trait/AssocItemList.ql 0ea572b1350f87cc09ce4dc1794b392cc9ad292abb8439c106a7a1afe166868b 6e7493a3ace65c68b714e31234e149f3fc44941c3b4d125892531102b1060b2f test/extractor-tests/generated/Trait/AssocItemList_getAssocItem.ql 8149d905f6fc6caeb51fa1ddec787d0d90f4642687461c7b1a9d4ab93a27d65d 8fb9caad7d88a89dd71e5cc8e17496afbdf33800e58179f424ef482b1b765bb1 test/extractor-tests/generated/Trait/AssocItemList_getAttr.ql 06526c4a28fd4fdce04ca15fbadc2205b13dcc2d2de24177c370d812e02540e6 79c8ce6e1f8acc1aaca498531e2c1a0e7e2c0f2459d7fc9fe485fd82263c433f -test/extractor-tests/generated/Trait/Trait.ql a7407c80d297ba0b7651ae5756483c8d81874d20af4123552d929870e9125d13 62e45d36c9791702bc9d4a26eb04f22fe713d120a8e00fe6131032b081bad9f4 +test/extractor-tests/generated/Trait/Trait.ql 064785e9389bdf9abd6e0c8728a90a399af568a24c4b18b32cf1c2be2bcbf0b8 a77e89ac31d12c00d1849cb666ebb1eecc4a612934a0d82cd82ecd4c549c9e97 test/extractor-tests/generated/Trait/Trait_getAssocItemList.ql 05e6896f60afabf931a244e42f75ee55e09c749954a751d8895846de3121f58f def1f07d9945e8d9b45a659a285b0eb72b37509d20624c88e0a2d34abf7f0c72 test/extractor-tests/generated/Trait/Trait_getAttr.ql 9711125fa4fc0212b6357f06d1bc50df50b46168d139b649034296c64d732e21 901b6a9d04055b563f13d8742bd770c76ed1b2ccf9a7236a64de9d6d287fbd52 +test/extractor-tests/generated/Trait/Trait_getAttributeMacroExpansion.ql 7ea169336dca0fcaf961f61d811c81834ea28b17b2a01dc57a6e89f5bedc7594 d5a542f84149c0ccd32c7b4a7a19014a99aa63a493f40ea6fbebb83395b788a1 test/extractor-tests/generated/Trait/Trait_getCrateOrigin.ql d8433d63bb2c4b3befaaedc9ce862d1d7edcdf8b83b3fb5529262fab93880d20 3779f2678b3e00aac87259ecfe60903bb564aa5dbbc39adc6c98ad70117d8510 -test/extractor-tests/generated/Trait/Trait_getExpanded.ql 4a6912b74ad6cbfce27c6ffdff781271d182a91a4d781ee02b7ac35b775d681b 14c8df06c3909c9986fc238229208e87b39b238890eb5766af2185c36e3b00c9 test/extractor-tests/generated/Trait/Trait_getExtendedCanonicalPath.ql a2bd16e84f057ed8cb6aae3e2a117453a6e312705302f544a1496dbdd6fcb3e6 b4d419045430aa7acbc45f8043acf6bdacd8aff7fdda8a96c70ae6c364c9f4d1 test/extractor-tests/generated/Trait/Trait_getGenericParamList.ql b27ff28e3aff9ec3369bbbcbee40a07a4bd8af40928c8c1cb7dd1e407a88ffee 2b48e2049df18de61ae3026f8ab4c3e9e517f411605328b37a0b71b288826925 test/extractor-tests/generated/Trait/Trait_getName.ql d4ff3374f9d6068633bd125ede188fcd3f842f739ede214327cd33c3ace37379 3dcf91c303531113b65ea5205e9b6936c5d8b45cd3ddb60cd89ca7e49f0f00c1 test/extractor-tests/generated/Trait/Trait_getTypeBoundList.ql 8a4eb898424fe476db549207d67ba520999342f708cbb89ee0713e6bbf1c050d 69d01d97d161eef86f24dd0777e510530a4db5b0c31c760a9a3a54f70d6dc144 test/extractor-tests/generated/Trait/Trait_getVisibility.ql 8f4641558effd13a96c45d902e5726ba5e78fc9f39d3a05b4c72069993c499f4 553cf299e7d60a242cf44f2a68b8349fd8666cc4ccecab5ce200ce44ad244ba9 test/extractor-tests/generated/Trait/Trait_getWhereClause.ql b34562e7f9ad9003d2ae1f3a9be1b5c141944d3236eae3402a6c73f14652e8ad 509fa3815933737e8996ea2c1540f5d7f3f7de21947b02e10597006967efc9d1 -test/extractor-tests/generated/TraitAlias/TraitAlias.ql 6ba52527c90cd067ce3a48bb5051ba94c3c108444d428244622d381c1264ba55 76acb3a91331fa55c390a1cf2fd70a35052d9019b0216f5e00271ee367607d33 +test/extractor-tests/generated/TraitAlias/TraitAlias.ql c2a36ea7bf5723b9ec1fc24050c99681d9443081386980987bcb5989230a6605 b511356fea3dee5b70fee15369855002775c016db3f292e08293d0bf4b5bd33d test/extractor-tests/generated/TraitAlias/TraitAlias_getAttr.ql 128c24196bfa6204fffd4154ff6acebd2d1924bb366809cdb227f33d89e185c8 56e8329e652567f19ef7d4c4933ee670a27c0afb877a0fab060a0a2031d8133e +test/extractor-tests/generated/TraitAlias/TraitAlias_getAttributeMacroExpansion.ql 029d261d0bdd6fe5bc30011ac72481bce9e5a6029d52fde8bd00932455703276 cad506346840304954e365743c33efed22049f0cbcbb68e21d3a95f7c2e2b301 test/extractor-tests/generated/TraitAlias/TraitAlias_getCrateOrigin.ql 303212122021da7f745050c5de76c756461e5c6e8f4b20e26c43aa63d821c2b6 fdbd024cbe13e34265505147c6faffd997e5c222386c3d9e719cd2a385bde51c -test/extractor-tests/generated/TraitAlias/TraitAlias_getExpanded.ql 8767d1ffb0a9c1e84c39907d3ab5456aff146e877f7bfe905786ff636a39acd9 9467a2b63f32b84501f4aa1ce1e0fc822845a9239216b9ebf4eaf0c23d6d27f3 test/extractor-tests/generated/TraitAlias/TraitAlias_getExtendedCanonicalPath.ql 601b6b0e5e7e7f2926626866085d9a4a9e31dc575791e9bd0019befc0e397193 9bd325414edc35364dba570f6eecc48a8e18c4cbff37d32e920859773c586319 test/extractor-tests/generated/TraitAlias/TraitAlias_getGenericParamList.ql 5a40c1760fcf5074dc9e9efa1a543fc6223f4e5d2984923355802f91edb307e4 9fd7ab65c1d6affe19f96b1037ec3fb9381e90f602dd4611bb958048710601fa test/extractor-tests/generated/TraitAlias/TraitAlias_getName.ql e91fa621774b9467ae820f3c408191ac75ad33dd73bcd417d299006a84c1a069 113e0c5dd2e3ac2ddb1fd6b099b9b5c91d5cdd4a02e62d4eb8e575096f7f4c6a @@ -1164,10 +1165,10 @@ 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 b7c4adb8322a2032657f4417471e7001dbe8236da79af963d6ac5ddf6c4e7c8a 7504a27f32fd76520398c95abd6adeca67be5b71ff4b8abdd086eb29c0d698fc +test/extractor-tests/generated/TypeAlias/TypeAlias.ql 5cbf0b82a25a492c153b4663e5a2c0bea4b15ff53fa22ba1217edaf3bb48c6af d28e6a9eafff3fb84a6f38e3c79ad0d54cb08c7609cd43c968efd3fbc4154957 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 -test/extractor-tests/generated/TypeAlias/TypeAlias_getExpanded.ql dc797269de5b29409484577d4f2e4de9462a1001232a57c141c1e9d3f0e7ad74 d2c3d55fcdf077523ceb899d11d479db15b449b5e82eb8610cb637ae79ef74e6 test/extractor-tests/generated/TypeAlias/TypeAlias_getExtendedCanonicalPath.ql fe9c4132e65b54eb071b779e508e9ed0081d860df20f8d4748332b45b7215fd5 448c10c3f8f785c380ce430996af4040419d8dccfa86f75253b6af83d2c8f1c9 test/extractor-tests/generated/TypeAlias/TypeAlias_getGenericParamList.ql e7e936458dce5a8c6675485a49e2769b6dbff29c112ed744c880e0fc7ae740ef e5fcf3a33d2416db6b0a73401a3cbc0cece22d0e06794e01a1645f2b3bca9306 test/extractor-tests/generated/TypeAlias/TypeAlias_getName.ql 757deb3493764677de3eb1ff7cc119a469482b7277ed01eb8aa0c38b4a8797fb 5efed24a6968544b10ff44bfac7d0432a9621bde0e53b8477563d600d4847825 @@ -1190,20 +1191,20 @@ test/extractor-tests/generated/TypeParam/TypeParam_getName.ql 9d5b6d6a9f2a5793e2 test/extractor-tests/generated/TypeParam/TypeParam_getTypeBoundList.ql 080a6b370ad460bf128fdfd632aa443af2ad91c3483e192ad756eb234dbfa4d8 8b048d282963f670db357f1eef9b8339f83d03adf57489a22b441d5c782aff62 test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr.ql 4ad6ed0c803fb4f58094a55b866940b947b16259756c674200172551ee6546e0 d3270bdcc4c026325159bd2a59848eb51d96298b2bf21402ea0a83ac1ea6d291 test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr_getAttr.ql d8502be88bcd97465f387c410b5078a4709e32b2baa556a4918ea5e609c40dd7 b238dc37404254e3e7806d50a7b1453e17e71da122931331b16a55853d3a843f -test/extractor-tests/generated/Union/Union.ql ef8005f4ac5d3e6f308b3bb1a1861403674cbb1b72e6558573e9506865ae985e 88933d0f9500ce61a847fbb792fd778d77a4e7379fc353d2a9f5060773eda64f +test/extractor-tests/generated/Union/Union.ql 2795c83d4511fadf24cc66a762adbabca084bc6ac48501715f666979d2ea9ea5 7efae5209ae3ee8c73cd1c9e9e05f01b3fdda65d9a553c2ac5216351b6f15e5c test/extractor-tests/generated/Union/Union_getAttr.ql 42fa0878a6566208863b1d884baf7b68b46089827fdb1dbbfacbfccf5966a9a2 54aa94f0281ca80d1a4bdb0e2240f4384af2ab8d50f251875d1877d0964579fc +test/extractor-tests/generated/Union/Union_getAttributeMacroExpansion.ql ddd0133a497dc057a353b86acc8ed991fefeaefa335d8ad9fe95109a90e39e54 fcaed4287815226843157c007674b1f1405cae31856fed1113d569bab5608d9b test/extractor-tests/generated/Union/Union_getCrateOrigin.ql c218308cf17b1490550229a725542d248617661b1a5fa14e9b0e18d29c5ecc00 e0489242c8ff7aa4dbfdebcd46a5e0d9bea0aa618eb0617e76b9b6f863a2907a -test/extractor-tests/generated/Union/Union_getExpanded.ql a096814a812662a419b50aa9fd66ab2f6be9d4471df3d50351e9d0bcf061f194 51b406644ee819d74f1b80cdb3a451fa1fad6e6a65d89fa6e3dc87516d9d4292 test/extractor-tests/generated/Union/Union_getExtendedCanonicalPath.ql 6268ddb68c3e05906e3fc85e40635925b84e5c7290746ded9c6814d362033068 04473b3b9891012e95733463018db8da0e96659ea0b10458b33dc857c091d278 test/extractor-tests/generated/Union/Union_getGenericParamList.ql c55156ae26b766e385be7d21e67f8c3c45c29274201c93d660077fcc47e1ceee 4c4d338e17c32876ef6e51fd19cff67d125dd89c10e939dfaadbac824bef6a68 test/extractor-tests/generated/Union/Union_getName.ql 17247183e1a8c8bbb15e67120f65ca323630bddeb614fa8a48e1e74319f8ed37 e21c2a0205bc991ba86f3e508451ef31398bdf5441f6d2a3f72113aaae9e152b test/extractor-tests/generated/Union/Union_getStructFieldList.ql ae42dec53a42bcb712ec5e94a3137a5c0b7743ea3b635e44e7af8a0d59e59182 61b34bb8d6e05d9eb34ce353eef7cc07c684179bf2e3fdf9f5541e04bef41425 test/extractor-tests/generated/Union/Union_getVisibility.ql 86628736a677343d816e541ba76db02bdae3390f8367c09be3c1ff46d1ae8274 6514cdf4bfad8d9c968de290cc981be1063c0919051822cc6fdb03e8a891f123 test/extractor-tests/generated/Union/Union_getWhereClause.ql 508e68ffa87f4eca2e2f9c894d215ea76070d628a294809dc267082b9e36a359 29da765d11794441a32a5745d4cf594495a9733e28189d898f64da864817894f -test/extractor-tests/generated/Use/Use.ql 9a0a5efb8118830355fb90bc850de011ae8586c12dce92cfc8f39a870dd52100 7fd580282752a8e6a8ea9ac33ff23a950304030bc32cfbd3b9771368723fb8d6 +test/extractor-tests/generated/Use/Use.ql 1adafd3adcfbf907250ce3592599d96c64572e381937fa11d11ce6d4f35cfd7f 2671e34197df8002142b5facb5380604e807e87aa41e7f8e32dc6d1eefb695f1 test/extractor-tests/generated/Use/Use_getAttr.ql 6d43c25401398108553508aabb32ca476b3072060bb73eb07b1b60823a01f964 84e6f6953b4aa9a7472082f0a4f2df26ab1d157529ab2c661f0031603c94bb1d +test/extractor-tests/generated/Use/Use_getAttributeMacroExpansion.ql d02562044449f6de2c70241e0964a8dedb7d1f722c2a98ee9c96638841fa1bc5 a1db982e16b35f1a0ab4091999437a471018afd9f4f01504723aa989d49e4034 test/extractor-tests/generated/Use/Use_getCrateOrigin.ql 912ebc1089aa3390d4142a39ea73d5490eae525d1fb51654fdd05e9dd48a94b6 c59e36362016ae536421e6d517889cea0b2670818ea1f9e997796f51a9b381e2 -test/extractor-tests/generated/Use/Use_getExpanded.ql 386631ee0ee002d3d6f7f6e48c87d2bb2c4349aa3692d16730c0bc31853b11cf 50e03f47cc1099d7f2f27724ea82d3b69b85e826b66736361b0cbeceb88f88a4 test/extractor-tests/generated/Use/Use_getExtendedCanonicalPath.ql ccfde95c861cf4199e688b6efeeee9dab58a27cfecd520e39cc20f89143c03c9 6ff93df4134667d7cb74ae7efe102fe2db3ad4c67b4b5a0f8955f21997806f16 test/extractor-tests/generated/Use/Use_getUseTree.ql 1dfe6bb40b29fbf823d67fecfc36ba928b43f17c38227b8eedf19fa252edf3af aacdcc4cf418ef1eec267287d2af905fe73f5bcfb080ef5373d08da31c608720 test/extractor-tests/generated/Use/Use_getVisibility.ql 587f80acdd780042c48aeb347004be5e9fd9df063d263e6e4f2b660c48c53a8f 0c2c04f95838bca93dfe93fa208e1df7677797efc62b4e8052a4f9c5d20831dd diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index 9fb82167e791..c9915f995e6f 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -740,9 +740,9 @@ /test/extractor-tests/generated/Comment/Comment.ql linguist-generated /test/extractor-tests/generated/Const/Const.ql linguist-generated /test/extractor-tests/generated/Const/Const_getAttr.ql linguist-generated +/test/extractor-tests/generated/Const/Const_getAttributeMacroExpansion.ql linguist-generated /test/extractor-tests/generated/Const/Const_getBody.ql linguist-generated /test/extractor-tests/generated/Const/Const_getCrateOrigin.ql linguist-generated -/test/extractor-tests/generated/Const/Const_getExpanded.ql linguist-generated /test/extractor-tests/generated/Const/Const_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Const/Const_getName.ql linguist-generated /test/extractor-tests/generated/Const/Const_getTypeRepr.ql linguist-generated @@ -764,8 +764,8 @@ /test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr_getTypeBoundList.ql linguist-generated /test/extractor-tests/generated/Enum/Enum.ql linguist-generated /test/extractor-tests/generated/Enum/Enum_getAttr.ql linguist-generated +/test/extractor-tests/generated/Enum/Enum_getAttributeMacroExpansion.ql linguist-generated /test/extractor-tests/generated/Enum/Enum_getCrateOrigin.ql linguist-generated -/test/extractor-tests/generated/Enum/Enum_getExpanded.ql linguist-generated /test/extractor-tests/generated/Enum/Enum_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Enum/Enum_getGenericParamList.ql linguist-generated /test/extractor-tests/generated/Enum/Enum_getName.ql linguist-generated @@ -777,14 +777,14 @@ /test/extractor-tests/generated/ExternBlock/ExternBlock.ql linguist-generated /test/extractor-tests/generated/ExternBlock/ExternBlock_getAbi.ql linguist-generated /test/extractor-tests/generated/ExternBlock/ExternBlock_getAttr.ql linguist-generated +/test/extractor-tests/generated/ExternBlock/ExternBlock_getAttributeMacroExpansion.ql linguist-generated /test/extractor-tests/generated/ExternBlock/ExternBlock_getCrateOrigin.ql linguist-generated -/test/extractor-tests/generated/ExternBlock/ExternBlock_getExpanded.ql linguist-generated /test/extractor-tests/generated/ExternBlock/ExternBlock_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/ExternBlock/ExternBlock_getExternItemList.ql linguist-generated /test/extractor-tests/generated/ExternCrate/ExternCrate.ql linguist-generated /test/extractor-tests/generated/ExternCrate/ExternCrate_getAttr.ql linguist-generated +/test/extractor-tests/generated/ExternCrate/ExternCrate_getAttributeMacroExpansion.ql linguist-generated /test/extractor-tests/generated/ExternCrate/ExternCrate_getCrateOrigin.ql linguist-generated -/test/extractor-tests/generated/ExternCrate/ExternCrate_getExpanded.ql linguist-generated /test/extractor-tests/generated/ExternCrate/ExternCrate_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.ql linguist-generated /test/extractor-tests/generated/ExternCrate/ExternCrate_getRename.ql linguist-generated @@ -827,9 +827,9 @@ /test/extractor-tests/generated/Function/Function.ql linguist-generated /test/extractor-tests/generated/Function/Function_getAbi.ql linguist-generated /test/extractor-tests/generated/Function/Function_getAttr.ql linguist-generated +/test/extractor-tests/generated/Function/Function_getAttributeMacroExpansion.ql linguist-generated /test/extractor-tests/generated/Function/Function_getBody.ql linguist-generated /test/extractor-tests/generated/Function/Function_getCrateOrigin.ql linguist-generated -/test/extractor-tests/generated/Function/Function_getExpanded.ql linguist-generated /test/extractor-tests/generated/Function/Function_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Function/Function_getGenericParamList.ql linguist-generated /test/extractor-tests/generated/Function/Function_getName.ql linguist-generated @@ -853,8 +853,8 @@ /test/extractor-tests/generated/Impl/Impl.ql linguist-generated /test/extractor-tests/generated/Impl/Impl_getAssocItemList.ql linguist-generated /test/extractor-tests/generated/Impl/Impl_getAttr.ql linguist-generated +/test/extractor-tests/generated/Impl/Impl_getAttributeMacroExpansion.ql linguist-generated /test/extractor-tests/generated/Impl/Impl_getCrateOrigin.ql linguist-generated -/test/extractor-tests/generated/Impl/Impl_getExpanded.ql linguist-generated /test/extractor-tests/generated/Impl/Impl_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Impl/Impl_getGenericParamList.ql linguist-generated /test/extractor-tests/generated/Impl/Impl_getSelfTy.ql linguist-generated @@ -904,17 +904,18 @@ /test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.ql linguist-generated /test/extractor-tests/generated/MacroCall/MacroCall.ql linguist-generated /test/extractor-tests/generated/MacroCall/MacroCall_getAttr.ql linguist-generated +/test/extractor-tests/generated/MacroCall/MacroCall_getAttributeMacroExpansion.ql linguist-generated /test/extractor-tests/generated/MacroCall/MacroCall_getCrateOrigin.ql linguist-generated -/test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.ql linguist-generated /test/extractor-tests/generated/MacroCall/MacroCall_getExtendedCanonicalPath.ql linguist-generated +/test/extractor-tests/generated/MacroCall/MacroCall_getMacroCallExpansion.ql linguist-generated /test/extractor-tests/generated/MacroCall/MacroCall_getPath.ql linguist-generated /test/extractor-tests/generated/MacroCall/MacroCall_getTokenTree.ql linguist-generated /test/extractor-tests/generated/MacroDef/MacroDef.ql linguist-generated /test/extractor-tests/generated/MacroDef/MacroDef_getArgs.ql linguist-generated /test/extractor-tests/generated/MacroDef/MacroDef_getAttr.ql linguist-generated +/test/extractor-tests/generated/MacroDef/MacroDef_getAttributeMacroExpansion.ql linguist-generated /test/extractor-tests/generated/MacroDef/MacroDef_getBody.ql linguist-generated /test/extractor-tests/generated/MacroDef/MacroDef_getCrateOrigin.ql linguist-generated -/test/extractor-tests/generated/MacroDef/MacroDef_getExpanded.ql linguist-generated /test/extractor-tests/generated/MacroDef/MacroDef_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/MacroDef/MacroDef_getName.ql linguist-generated /test/extractor-tests/generated/MacroDef/MacroDef_getVisibility.ql linguist-generated @@ -926,8 +927,8 @@ /test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.ql linguist-generated /test/extractor-tests/generated/MacroRules/MacroRules.ql linguist-generated /test/extractor-tests/generated/MacroRules/MacroRules_getAttr.ql linguist-generated +/test/extractor-tests/generated/MacroRules/MacroRules_getAttributeMacroExpansion.ql linguist-generated /test/extractor-tests/generated/MacroRules/MacroRules_getCrateOrigin.ql linguist-generated -/test/extractor-tests/generated/MacroRules/MacroRules_getExpanded.ql linguist-generated /test/extractor-tests/generated/MacroRules/MacroRules_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/MacroRules/MacroRules_getName.ql linguist-generated /test/extractor-tests/generated/MacroRules/MacroRules_getTokenTree.ql linguist-generated @@ -965,8 +966,8 @@ /test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedPath.ql linguist-generated /test/extractor-tests/generated/Module/Module.ql linguist-generated /test/extractor-tests/generated/Module/Module_getAttr.ql linguist-generated +/test/extractor-tests/generated/Module/Module_getAttributeMacroExpansion.ql linguist-generated /test/extractor-tests/generated/Module/Module_getCrateOrigin.ql linguist-generated -/test/extractor-tests/generated/Module/Module_getExpanded.ql linguist-generated /test/extractor-tests/generated/Module/Module_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Module/Module_getItemList.ql linguist-generated /test/extractor-tests/generated/Module/Module_getName.ql linguist-generated @@ -1066,9 +1067,9 @@ /test/extractor-tests/generated/SourceFile/SourceFile_getItem.ql linguist-generated /test/extractor-tests/generated/Static/Static.ql linguist-generated /test/extractor-tests/generated/Static/Static_getAttr.ql linguist-generated +/test/extractor-tests/generated/Static/Static_getAttributeMacroExpansion.ql linguist-generated /test/extractor-tests/generated/Static/Static_getBody.ql linguist-generated /test/extractor-tests/generated/Static/Static_getCrateOrigin.ql linguist-generated -/test/extractor-tests/generated/Static/Static_getExpanded.ql linguist-generated /test/extractor-tests/generated/Static/Static_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Static/Static_getName.ql linguist-generated /test/extractor-tests/generated/Static/Static_getTypeRepr.ql linguist-generated @@ -1079,8 +1080,8 @@ /test/extractor-tests/generated/StmtList/StmtList_getTailExpr.ql linguist-generated /test/extractor-tests/generated/Struct/Struct.ql linguist-generated /test/extractor-tests/generated/Struct/Struct_getAttr.ql linguist-generated +/test/extractor-tests/generated/Struct/Struct_getAttributeMacroExpansion.ql linguist-generated /test/extractor-tests/generated/Struct/Struct_getCrateOrigin.ql linguist-generated -/test/extractor-tests/generated/Struct/Struct_getExpanded.ql linguist-generated /test/extractor-tests/generated/Struct/Struct_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Struct/Struct_getFieldList.ql linguist-generated /test/extractor-tests/generated/Struct/Struct_getGenericParamList.ql linguist-generated @@ -1127,8 +1128,8 @@ /test/extractor-tests/generated/Trait/Trait.ql linguist-generated /test/extractor-tests/generated/Trait/Trait_getAssocItemList.ql linguist-generated /test/extractor-tests/generated/Trait/Trait_getAttr.ql linguist-generated +/test/extractor-tests/generated/Trait/Trait_getAttributeMacroExpansion.ql linguist-generated /test/extractor-tests/generated/Trait/Trait_getCrateOrigin.ql linguist-generated -/test/extractor-tests/generated/Trait/Trait_getExpanded.ql linguist-generated /test/extractor-tests/generated/Trait/Trait_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Trait/Trait_getGenericParamList.ql linguist-generated /test/extractor-tests/generated/Trait/Trait_getName.ql linguist-generated @@ -1137,8 +1138,8 @@ /test/extractor-tests/generated/Trait/Trait_getWhereClause.ql linguist-generated /test/extractor-tests/generated/TraitAlias/TraitAlias.ql linguist-generated /test/extractor-tests/generated/TraitAlias/TraitAlias_getAttr.ql linguist-generated +/test/extractor-tests/generated/TraitAlias/TraitAlias_getAttributeMacroExpansion.ql linguist-generated /test/extractor-tests/generated/TraitAlias/TraitAlias_getCrateOrigin.ql linguist-generated -/test/extractor-tests/generated/TraitAlias/TraitAlias_getExpanded.ql linguist-generated /test/extractor-tests/generated/TraitAlias/TraitAlias_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/TraitAlias/TraitAlias_getGenericParamList.ql linguist-generated /test/extractor-tests/generated/TraitAlias/TraitAlias_getName.ql linguist-generated @@ -1168,8 +1169,8 @@ /test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr_getField.ql linguist-generated /test/extractor-tests/generated/TypeAlias/TypeAlias.ql linguist-generated /test/extractor-tests/generated/TypeAlias/TypeAlias_getAttr.ql linguist-generated +/test/extractor-tests/generated/TypeAlias/TypeAlias_getAttributeMacroExpansion.ql linguist-generated /test/extractor-tests/generated/TypeAlias/TypeAlias_getCrateOrigin.ql linguist-generated -/test/extractor-tests/generated/TypeAlias/TypeAlias_getExpanded.ql linguist-generated /test/extractor-tests/generated/TypeAlias/TypeAlias_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/TypeAlias/TypeAlias_getGenericParamList.ql linguist-generated /test/extractor-tests/generated/TypeAlias/TypeAlias_getName.ql linguist-generated @@ -1194,8 +1195,8 @@ /test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr_getAttr.ql linguist-generated /test/extractor-tests/generated/Union/Union.ql linguist-generated /test/extractor-tests/generated/Union/Union_getAttr.ql linguist-generated +/test/extractor-tests/generated/Union/Union_getAttributeMacroExpansion.ql linguist-generated /test/extractor-tests/generated/Union/Union_getCrateOrigin.ql linguist-generated -/test/extractor-tests/generated/Union/Union_getExpanded.ql linguist-generated /test/extractor-tests/generated/Union/Union_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Union/Union_getGenericParamList.ql linguist-generated /test/extractor-tests/generated/Union/Union_getName.ql linguist-generated @@ -1204,8 +1205,8 @@ /test/extractor-tests/generated/Union/Union_getWhereClause.ql linguist-generated /test/extractor-tests/generated/Use/Use.ql linguist-generated /test/extractor-tests/generated/Use/Use_getAttr.ql linguist-generated +/test/extractor-tests/generated/Use/Use_getAttributeMacroExpansion.ql linguist-generated /test/extractor-tests/generated/Use/Use_getCrateOrigin.ql linguist-generated -/test/extractor-tests/generated/Use/Use_getExpanded.ql linguist-generated /test/extractor-tests/generated/Use/Use_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Use/Use_getUseTree.ql linguist-generated /test/extractor-tests/generated/Use/Use_getVisibility.ql linguist-generated diff --git a/rust/ql/lib/codeql/rust/controlflow/CfgNodes.qll b/rust/ql/lib/codeql/rust/controlflow/CfgNodes.qll index e68f2efde5b6..a118cf6b4720 100644 --- a/rust/ql/lib/codeql/rust/controlflow/CfgNodes.qll +++ b/rust/ql/lib/codeql/rust/controlflow/CfgNodes.qll @@ -217,7 +217,7 @@ final class MacroCallCfgNode extends Nodes::MacroCallCfgNode { /** Gets the CFG node for the expansion of this macro call, if it exists. */ CfgNode getExpandedNode() { - any(ChildMapping mapping).hasCfgChild(node, node.getExpanded(), this, result) + any(ChildMapping mapping).hasCfgChild(node, node.getMacroCallExpansion(), this, result) } } diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll b/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll index 2f1f710df837..e32028885110 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll @@ -75,7 +75,7 @@ class StructPatChildMapping extends ParentAstNode, StructPat { } class MacroCallChildMapping extends ParentAstNode, MacroCall { - override predicate relevantChild(AstNode child) { child = this.getExpanded() } + override predicate relevantChild(AstNode child) { child = this.getMacroCallExpansion() } } class FormatArgsExprChildMapping extends ParentAstNode, CfgImpl::ExprTrees::FormatArgsExprTree { diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll b/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll index 1107068606f1..01169ce2727a 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll @@ -160,7 +160,7 @@ private predicate guaranteedMatchPosition(Pat pat) { parent.(OrPat).getLastPat() = pat or // for macro patterns we propagate to the expanded pattern - parent.(MacroPat).getMacroCall().getExpanded() = pat + parent.(MacroPat).getMacroCall().getMacroCallExpansion() = pat ) } diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index 900580914e2f..e13dd9ac84e3 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -143,7 +143,7 @@ class LetStmtTree extends PreOrderTree, LetStmt { } class MacroCallTree extends StandardPostOrderTree, MacroCall { - override AstNode getChildNode(int i) { i = 0 and result = this.getExpanded() } + override AstNode getChildNode(int i) { i = 0 and result = this.getMacroCallExpansion() } } class MacroStmtsTree extends StandardPreOrderTree, MacroStmts { @@ -685,7 +685,7 @@ module PatternTrees { } class MacroPatTree extends PreOrderPatTree, MacroPat { - override Pat getPat(int i) { i = 0 and result = this.getMacroCall().getExpanded() } + override Pat getPat(int i) { i = 0 and result = this.getMacroCall().getMacroCallExpansion() } } class OrPatTree extends PostOrderPatTree instanceof OrPat { diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll b/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll index 8631e242e823..4f8c733caa07 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll @@ -1818,6 +1818,16 @@ module MakeCfgNodes Input> { * Holds if `getTokenTree()` exists. */ predicate hasTokenTree() { exists(this.getTokenTree()) } + + /** + * Gets the macro call expansion of this macro call, if it exists. + */ + AstNode getMacroCallExpansion() { result = node.getMacroCallExpansion() } + + /** + * Holds if `getMacroCallExpansion()` exists. + */ + predicate hasMacroCallExpansion() { exists(this.getMacroCallExpansion()) } } final private class ParentMacroExpr extends ParentAstNode, MacroExpr { diff --git a/rust/ql/lib/codeql/rust/elements/Item.qll b/rust/ql/lib/codeql/rust/elements/Item.qll index 30c11c6481e4..1a8b0439695d 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.AstNode +import codeql.rust.elements.MacroItems import codeql.rust.elements.Stmt /** diff --git a/rust/ql/lib/codeql/rust/elements/MacroCall.qll b/rust/ql/lib/codeql/rust/elements/MacroCall.qll index 5399f1f2a872..b0985ea3fed8 100644 --- a/rust/ql/lib/codeql/rust/elements/MacroCall.qll +++ b/rust/ql/lib/codeql/rust/elements/MacroCall.qll @@ -5,6 +5,7 @@ private import internal.MacroCallImpl import codeql.rust.elements.AssocItem +import codeql.rust.elements.AstNode import codeql.rust.elements.Attr import codeql.rust.elements.ExternItem import codeql.rust.elements.Item diff --git a/rust/ql/lib/codeql/rust/elements/MacroItems.qll b/rust/ql/lib/codeql/rust/elements/MacroItems.qll index e189c0dca2e0..8fdcc3945f1c 100644 --- a/rust/ql/lib/codeql/rust/elements/MacroItems.qll +++ b/rust/ql/lib/codeql/rust/elements/MacroItems.qll @@ -8,10 +8,18 @@ import codeql.rust.elements.AstNode import codeql.rust.elements.Item /** - * A sequence of items generated by a `MacroCall`. For example: + * A sequence of items generated by a macro. For example: * ```rust * mod foo{ * include!("common_definitions.rs"); + * + * #[an_attribute_macro] + * fn foo() { + * println!("Hello, world!"); + * } + * + * #[derive(Debug)] + * struct Bar; * } * ``` */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/AstNodeImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AstNodeImpl.qll index dea172a72669..f75294f3d10e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AstNodeImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AstNodeImpl.qll @@ -60,7 +60,7 @@ module Impl { /** Holds if this node is inside a macro expansion. */ predicate isInMacroExpansion() { - this = any(MacroCall mc).getExpanded() + this = any(MacroCall mc).getMacroCallExpansion() or this.getParentNode().isInMacroExpansion() } diff --git a/rust/ql/lib/codeql/rust/elements/internal/MacroItemsImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MacroItemsImpl.qll index 2ed6536fac87..0efb96554a47 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MacroItemsImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MacroItemsImpl.qll @@ -13,10 +13,18 @@ private import codeql.rust.elements.internal.generated.MacroItems */ module Impl { /** - * A sequence of items generated by a `MacroCall`. For example: + * A sequence of items generated by a macro. For example: * ```rust * mod foo{ * include!("common_definitions.rs"); + * + * #[an_attribute_macro] + * fn foo() { + * println!("Hello, world!"); + * } + * + * #[derive(Debug)] + * struct Bar; * } * ``` */ 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 e93d25f86f33..eaf0607c5d9b 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.AstNode +import codeql.rust.elements.MacroItems import codeql.rust.elements.internal.StmtImpl::Impl as StmtImpl /** @@ -25,15 +25,18 @@ module Generated { */ class Item extends Synth::TItem, StmtImpl::Stmt, AddressableImpl::Addressable { /** - * Gets the expanded attribute or procedural macro call of this item, if it exists. + * Gets the attribute macro expansion of this item, if it exists. */ - AstNode getExpanded() { - result = Synth::convertAstNodeFromRaw(Synth::convertItemToRaw(this).(Raw::Item).getExpanded()) + MacroItems getAttributeMacroExpansion() { + result = + Synth::convertMacroItemsFromRaw(Synth::convertItemToRaw(this) + .(Raw::Item) + .getAttributeMacroExpansion()) } /** - * Holds if `getExpanded()` exists. + * Holds if `getAttributeMacroExpansion()` exists. */ - final predicate hasExpanded() { exists(this.getExpanded()) } + final predicate hasAttributeMacroExpansion() { exists(this.getAttributeMacroExpansion()) } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroCall.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroCall.qll index 30717a1a3919..6aea6ebfd8b0 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroCall.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroCall.qll @@ -7,6 +7,7 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.internal.AssocItemImpl::Impl as AssocItemImpl +import codeql.rust.elements.AstNode import codeql.rust.elements.Attr import codeql.rust.elements.internal.ExternItemImpl::Impl as ExternItemImpl import codeql.rust.elements.internal.ItemImpl::Impl as ItemImpl @@ -76,5 +77,20 @@ module Generated { * Holds if `getTokenTree()` exists. */ final predicate hasTokenTree() { exists(this.getTokenTree()) } + + /** + * Gets the macro call expansion of this macro call, if it exists. + */ + AstNode getMacroCallExpansion() { + result = + Synth::convertAstNodeFromRaw(Synth::convertMacroCallToRaw(this) + .(Raw::MacroCall) + .getMacroCallExpansion()) + } + + /** + * Holds if `getMacroCallExpansion()` exists. + */ + final predicate hasMacroCallExpansion() { exists(this.getMacroCallExpansion()) } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroItems.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroItems.qll index c86181ff5d5c..5dc115ecba4f 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroItems.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroItems.qll @@ -15,10 +15,18 @@ import codeql.rust.elements.Item */ module Generated { /** - * A sequence of items generated by a `MacroCall`. For example: + * A sequence of items generated by a macro. For example: * ```rust * mod foo{ * include!("common_definitions.rs"); + * + * #[an_attribute_macro] + * fn foo() { + * println!("Hello, world!"); + * } + * + * #[derive(Debug)] + * struct Bar; * } * ``` * INTERNAL: Do not reference the `Generated::MacroItems` class directly. 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 d84b28f91173..413aad7e27d2 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -2204,13 +2204,13 @@ private module Impl { } private Element getImmediateChildOfItem(Item e, int index, string partialPredicateCall) { - exists(int b, int bStmt, int bAddressable, int n, int nExpanded | + exists(int b, int bStmt, int bAddressable, int n, int nAttributeMacroExpansion | 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 - nExpanded = n + 1 and + nAttributeMacroExpansion = n + 1 and ( none() or @@ -2218,7 +2218,9 @@ private module Impl { or result = getImmediateChildOfAddressable(e, index - bStmt, partialPredicateCall) or - index = n and result = e.getExpanded() and partialPredicateCall = "Expanded()" + index = n and + result = e.getAttributeMacroExpansion() and + partialPredicateCall = "AttributeMacroExpansion()" ) ) } @@ -3498,7 +3500,8 @@ private module Impl { private Element getImmediateChildOfMacroCall(MacroCall e, int index, string partialPredicateCall) { exists( - int b, int bAssocItem, int bExternItem, int bItem, int n, int nAttr, int nPath, int nTokenTree + int b, int bAssocItem, int bExternItem, int bItem, int n, int nAttr, int nPath, + int nTokenTree, int nMacroCallExpansion | b = 0 and bAssocItem = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAssocItem(e, i, _)) | i) and @@ -3509,6 +3512,7 @@ private module Impl { nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nPath = nAttr + 1 and nTokenTree = nPath + 1 and + nMacroCallExpansion = nTokenTree + 1 and ( none() or @@ -3524,6 +3528,10 @@ private module Impl { index = nAttr and result = e.getPath() and partialPredicateCall = "Path()" or index = nPath and result = e.getTokenTree() and partialPredicateCall = "TokenTree()" + or + index = nTokenTree and + result = e.getMacroCallExpansion() and + partialPredicateCall = "MacroCallExpansion()" ) ) } 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 275f143083a5..e86f82854f33 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -486,10 +486,18 @@ module Raw { /** * INTERNAL: Do not use. - * A sequence of items generated by a `MacroCall`. For example: + * A sequence of items generated by a macro. For example: * ```rust * mod foo{ * include!("common_definitions.rs"); + * + * #[an_attribute_macro] + * fn foo() { + * println!("Hello, world!"); + * } + * + * #[derive(Debug)] + * struct Bar; * } * ``` */ @@ -2182,9 +2190,9 @@ module Raw { */ class Item extends @item, Stmt, Addressable { /** - * Gets the expanded attribute or procedural macro call of this item, if it exists. + * Gets the attribute macro expansion of this item, if it exists. */ - AstNode getExpanded() { item_expandeds(this, result) } + MacroItems getAttributeMacroExpansion() { item_attribute_macro_expansions(this, result) } } /** @@ -3625,6 +3633,11 @@ module Raw { * Gets the token tree of this macro call, if it exists. */ TokenTree getTokenTree() { macro_call_token_trees(this, result) } + + /** + * Gets the macro call expansion of this macro call, if it exists. + */ + AstNode getMacroCallExpansion() { macro_call_macro_call_expansions(this, result) } } /** diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index f78cb8f2ab3b..7b74969ab7ac 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -1960,9 +1960,9 @@ infer_type_reprs( ; #keyset[id] -item_expandeds( +item_attribute_macro_expansions( int id: @item ref, - int expanded: @ast_node ref + int attribute_macro_expansion: @macro_items ref ); @labelable_expr = @@ -3088,6 +3088,12 @@ macro_call_token_trees( 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 ); diff --git a/rust/ql/lib/upgrades/e8707b675dc574aca9863eabcc09ac76f15bb9c2/rust.dbscheme b/rust/ql/lib/upgrades/e8707b675dc574aca9863eabcc09ac76f15bb9c2/rust.dbscheme index f78cb8f2ab3b..7b74969ab7ac 100644 --- a/rust/ql/lib/upgrades/e8707b675dc574aca9863eabcc09ac76f15bb9c2/rust.dbscheme +++ b/rust/ql/lib/upgrades/e8707b675dc574aca9863eabcc09ac76f15bb9c2/rust.dbscheme @@ -1960,9 +1960,9 @@ infer_type_reprs( ; #keyset[id] -item_expandeds( +item_attribute_macro_expansions( int id: @item ref, - int expanded: @ast_node ref + int attribute_macro_expansion: @macro_items ref ); @labelable_expr = @@ -3088,6 +3088,12 @@ macro_call_token_trees( 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 ); diff --git a/rust/ql/lib/upgrades/e8707b675dc574aca9863eabcc09ac76f15bb9c2/upgrade.properties b/rust/ql/lib/upgrades/e8707b675dc574aca9863eabcc09ac76f15bb9c2/upgrade.properties index 5834a727f49c..6444d6056330 100644 --- a/rust/ql/lib/upgrades/e8707b675dc574aca9863eabcc09ac76f15bb9c2/upgrade.properties +++ b/rust/ql/lib/upgrades/e8707b675dc574aca9863eabcc09ac76f15bb9c2/upgrade.properties @@ -1,4 +1,4 @@ -description: Add `expanded` to all `@item` elements +description: Rename `expanded` to `macro_call_expansion` compatibility: backwards -item_expandeds.rel: reorder macro_call_expandeds.rel (@macro_call id, @ast_node expanded) id expanded +macro_call_macro_call_expansions.rel: reorder macro_call_expandeds.rel (@macro_call id, @ast_node expanded) id expanded macro_call_expandeds.rel: delete diff --git a/rust/ql/test/extractor-tests/attribute_macro_expansion/test.expected b/rust/ql/test/extractor-tests/attribute_macro_expansion/test.expected deleted file mode 100644 index c6815fb38287..000000000000 --- a/rust/ql/test/extractor-tests/attribute_macro_expansion/test.expected +++ /dev/null @@ -1,2 +0,0 @@ -| attr_macro_expansion.rs:1:1:2:11 | fn foo | attr_macro_expansion.rs:2:4:2:6 | Static | -| attr_macro_expansion.rs:1:1:2:11 | fn foo | attr_macro_expansion.rs:2:4:2:10 | fn foo | diff --git a/rust/ql/test/extractor-tests/attribute_macro_expansion/test.ql b/rust/ql/test/extractor-tests/attribute_macro_expansion/test.ql deleted file mode 100644 index f8d2f17b75e0..000000000000 --- a/rust/ql/test/extractor-tests/attribute_macro_expansion/test.ql +++ /dev/null @@ -1,6 +0,0 @@ -import rust -import TestUtils - -from Item i, MacroItems items, Item expanded -where toBeTested(i) and i.getExpanded() = items and items.getAnItem() = expanded -select i, expanded diff --git a/rust/ql/test/extractor-tests/generated/.generated_tests.list b/rust/ql/test/extractor-tests/generated/.generated_tests.list index 56cb7ed62e12..b7f919a01078 100644 --- a/rust/ql/test/extractor-tests/generated/.generated_tests.list +++ b/rust/ql/test/extractor-tests/generated/.generated_tests.list @@ -59,7 +59,7 @@ LoopExpr/gen_loop_expr.rs 35deaf35e765db4ae3124a11284266d8f341d1ce7b700030efada0 MacroCall/gen_macro_call.rs 139ef2c69323eea1a901e260d4e2acdd00b26f013b90c9344f48c6503ce29d79 139ef2c69323eea1a901e260d4e2acdd00b26f013b90c9344f48c6503ce29d79 MacroDef/gen_macro_def.rs 17c5387fb464a60b4a4520d22b055ba35ff23e9fe431a18a33808ae02c4bbff5 17c5387fb464a60b4a4520d22b055ba35ff23e9fe431a18a33808ae02c4bbff5 MacroExpr/gen_macro_expr.rs 3c23dc88fcc4bc8f97d9364d2f367671a0a5a63d07e52237d28204b64756dcdb 3c23dc88fcc4bc8f97d9364d2f367671a0a5a63d07e52237d28204b64756dcdb -MacroItems/gen_macro_items.rs 8ef3e16b73635dc97afa3ffa4db2bb21a8f1b435176861a594b0200cc5b9b931 8ef3e16b73635dc97afa3ffa4db2bb21a8f1b435176861a594b0200cc5b9b931 +MacroItems/gen_macro_items.rs c00f8045d9a7d6562da1d0136b335b685e2ec5dbd708763faa24a752e89feda4 c00f8045d9a7d6562da1d0136b335b685e2ec5dbd708763faa24a752e89feda4 MacroPat/gen_macro_pat.rs b8041370598bd7fb26778d829a15c415c2078d69124f6af634ddeba13a114aa0 b8041370598bd7fb26778d829a15c415c2078d69124f6af634ddeba13a114aa0 MacroRules/gen_macro_rules.rs 7e03b410f4669e422d3b4328f7aafdca2e286e5d951495dd69cee0d44cb793a9 7e03b410f4669e422d3b4328f7aafdca2e286e5d951495dd69cee0d44cb793a9 MacroStmts/gen_macro_stmts.rs 2e45dcf44bf2e8404b49ce9abeee4931572693174b5d96f3fd81eb40ea8e7b4b 2e45dcf44bf2e8404b49ce9abeee4931572693174b5d96f3fd81eb40ea8e7b4b diff --git a/rust/ql/test/extractor-tests/generated/Const/Const.ql b/rust/ql/test/extractor-tests/generated/Const/Const.ql index 859bc139866f..dee1c6dada40 100644 --- a/rust/ql/test/extractor-tests/generated/Const/Const.ql +++ b/rust/ql/test/extractor-tests/generated/Const/Const.ql @@ -3,9 +3,9 @@ import codeql.rust.elements import TestUtils from - Const x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, - int getNumberOfAttrs, string hasBody, string isConst, string isDefault, string hasName, - string hasTypeRepr, string hasVisibility + Const x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasBody, string isConst, + string isDefault, string hasName, string hasTypeRepr, string hasVisibility where toBeTested(x) and not x.isUnknown() and @@ -15,7 +15,11 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and - (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "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 @@ -24,6 +28,6 @@ where (if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no") and if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasBody:", hasBody, - "isConst:", isConst, "isDefault:", isDefault, "hasName:", hasName, "hasTypeRepr:", hasTypeRepr, - "hasVisibility:", hasVisibility + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, + "hasBody:", hasBody, "isConst:", isConst, "isDefault:", isDefault, "hasName:", hasName, + "hasTypeRepr:", hasTypeRepr, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getExpanded.expected b/rust/ql/test/extractor-tests/generated/Const/Const_getAttributeMacroExpansion.expected similarity index 100% rename from rust/ql/test/extractor-tests/generated/Const/Const_getExpanded.expected rename to rust/ql/test/extractor-tests/generated/Const/Const_getAttributeMacroExpansion.expected diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getExpanded.ql b/rust/ql/test/extractor-tests/generated/Const/Const_getAttributeMacroExpansion.ql similarity index 77% rename from rust/ql/test/extractor-tests/generated/Const/Const_getExpanded.ql rename to rust/ql/test/extractor-tests/generated/Const/Const_getAttributeMacroExpansion.ql index 8f608b857bc9..4056751f9726 100644 --- a/rust/ql/test/extractor-tests/generated/Const/Const_getExpanded.ql +++ b/rust/ql/test/extractor-tests/generated/Const/Const_getAttributeMacroExpansion.ql @@ -4,4 +4,4 @@ import TestUtils from Const x where toBeTested(x) and not x.isUnknown() -select x, x.getExpanded() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum.ql b/rust/ql/test/extractor-tests/generated/Enum/Enum.ql index 76f3c2941b0d..e6639d783d27 100644 --- a/rust/ql/test/extractor-tests/generated/Enum/Enum.ql +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum.ql @@ -3,7 +3,7 @@ import codeql.rust.elements import TestUtils from - Enum x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, + Enum x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasGenericParamList, string hasName, string hasVariantList, string hasVisibility, string hasWhereClause where @@ -15,7 +15,11 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and - (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "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.hasName() then hasName = "yes" else hasName = "no") and @@ -23,6 +27,6 @@ where (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, - "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasGenericParamList:", - hasGenericParamList, "hasName:", hasName, "hasVariantList:", hasVariantList, "hasVisibility:", - hasVisibility, "hasWhereClause:", hasWhereClause + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, + "hasGenericParamList:", hasGenericParamList, "hasName:", hasName, "hasVariantList:", + hasVariantList, "hasVisibility:", hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getExpanded.expected b/rust/ql/test/extractor-tests/generated/Enum/Enum_getAttributeMacroExpansion.expected similarity index 100% rename from rust/ql/test/extractor-tests/generated/Enum/Enum_getExpanded.expected rename to rust/ql/test/extractor-tests/generated/Enum/Enum_getAttributeMacroExpansion.expected diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getExpanded.ql b/rust/ql/test/extractor-tests/generated/Enum/Enum_getAttributeMacroExpansion.ql similarity index 76% rename from rust/ql/test/extractor-tests/generated/Enum/Enum_getExpanded.ql rename to rust/ql/test/extractor-tests/generated/Enum/Enum_getAttributeMacroExpansion.ql index 428223feaae5..6f0623348c4c 100644 --- a/rust/ql/test/extractor-tests/generated/Enum/Enum_getExpanded.ql +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum_getAttributeMacroExpansion.ql @@ -4,4 +4,4 @@ import TestUtils from Enum x where toBeTested(x) and not x.isUnknown() -select x, x.getExpanded() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.ql b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.ql index b1fa57580a12..e7ef0f90fe93 100644 --- a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.ql +++ b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.ql @@ -3,8 +3,9 @@ import codeql.rust.elements import TestUtils from - ExternBlock x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, - string hasAbi, int getNumberOfAttrs, string hasExternItemList, string isUnsafe + ExternBlock x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, string hasAbi, int getNumberOfAttrs, string hasExternItemList, + string isUnsafe where toBeTested(x) and not x.isUnknown() and @@ -14,11 +15,15 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and - (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and (if x.hasAbi() then hasAbi = "yes" else hasAbi = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasExternItemList() then hasExternItemList = "yes" else hasExternItemList = "no") and if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no" select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "hasExpanded:", hasExpanded, "hasAbi:", hasAbi, "getNumberOfAttrs:", getNumberOfAttrs, - "hasExternItemList:", hasExternItemList, "isUnsafe:", isUnsafe + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "hasAbi:", hasAbi, "getNumberOfAttrs:", + getNumberOfAttrs, "hasExternItemList:", hasExternItemList, "isUnsafe:", isUnsafe diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExpanded.expected b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAttributeMacroExpansion.expected similarity index 100% rename from rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExpanded.expected rename to rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAttributeMacroExpansion.expected diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExpanded.ql b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAttributeMacroExpansion.ql similarity index 77% rename from rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExpanded.ql rename to rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAttributeMacroExpansion.ql index e7819652b38a..f3b6ad363fa9 100644 --- a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExpanded.ql +++ b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAttributeMacroExpansion.ql @@ -4,4 +4,4 @@ import TestUtils from ExternBlock x where toBeTested(x) and not x.isUnknown() -select x, x.getExpanded() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.ql b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.ql index 03ef38925eab..cbcfd462473c 100644 --- a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.ql +++ b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.ql @@ -3,8 +3,9 @@ import codeql.rust.elements import TestUtils from - ExternCrate x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, - int getNumberOfAttrs, string hasIdentifier, string hasRename, string hasVisibility + ExternCrate x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasIdentifier, string hasRename, + string hasVisibility where toBeTested(x) and not x.isUnknown() and @@ -14,11 +15,15 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and - (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasIdentifier() then hasIdentifier = "yes" else hasIdentifier = "no") and (if x.hasRename() then hasRename = "yes" else hasRename = "no") and if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasIdentifier:", - hasIdentifier, "hasRename:", hasRename, "hasVisibility:", hasVisibility + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, + "hasIdentifier:", hasIdentifier, "hasRename:", hasRename, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getExpanded.expected b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getAttributeMacroExpansion.expected similarity index 100% rename from rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getExpanded.expected rename to rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getAttributeMacroExpansion.expected diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getExpanded.ql b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getAttributeMacroExpansion.ql similarity index 77% rename from rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getExpanded.ql rename to rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getAttributeMacroExpansion.ql index 28cdb0138d97..0c7c0e8c89dc 100644 --- a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getExpanded.ql +++ b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getAttributeMacroExpansion.ql @@ -4,4 +4,4 @@ import TestUtils from ExternCrate x where toBeTested(x) and not x.isUnknown() -select x, x.getExpanded() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/Function/Function.expected b/rust/ql/test/extractor-tests/generated/Function/Function.expected index e37c985985a7..d30ef684493d 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 | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasExpanded: | 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 | -| gen_function.rs:7:5:7:13 | fn bar | hasParamList: | yes | getNumberOfAttrs: | 0 | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasExpanded: | 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 | +| gen_function.rs:3:1:4:38 | fn foo | hasParamList: | yes | getNumberOfAttrs: | 0 | 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 | +| gen_function.rs:7:5:7:13 | fn bar | hasParamList: | yes | getNumberOfAttrs: | 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 | diff --git a/rust/ql/test/extractor-tests/generated/Function/Function.ql b/rust/ql/test/extractor-tests/generated/Function/Function.ql index 162f8af6d753..3c368187c296 100644 --- a/rust/ql/test/extractor-tests/generated/Function/Function.ql +++ b/rust/ql/test/extractor-tests/generated/Function/Function.ql @@ -4,7 +4,7 @@ import TestUtils from Function x, string hasParamList, int getNumberOfAttrs, string hasExtendedCanonicalPath, - string hasCrateOrigin, string hasExpanded, string hasAbi, string hasBody, + 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 where @@ -18,7 +18,11 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and - (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "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 @@ -33,7 +37,7 @@ where if x.hasWhereClause() then hasWhereClause = "yes" else hasWhereClause = "no" select x, "hasParamList:", hasParamList, "getNumberOfAttrs:", getNumberOfAttrs, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "hasExpanded:", hasExpanded, "hasAbi:", hasAbi, "hasBody:", hasBody, "hasGenericParamList:", - hasGenericParamList, "isAsync:", isAsync, "isConst:", isConst, "isDefault:", isDefault, "isGen:", - isGen, "isUnsafe:", isUnsafe, "hasName:", hasName, "hasRetType:", hasRetType, "hasVisibility:", - hasVisibility, "hasWhereClause:", hasWhereClause + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "hasAbi:", hasAbi, "hasBody:", hasBody, + "hasGenericParamList:", hasGenericParamList, "isAsync:", isAsync, "isConst:", isConst, + "isDefault:", isDefault, "isGen:", isGen, "isUnsafe:", isUnsafe, "hasName:", hasName, + "hasRetType:", hasRetType, "hasVisibility:", hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getExpanded.expected b/rust/ql/test/extractor-tests/generated/Function/Function_getAttributeMacroExpansion.expected similarity index 100% rename from rust/ql/test/extractor-tests/generated/Function/Function_getExpanded.expected rename to rust/ql/test/extractor-tests/generated/Function/Function_getAttributeMacroExpansion.expected diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getExpanded.ql b/rust/ql/test/extractor-tests/generated/Function/Function_getAttributeMacroExpansion.ql similarity index 77% rename from rust/ql/test/extractor-tests/generated/Function/Function_getExpanded.ql rename to rust/ql/test/extractor-tests/generated/Function/Function_getAttributeMacroExpansion.ql index 7a994831e7db..4bb6e2852cb9 100644 --- a/rust/ql/test/extractor-tests/generated/Function/Function_getExpanded.ql +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getAttributeMacroExpansion.ql @@ -4,4 +4,4 @@ import TestUtils from Function x where toBeTested(x) and not x.isUnknown() -select x, x.getExpanded() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl.ql b/rust/ql/test/extractor-tests/generated/Impl/Impl.ql index cc7ffd762088..fa92053a2172 100644 --- a/rust/ql/test/extractor-tests/generated/Impl/Impl.ql +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl.ql @@ -3,7 +3,7 @@ import codeql.rust.elements import TestUtils from - Impl x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, + Impl x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasAttributeMacroExpansion, string hasAssocItemList, int getNumberOfAttrs, string hasGenericParamList, string isConst, string isDefault, string isUnsafe, string hasSelfTy, string hasTrait, string hasVisibility, string hasWhereClause @@ -16,7 +16,11 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and - (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and (if x.hasAssocItemList() then hasAssocItemList = "yes" else hasAssocItemList = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no") and @@ -28,7 +32,7 @@ where (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, - "hasExpanded:", hasExpanded, "hasAssocItemList:", hasAssocItemList, "getNumberOfAttrs:", - getNumberOfAttrs, "hasGenericParamList:", hasGenericParamList, "isConst:", isConst, "isDefault:", - isDefault, "isUnsafe:", isUnsafe, "hasSelfTy:", hasSelfTy, "hasTrait:", hasTrait, - "hasVisibility:", hasVisibility, "hasWhereClause:", hasWhereClause + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "hasAssocItemList:", hasAssocItemList, + "getNumberOfAttrs:", getNumberOfAttrs, "hasGenericParamList:", hasGenericParamList, "isConst:", + isConst, "isDefault:", isDefault, "isUnsafe:", isUnsafe, "hasSelfTy:", hasSelfTy, "hasTrait:", + hasTrait, "hasVisibility:", hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getExpanded.expected b/rust/ql/test/extractor-tests/generated/Impl/Impl_getAttributeMacroExpansion.expected similarity index 100% rename from rust/ql/test/extractor-tests/generated/Impl/Impl_getExpanded.expected rename to rust/ql/test/extractor-tests/generated/Impl/Impl_getAttributeMacroExpansion.expected diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getExpanded.ql b/rust/ql/test/extractor-tests/generated/Impl/Impl_getAttributeMacroExpansion.ql similarity index 76% rename from rust/ql/test/extractor-tests/generated/Impl/Impl_getExpanded.ql rename to rust/ql/test/extractor-tests/generated/Impl/Impl_getAttributeMacroExpansion.ql index dc85f4c06fdb..3496b9cebe79 100644 --- a/rust/ql/test/extractor-tests/generated/Impl/Impl_getExpanded.ql +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl_getAttributeMacroExpansion.ql @@ -4,4 +4,4 @@ import TestUtils from Impl x where toBeTested(x) and not x.isUnknown() -select x, x.getExpanded() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected index b5bf260e2f40..915d6847799e 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected @@ -1 +1 @@ -| gen_macro_call.rs:5:5:5:11 | todo!... | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasExpanded: | yes | getNumberOfAttrs: | 0 | hasPath: | yes | hasTokenTree: | yes | +| gen_macro_call.rs:5:5:5:11 | todo!... | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasPath: | yes | hasTokenTree: | yes | hasMacroCallExpansion: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql index c9fa32e3c00e..b9461abfcf18 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql @@ -3,8 +3,9 @@ import codeql.rust.elements import TestUtils from - MacroCall x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, - int getNumberOfAttrs, string hasPath, string hasTokenTree + MacroCall x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasPath, string hasTokenTree, + string hasMacroCallExpansion where toBeTested(x) and not x.isUnknown() and @@ -14,10 +15,16 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and - (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "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" + (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, - "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasPath:", hasPath, - "hasTokenTree:", hasTokenTree + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, + "hasPath:", hasPath, "hasTokenTree:", hasTokenTree, "hasMacroCallExpansion:", + hasMacroCallExpansion diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getExpanded.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getAttributeMacroExpansion.expected similarity index 100% rename from rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getExpanded.expected rename to rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getAttributeMacroExpansion.expected diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getAttributeMacroExpansion.ql b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getAttributeMacroExpansion.ql new file mode 100644 index 000000000000..7931273e757e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getAttributeMacroExpansion.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroCall x +where toBeTested(x) and not x.isUnknown() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getMacroCallExpansion.expected similarity index 100% rename from rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.expected rename to rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getMacroCallExpansion.expected diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.ql b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getMacroCallExpansion.ql similarity index 79% rename from rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.ql rename to rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getMacroCallExpansion.ql index be63430c9edc..6ce5fd6e7c88 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getExpanded.ql +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getMacroCallExpansion.ql @@ -4,4 +4,4 @@ import TestUtils from MacroCall x where toBeTested(x) and not x.isUnknown() -select x, x.getExpanded() +select x, x.getMacroCallExpansion() diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.ql b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.ql index ed235d8312a6..3ec25748abd4 100644 --- a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.ql +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.ql @@ -3,8 +3,9 @@ import codeql.rust.elements import TestUtils from - MacroDef x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, - string hasArgs, int getNumberOfAttrs, string hasBody, string hasName, string hasVisibility + MacroDef x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, string hasArgs, int getNumberOfAttrs, string hasBody, + string hasName, string hasVisibility where toBeTested(x) and not x.isUnknown() and @@ -14,12 +15,17 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and - (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and (if x.hasArgs() then hasArgs = "yes" else hasArgs = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasBody() then hasBody = "yes" else hasBody = "no") and (if x.hasName() then hasName = "yes" else hasName = "no") and if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "hasExpanded:", hasExpanded, "hasArgs:", hasArgs, "getNumberOfAttrs:", getNumberOfAttrs, - "hasBody:", hasBody, "hasName:", hasName, "hasVisibility:", hasVisibility + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "hasArgs:", hasArgs, + "getNumberOfAttrs:", getNumberOfAttrs, "hasBody:", hasBody, "hasName:", hasName, "hasVisibility:", + hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getExpanded.expected b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getAttributeMacroExpansion.expected similarity index 100% rename from rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getExpanded.expected rename to rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getAttributeMacroExpansion.expected diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getExpanded.ql b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getAttributeMacroExpansion.ql similarity index 77% rename from rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getExpanded.ql rename to rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getAttributeMacroExpansion.ql index cc97ad20927b..be2992839166 100644 --- a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getExpanded.ql +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getAttributeMacroExpansion.ql @@ -4,4 +4,4 @@ import TestUtils from MacroDef x where toBeTested(x) and not x.isUnknown() -select x, x.getExpanded() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/gen_macro_items.rs b/rust/ql/test/extractor-tests/generated/MacroItems/gen_macro_items.rs index 08914ad04525..f7d8c9c42131 100644 --- a/rust/ql/test/extractor-tests/generated/MacroItems/gen_macro_items.rs +++ b/rust/ql/test/extractor-tests/generated/MacroItems/gen_macro_items.rs @@ -1,6 +1,14 @@ // generated by codegen, do not edit -// A sequence of items generated by a `MacroCall`. For example: +// A sequence of items generated by a macro. For example: mod foo{ include!("common_definitions.rs"); + + #[an_attribute_macro] + fn foo() { + println!("Hello, world!"); + } + + #[derive(Debug)] + struct Bar; } diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.ql b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.ql index a04df90d75d0..5e1ebacd573f 100644 --- a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.ql +++ b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.ql @@ -3,8 +3,9 @@ import codeql.rust.elements import TestUtils from - MacroRules x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, - int getNumberOfAttrs, string hasName, string hasTokenTree, string hasVisibility + MacroRules x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasName, string hasTokenTree, + string hasVisibility where toBeTested(x) and not x.isUnknown() and @@ -14,11 +15,15 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and - (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasName() then hasName = "yes" else hasName = "no") and (if x.hasTokenTree() then hasTokenTree = "yes" else hasTokenTree = "no") and if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasName:", hasName, - "hasTokenTree:", hasTokenTree, "hasVisibility:", hasVisibility + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, + "hasName:", hasName, "hasTokenTree:", hasTokenTree, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getExpanded.expected b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getAttributeMacroExpansion.expected similarity index 100% rename from rust/ql/test/extractor-tests/generated/Module/Module_getExpanded.expected rename to rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getAttributeMacroExpansion.expected diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getExpanded.ql b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getAttributeMacroExpansion.ql similarity index 77% rename from rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getExpanded.ql rename to rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getAttributeMacroExpansion.ql index 4fdf9f944698..b7b01f36fe70 100644 --- a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getExpanded.ql +++ b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getAttributeMacroExpansion.ql @@ -4,4 +4,4 @@ import TestUtils from MacroRules x where toBeTested(x) and not x.isUnknown() -select x, x.getExpanded() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/Module/Module.expected b/rust/ql/test/extractor-tests/generated/Module/Module.expected index 18f7e911fe3f..9383e08f2815 100644 --- a/rust/ql/test/extractor-tests/generated/Module/Module.expected +++ b/rust/ql/test/extractor-tests/generated/Module/Module.expected @@ -1,3 +1,3 @@ -| gen_module.rs:3:1:4:8 | mod foo | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasExpanded: | no | getNumberOfAttrs: | 0 | hasItemList: | no | hasName: | yes | hasVisibility: | no | -| gen_module.rs:5:1:7:1 | mod bar | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasExpanded: | no | getNumberOfAttrs: | 0 | hasItemList: | yes | hasName: | yes | hasVisibility: | no | -| lib.rs:1:1:1:15 | mod gen_module | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasExpanded: | no | getNumberOfAttrs: | 0 | hasItemList: | no | hasName: | yes | hasVisibility: | no | +| gen_module.rs:3:1:4:8 | mod foo | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasItemList: | no | hasName: | yes | hasVisibility: | no | +| gen_module.rs:5:1:7:1 | mod bar | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasItemList: | yes | hasName: | yes | hasVisibility: | no | +| lib.rs:1:1:1:15 | mod gen_module | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasItemList: | no | hasName: | yes | hasVisibility: | no | diff --git a/rust/ql/test/extractor-tests/generated/Module/Module.ql b/rust/ql/test/extractor-tests/generated/Module/Module.ql index 8cf7f20a20fb..bd668e40b66a 100644 --- a/rust/ql/test/extractor-tests/generated/Module/Module.ql +++ b/rust/ql/test/extractor-tests/generated/Module/Module.ql @@ -3,8 +3,9 @@ import codeql.rust.elements import TestUtils from - Module x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, - int getNumberOfAttrs, string hasItemList, string hasName, string hasVisibility + Module x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasItemList, string hasName, + string hasVisibility where toBeTested(x) and not x.isUnknown() and @@ -14,11 +15,15 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and - (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasItemList() then hasItemList = "yes" else hasItemList = "no") and (if x.hasName() then hasName = "yes" else hasName = "no") and if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasItemList:", hasItemList, - "hasName:", hasName, "hasVisibility:", hasVisibility + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, + "hasItemList:", hasItemList, "hasName:", hasName, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getExpanded.expected b/rust/ql/test/extractor-tests/generated/Module/Module_getAttributeMacroExpansion.expected similarity index 100% rename from rust/ql/test/extractor-tests/generated/Static/Static_getExpanded.expected rename to rust/ql/test/extractor-tests/generated/Module/Module_getAttributeMacroExpansion.expected diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getExpanded.ql b/rust/ql/test/extractor-tests/generated/Module/Module_getAttributeMacroExpansion.ql similarity index 77% rename from rust/ql/test/extractor-tests/generated/Module/Module_getExpanded.ql rename to rust/ql/test/extractor-tests/generated/Module/Module_getAttributeMacroExpansion.ql index 139b6d007dd6..1a7c70f63b67 100644 --- a/rust/ql/test/extractor-tests/generated/Module/Module_getExpanded.ql +++ b/rust/ql/test/extractor-tests/generated/Module/Module_getAttributeMacroExpansion.ql @@ -4,4 +4,4 @@ import TestUtils from Module x where toBeTested(x) and not x.isUnknown() -select x, x.getExpanded() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/Static/Static.ql b/rust/ql/test/extractor-tests/generated/Static/Static.ql index 84a5077826bd..96a1fbd9814f 100644 --- a/rust/ql/test/extractor-tests/generated/Static/Static.ql +++ b/rust/ql/test/extractor-tests/generated/Static/Static.ql @@ -3,9 +3,9 @@ import codeql.rust.elements import TestUtils from - Static x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, - int getNumberOfAttrs, string hasBody, string isMut, string isStatic, string isUnsafe, - string hasName, string hasTypeRepr, string hasVisibility + Static x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasBody, string isMut, + string isStatic, string isUnsafe, string hasName, string hasTypeRepr, string hasVisibility where toBeTested(x) and not x.isUnknown() and @@ -15,7 +15,11 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and - (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "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.isMut() then isMut = "yes" else isMut = "no") and @@ -25,6 +29,6 @@ where (if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no") and if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasBody:", hasBody, "isMut:", - isMut, "isStatic:", isStatic, "isUnsafe:", isUnsafe, "hasName:", hasName, "hasTypeRepr:", - hasTypeRepr, "hasVisibility:", hasVisibility + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, + "hasBody:", hasBody, "isMut:", isMut, "isStatic:", isStatic, "isUnsafe:", isUnsafe, "hasName:", + hasName, "hasTypeRepr:", hasTypeRepr, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getExpanded.expected b/rust/ql/test/extractor-tests/generated/Static/Static_getAttributeMacroExpansion.expected similarity index 100% rename from rust/ql/test/extractor-tests/generated/Struct/Struct_getExpanded.expected rename to rust/ql/test/extractor-tests/generated/Static/Static_getAttributeMacroExpansion.expected diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getExpanded.ql b/rust/ql/test/extractor-tests/generated/Static/Static_getAttributeMacroExpansion.ql similarity index 77% rename from rust/ql/test/extractor-tests/generated/Static/Static_getExpanded.ql rename to rust/ql/test/extractor-tests/generated/Static/Static_getAttributeMacroExpansion.ql index 2f8c034f4c9a..500484b60b34 100644 --- a/rust/ql/test/extractor-tests/generated/Static/Static_getExpanded.ql +++ b/rust/ql/test/extractor-tests/generated/Static/Static_getAttributeMacroExpansion.ql @@ -4,4 +4,4 @@ import TestUtils from Static x where toBeTested(x) and not x.isUnknown() -select x, x.getExpanded() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct.ql b/rust/ql/test/extractor-tests/generated/Struct/Struct.ql index 5e9936dd07fd..4471b94700c9 100644 --- a/rust/ql/test/extractor-tests/generated/Struct/Struct.ql +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct.ql @@ -3,9 +3,9 @@ import codeql.rust.elements import TestUtils from - Struct x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, - int getNumberOfAttrs, string hasFieldList, string hasGenericParamList, string hasName, - string hasVisibility, string hasWhereClause + Struct x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasFieldList, + string hasGenericParamList, string hasName, string hasVisibility, string hasWhereClause where toBeTested(x) and not x.isUnknown() and @@ -15,7 +15,11 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and - (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasFieldList() then hasFieldList = "yes" else hasFieldList = "no") and (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no") and @@ -23,6 +27,6 @@ where (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, - "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasFieldList:", hasFieldList, - "hasGenericParamList:", hasGenericParamList, "hasName:", hasName, "hasVisibility:", hasVisibility, - "hasWhereClause:", hasWhereClause + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, + "hasFieldList:", hasFieldList, "hasGenericParamList:", hasGenericParamList, "hasName:", hasName, + "hasVisibility:", hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getExpanded.expected b/rust/ql/test/extractor-tests/generated/Struct/Struct_getAttributeMacroExpansion.expected similarity index 100% rename from rust/ql/test/extractor-tests/generated/Trait/Trait_getExpanded.expected rename to rust/ql/test/extractor-tests/generated/Struct/Struct_getAttributeMacroExpansion.expected diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getExpanded.ql b/rust/ql/test/extractor-tests/generated/Struct/Struct_getAttributeMacroExpansion.ql similarity index 77% rename from rust/ql/test/extractor-tests/generated/Struct/Struct_getExpanded.ql rename to rust/ql/test/extractor-tests/generated/Struct/Struct_getAttributeMacroExpansion.ql index cd9b80356c43..7673f2d669eb 100644 --- a/rust/ql/test/extractor-tests/generated/Struct/Struct_getExpanded.ql +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct_getAttributeMacroExpansion.ql @@ -4,4 +4,4 @@ import TestUtils from Struct x where toBeTested(x) and not x.isUnknown() -select x, x.getExpanded() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait.expected index 33dd170e7664..de921f246b43 100644 --- a/rust/ql/test/extractor-tests/generated/Trait/Trait.expected +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait.expected @@ -1,2 +1,2 @@ -| gen_trait.rs:3:1:8:1 | trait Frobinizable | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasExpanded: | no | hasAssocItemList: | yes | getNumberOfAttrs: | 0 | hasGenericParamList: | no | isAuto: | no | isUnsafe: | no | hasName: | yes | hasTypeBoundList: | no | hasVisibility: | no | hasWhereClause: | no | -| gen_trait.rs:10:1:10:57 | trait Foo | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasExpanded: | no | hasAssocItemList: | yes | getNumberOfAttrs: | 0 | hasGenericParamList: | yes | isAuto: | no | isUnsafe: | no | hasName: | yes | hasTypeBoundList: | no | hasVisibility: | yes | hasWhereClause: | yes | +| gen_trait.rs:3:1:8:1 | trait Frobinizable | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAttributeMacroExpansion: | no | hasAssocItemList: | yes | getNumberOfAttrs: | 0 | hasGenericParamList: | no | isAuto: | no | isUnsafe: | no | hasName: | yes | hasTypeBoundList: | no | hasVisibility: | no | hasWhereClause: | no | +| gen_trait.rs:10:1:10:57 | trait Foo | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAttributeMacroExpansion: | no | hasAssocItemList: | yes | getNumberOfAttrs: | 0 | hasGenericParamList: | yes | isAuto: | no | isUnsafe: | no | hasName: | yes | hasTypeBoundList: | no | hasVisibility: | yes | hasWhereClause: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait.ql b/rust/ql/test/extractor-tests/generated/Trait/Trait.ql index c10c3685fc95..2e8173a21aff 100644 --- a/rust/ql/test/extractor-tests/generated/Trait/Trait.ql +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait.ql @@ -3,10 +3,10 @@ import codeql.rust.elements import TestUtils from - Trait x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, - string hasAssocItemList, int getNumberOfAttrs, string hasGenericParamList, string isAuto, - string isUnsafe, string hasName, string hasTypeBoundList, string hasVisibility, - string hasWhereClause + Trait x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, string hasAssocItemList, int getNumberOfAttrs, + string hasGenericParamList, string isAuto, string isUnsafe, string hasName, + string hasTypeBoundList, string hasVisibility, string hasWhereClause where toBeTested(x) and not x.isUnknown() and @@ -16,7 +16,11 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and - (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and (if x.hasAssocItemList() then hasAssocItemList = "yes" else hasAssocItemList = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no") and @@ -27,7 +31,7 @@ where (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, - "hasExpanded:", hasExpanded, "hasAssocItemList:", hasAssocItemList, "getNumberOfAttrs:", - getNumberOfAttrs, "hasGenericParamList:", hasGenericParamList, "isAuto:", isAuto, "isUnsafe:", - isUnsafe, "hasName:", hasName, "hasTypeBoundList:", hasTypeBoundList, "hasVisibility:", - hasVisibility, "hasWhereClause:", hasWhereClause + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "hasAssocItemList:", hasAssocItemList, + "getNumberOfAttrs:", getNumberOfAttrs, "hasGenericParamList:", hasGenericParamList, "isAuto:", + isAuto, "isUnsafe:", isUnsafe, "hasName:", hasName, "hasTypeBoundList:", hasTypeBoundList, + "hasVisibility:", hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getExpanded.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait_getAttributeMacroExpansion.expected similarity index 100% rename from rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getExpanded.expected rename to rust/ql/test/extractor-tests/generated/Trait/Trait_getAttributeMacroExpansion.expected diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getExpanded.ql b/rust/ql/test/extractor-tests/generated/Trait/Trait_getAttributeMacroExpansion.ql similarity index 77% rename from rust/ql/test/extractor-tests/generated/Trait/Trait_getExpanded.ql rename to rust/ql/test/extractor-tests/generated/Trait/Trait_getAttributeMacroExpansion.ql index 22425676ccb2..9499d03e9ccc 100644 --- a/rust/ql/test/extractor-tests/generated/Trait/Trait_getExpanded.ql +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getAttributeMacroExpansion.ql @@ -4,4 +4,4 @@ import TestUtils from Trait x where toBeTested(x) and not x.isUnknown() -select x, x.getExpanded() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.ql b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.ql index d01a2bf22c7f..319f65e3730e 100644 --- a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.ql +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.ql @@ -3,9 +3,9 @@ import codeql.rust.elements import TestUtils from - TraitAlias x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, - int getNumberOfAttrs, string hasGenericParamList, string hasName, string hasTypeBoundList, - string hasVisibility, string hasWhereClause + TraitAlias x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasGenericParamList, + string hasName, string hasTypeBoundList, string hasVisibility, string hasWhereClause where toBeTested(x) and not x.isUnknown() and @@ -15,7 +15,11 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and - (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "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.hasName() then hasName = "yes" else hasName = "no") and @@ -23,6 +27,6 @@ where (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, - "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasGenericParamList:", - hasGenericParamList, "hasName:", hasName, "hasTypeBoundList:", hasTypeBoundList, "hasVisibility:", - hasVisibility, "hasWhereClause:", hasWhereClause + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, + "hasGenericParamList:", hasGenericParamList, "hasName:", hasName, "hasTypeBoundList:", + hasTypeBoundList, "hasVisibility:", hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getExpanded.expected b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getAttributeMacroExpansion.expected similarity index 100% rename from rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getExpanded.expected rename to rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getAttributeMacroExpansion.expected diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getExpanded.ql b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getAttributeMacroExpansion.ql similarity index 77% rename from rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getExpanded.ql rename to rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getAttributeMacroExpansion.ql index 3a8abe17f826..6a0c43cfc87a 100644 --- a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getExpanded.ql +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getAttributeMacroExpansion.ql @@ -4,4 +4,4 @@ import TestUtils from TraitAlias x where toBeTested(x) and not x.isUnknown() -select x, x.getExpanded() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.expected b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.expected index 9168aed43d51..8fbbae07cc3e 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 | hasExpanded: | 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 | hasExpanded: | 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 | 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 | diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql index 51544c36a820..dd8183b6d410 100644 --- a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql @@ -3,9 +3,10 @@ import codeql.rust.elements import TestUtils from - TypeAlias x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, - int getNumberOfAttrs, string hasGenericParamList, string isDefault, string hasName, - string hasTypeRepr, string hasTypeBoundList, string hasVisibility, string hasWhereClause + TypeAlias x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasGenericParamList, + string isDefault, string hasName, string hasTypeRepr, string hasTypeBoundList, + string hasVisibility, string hasWhereClause where toBeTested(x) and not x.isUnknown() and @@ -15,7 +16,11 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and - (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "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 @@ -25,7 +30,7 @@ where (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, - "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasGenericParamList:", - hasGenericParamList, "isDefault:", isDefault, "hasName:", hasName, "hasTypeRepr:", hasTypeRepr, - "hasTypeBoundList:", hasTypeBoundList, "hasVisibility:", hasVisibility, "hasWhereClause:", - hasWhereClause + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, + "hasGenericParamList:", hasGenericParamList, "isDefault:", isDefault, "hasName:", hasName, + "hasTypeRepr:", hasTypeRepr, "hasTypeBoundList:", hasTypeBoundList, "hasVisibility:", + hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getExpanded.expected b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getAttributeMacroExpansion.expected similarity index 100% rename from rust/ql/test/extractor-tests/generated/Union/Union_getExpanded.expected rename to rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getAttributeMacroExpansion.expected diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getExpanded.ql b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getAttributeMacroExpansion.ql similarity index 77% rename from rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getExpanded.ql rename to rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getAttributeMacroExpansion.ql index 2a3857594228..62be0d7b8291 100644 --- a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getExpanded.ql +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getAttributeMacroExpansion.ql @@ -4,4 +4,4 @@ import TestUtils from TypeAlias x where toBeTested(x) and not x.isUnknown() -select x, x.getExpanded() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/Union/Union.ql b/rust/ql/test/extractor-tests/generated/Union/Union.ql index a5eb910d0b3c..81d3ffb3adf9 100644 --- a/rust/ql/test/extractor-tests/generated/Union/Union.ql +++ b/rust/ql/test/extractor-tests/generated/Union/Union.ql @@ -3,9 +3,9 @@ import codeql.rust.elements import TestUtils from - Union x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, - int getNumberOfAttrs, string hasGenericParamList, string hasName, string hasStructFieldList, - string hasVisibility, string hasWhereClause + Union x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasGenericParamList, + string hasName, string hasStructFieldList, string hasVisibility, string hasWhereClause where toBeTested(x) and not x.isUnknown() and @@ -15,7 +15,11 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and - (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "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.hasName() then hasName = "yes" else hasName = "no") and @@ -23,6 +27,6 @@ where (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, - "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasGenericParamList:", - hasGenericParamList, "hasName:", hasName, "hasStructFieldList:", hasStructFieldList, - "hasVisibility:", hasVisibility, "hasWhereClause:", hasWhereClause + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, + "hasGenericParamList:", hasGenericParamList, "hasName:", hasName, "hasStructFieldList:", + hasStructFieldList, "hasVisibility:", hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/Use/Use_getExpanded.expected b/rust/ql/test/extractor-tests/generated/Union/Union_getAttributeMacroExpansion.expected similarity index 100% rename from rust/ql/test/extractor-tests/generated/Use/Use_getExpanded.expected rename to rust/ql/test/extractor-tests/generated/Union/Union_getAttributeMacroExpansion.expected diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getExpanded.ql b/rust/ql/test/extractor-tests/generated/Union/Union_getAttributeMacroExpansion.ql similarity index 77% rename from rust/ql/test/extractor-tests/generated/Union/Union_getExpanded.ql rename to rust/ql/test/extractor-tests/generated/Union/Union_getAttributeMacroExpansion.ql index d76e97d362a5..3edc4b71aa39 100644 --- a/rust/ql/test/extractor-tests/generated/Union/Union_getExpanded.ql +++ b/rust/ql/test/extractor-tests/generated/Union/Union_getAttributeMacroExpansion.ql @@ -4,4 +4,4 @@ import TestUtils from Union x where toBeTested(x) and not x.isUnknown() -select x, x.getExpanded() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/Use/Use.ql b/rust/ql/test/extractor-tests/generated/Use/Use.ql index d88546c73fea..9dbf23d628a4 100644 --- a/rust/ql/test/extractor-tests/generated/Use/Use.ql +++ b/rust/ql/test/extractor-tests/generated/Use/Use.ql @@ -3,7 +3,7 @@ import codeql.rust.elements import TestUtils from - Use x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasExpanded, + Use x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasUseTree, string hasVisibility where toBeTested(x) and @@ -14,10 +14,14 @@ where else hasExtendedCanonicalPath = "no" ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and - (if x.hasExpanded() then hasExpanded = "yes" else hasExpanded = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasUseTree() then hasUseTree = "yes" else hasUseTree = "no") and if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "hasExpanded:", hasExpanded, "getNumberOfAttrs:", getNumberOfAttrs, "hasUseTree:", hasUseTree, - "hasVisibility:", hasVisibility + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, + "hasUseTree:", hasUseTree, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/Use/Use_getAttributeMacroExpansion.expected b/rust/ql/test/extractor-tests/generated/Use/Use_getAttributeMacroExpansion.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Use/Use_getExpanded.ql b/rust/ql/test/extractor-tests/generated/Use/Use_getAttributeMacroExpansion.ql similarity index 76% rename from rust/ql/test/extractor-tests/generated/Use/Use_getExpanded.ql rename to rust/ql/test/extractor-tests/generated/Use/Use_getAttributeMacroExpansion.ql index 39d2fa9f4f63..1b83be279867 100644 --- a/rust/ql/test/extractor-tests/generated/Use/Use_getExpanded.ql +++ b/rust/ql/test/extractor-tests/generated/Use/Use_getAttributeMacroExpansion.ql @@ -4,4 +4,4 @@ import TestUtils from Use x where toBeTested(x) and not x.isUnknown() -select x, x.getExpanded() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/attribute_macro_expansion/attr_macro_expansion.rs b/rust/ql/test/extractor-tests/macro_expansion/macro_expansion.rs similarity index 100% rename from rust/ql/test/extractor-tests/attribute_macro_expansion/attr_macro_expansion.rs rename to rust/ql/test/extractor-tests/macro_expansion/macro_expansion.rs diff --git a/rust/ql/test/extractor-tests/attribute_macro_expansion/options.yml b/rust/ql/test/extractor-tests/macro_expansion/options.yml similarity index 100% rename from rust/ql/test/extractor-tests/attribute_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 new file mode 100644 index 000000000000..26a02ec82527 --- /dev/null +++ b/rust/ql/test/extractor-tests/macro_expansion/test.expected @@ -0,0 +1,2 @@ +| macro_expansion.rs:1:1:2:11 | fn foo | 0 | macro_expansion.rs:2:4:2:10 | fn foo | +| macro_expansion.rs:1:1:2:11 | fn foo | 1 | macro_expansion.rs:2:4:2:6 | Static | diff --git a/rust/ql/test/extractor-tests/macro_expansion/test.ql b/rust/ql/test/extractor-tests/macro_expansion/test.ql new file mode 100644 index 000000000000..17bc7d47b1d6 --- /dev/null +++ b/rust/ql/test/extractor-tests/macro_expansion/test.ql @@ -0,0 +1,6 @@ +import rust +import TestUtils + +from Item i, MacroItems items, int index, Item expanded +where toBeTested(i) and i.getAttributeMacroExpansion() = items and items.getItem(index) = expanded +select i, index, expanded diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index d6289e795c4f..85eb452c2ee1 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -1164,7 +1164,7 @@ class _: """ -@annotate(Item) +@annotate(Item, add_bases=(Addressable,)) class _: """ A Item. For example: @@ -1172,6 +1172,7 @@ class _: todo!() ``` """ + attribute_macro_expansion: optional[MacroItems] | child | rust.detach @annotate(ItemList) @@ -1232,6 +1233,7 @@ class _: todo!() ``` """ + macro_call_expansion: optional[AstNode] | child | rust.detach @annotate(MacroDef) @@ -1258,10 +1260,18 @@ class _: @rust.doc_test_signature(None) class _: """ - A sequence of items generated by a `MacroCall`. For example: + A sequence of items generated by a macro. For example: ```rust mod foo{ include!("common_definitions.rs"); + + #[an_attribute_macro] + fn foo() { + println!("Hello, world!"); + } + + #[derive(Debug)] + struct Bar; } ``` """ @@ -1940,8 +1950,3 @@ class FormatArgument(Locatable): """ parent: Format variable: optional[FormatTemplateVariableAccess] | child - - -@annotate(Item, add_bases=(Addressable,)) -class _: - expanded: optional[AstNode] | child | rust.detach | doc("expanded attribute or procedural macro call of this item") From ecd80fbc348d7564d5bf420de030b0e879bfff48 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 30 Apr 2025 15:25:01 +0200 Subject: [PATCH 05/10] Rust: fix QL compilation errors --- rust/ql/src/queries/diagnostics/UnresolvedMacroCalls.ql | 2 +- rust/ql/src/queries/summary/Stats.qll | 4 ++-- rust/ql/src/queries/telemetry/DatabaseQuality.qll | 4 ++-- rust/ql/src/queries/unusedentities/UnusedVariable.qll | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/rust/ql/src/queries/diagnostics/UnresolvedMacroCalls.ql b/rust/ql/src/queries/diagnostics/UnresolvedMacroCalls.ql index a20c5035b6ab..9b04fca82f49 100644 --- a/rust/ql/src/queries/diagnostics/UnresolvedMacroCalls.ql +++ b/rust/ql/src/queries/diagnostics/UnresolvedMacroCalls.ql @@ -8,5 +8,5 @@ import rust from MacroCall mc -where not mc.hasExpanded() +where not mc.hasMacroCallExpansion() select mc, "Macro call was not resolved to a target." diff --git a/rust/ql/src/queries/summary/Stats.qll b/rust/ql/src/queries/summary/Stats.qll index 87d976b5580e..8ce0126e4fde 100644 --- a/rust/ql/src/queries/summary/Stats.qll +++ b/rust/ql/src/queries/summary/Stats.qll @@ -136,9 +136,9 @@ predicate extractionStats(string key, int value) { or key = "Macro calls - total" and value = count(MacroCall mc) or - key = "Macro calls - resolved" and value = count(MacroCall mc | mc.hasExpanded()) + key = "Macro calls - resolved" and value = count(MacroCall mc | mc.hasMacroCallExpansion()) or - key = "Macro calls - unresolved" and value = count(MacroCall mc | not mc.hasExpanded()) + key = "Macro calls - unresolved" and value = count(MacroCall mc | not mc.hasMacroCallExpansion()) } /** diff --git a/rust/ql/src/queries/telemetry/DatabaseQuality.qll b/rust/ql/src/queries/telemetry/DatabaseQuality.qll index 8a9898efc404..15826fec4c45 100644 --- a/rust/ql/src/queries/telemetry/DatabaseQuality.qll +++ b/rust/ql/src/queries/telemetry/DatabaseQuality.qll @@ -30,9 +30,9 @@ module CallTargetStats implements StatsSig { } module MacroCallTargetStats implements StatsSig { - int getNumberOfOk() { result = count(MacroCall c | c.hasExpanded()) } + int getNumberOfOk() { result = count(MacroCall c | c.hasMacroCallExpansion()) } - additional predicate isNotOkCall(MacroCall c) { not c.hasExpanded() } + additional predicate isNotOkCall(MacroCall c) { not c.hasMacroCallExpansion() } int getNumberOfNotOk() { result = count(MacroCall c | isNotOkCall(c)) } diff --git a/rust/ql/src/queries/unusedentities/UnusedVariable.qll b/rust/ql/src/queries/unusedentities/UnusedVariable.qll index 2750ca1c42a5..ad75415634c6 100644 --- a/rust/ql/src/queries/unusedentities/UnusedVariable.qll +++ b/rust/ql/src/queries/unusedentities/UnusedVariable.qll @@ -25,7 +25,7 @@ class IncompleteCallable extends Callable { IncompleteCallable() { exists(MacroExpr me | me.getEnclosingCallable() = this and - not me.getMacroCall().hasExpanded() + not me.getMacroCall().hasMacroCallExpansion() ) } } From 6ecaf6513218d6814ed5310e88e55f5b911ba9f1 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 30 Apr 2025 16:38:13 +0200 Subject: [PATCH 06/10] Rust: fix downgrade script --- .../old.dbscheme | 10 ++++++++-- .../rust.dbscheme | 0 .../upgrade.properties | 5 +++++ .../downgrade.ql | 7 ------- .../upgrade.properties | 4 ---- 5 files changed, 13 insertions(+), 13 deletions(-) rename rust/downgrades/{f78cb8f2ab3bafb0d116cd8128f0315db24aea33 => 7b74969ab7ac48b2c51700c62e5a51decca392ea}/old.dbscheme (99%) rename rust/downgrades/{f78cb8f2ab3bafb0d116cd8128f0315db24aea33 => 7b74969ab7ac48b2c51700c62e5a51decca392ea}/rust.dbscheme (100%) create mode 100644 rust/downgrades/7b74969ab7ac48b2c51700c62e5a51decca392ea/upgrade.properties delete mode 100644 rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/downgrade.ql delete mode 100644 rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/upgrade.properties diff --git a/rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/old.dbscheme b/rust/downgrades/7b74969ab7ac48b2c51700c62e5a51decca392ea/old.dbscheme similarity index 99% rename from rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/old.dbscheme rename to rust/downgrades/7b74969ab7ac48b2c51700c62e5a51decca392ea/old.dbscheme index f78cb8f2ab3b..7b74969ab7ac 100644 --- a/rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/old.dbscheme +++ b/rust/downgrades/7b74969ab7ac48b2c51700c62e5a51decca392ea/old.dbscheme @@ -1960,9 +1960,9 @@ infer_type_reprs( ; #keyset[id] -item_expandeds( +item_attribute_macro_expansions( int id: @item ref, - int expanded: @ast_node ref + int attribute_macro_expansion: @macro_items ref ); @labelable_expr = @@ -3088,6 +3088,12 @@ macro_call_token_trees( 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 ); diff --git a/rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/rust.dbscheme b/rust/downgrades/7b74969ab7ac48b2c51700c62e5a51decca392ea/rust.dbscheme similarity index 100% rename from rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/rust.dbscheme rename to rust/downgrades/7b74969ab7ac48b2c51700c62e5a51decca392ea/rust.dbscheme diff --git a/rust/downgrades/7b74969ab7ac48b2c51700c62e5a51decca392ea/upgrade.properties b/rust/downgrades/7b74969ab7ac48b2c51700c62e5a51decca392ea/upgrade.properties new file mode 100644 index 000000000000..13860dac419a --- /dev/null +++ b/rust/downgrades/7b74969ab7ac48b2c51700c62e5a51decca392ea/upgrade.properties @@ -0,0 +1,5 @@ +description: Rename `macro_call_expansion` to `expanded`, and remove `attribute_macro_expansion` +compatibility: backwards +macro_call_expandeds.rel: reorder macro_call_macro_call_expansions.rel (@macro_call id, @ast_node expanded) id expanded +macro_call_macro_call_expansions.rel: delete +item_attribute_macro_expansions.rel: delete diff --git a/rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/downgrade.ql b/rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/downgrade.ql deleted file mode 100644 index 562e773383f3..000000000000 --- a/rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/downgrade.ql +++ /dev/null @@ -1,7 +0,0 @@ -class Element extends @element { - string toString() { none() } -} - -query predicate new_macro_call_expandeds(Element id, Element expanded) { - item_expandeds(id, expanded) and macro_calls(id) -} diff --git a/rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/upgrade.properties b/rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/upgrade.properties deleted file mode 100644 index aa90ec62fc39..000000000000 --- a/rust/downgrades/f78cb8f2ab3bafb0d116cd8128f0315db24aea33/upgrade.properties +++ /dev/null @@ -1,4 +0,0 @@ -description: Move `expanded` back from all `@item`s to `@macro_call`s only -compatibility: backwards -item_expandeds.rel: delete -macro_call_expandeds.rel: run downgrade.ql new_macro_call_expandeds From 82736ea62157b2e13c981938e266084af9b64274 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Fri, 2 May 2025 13:43:00 +0200 Subject: [PATCH 07/10] Rust: add diagnostics about item expansion not working properly --- rust/extractor/src/translate/base.rs | 35 +++++++++++++++++++--------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/rust/extractor/src/translate/base.rs b/rust/extractor/src/translate/base.rs index 527f4e9497a8..476c02b3adfd 100644 --- a/rust/extractor/src/translate/base.rs +++ b/rust/extractor/src/translate/base.rs @@ -159,21 +159,24 @@ impl<'a> Translator<'a> { Some(node.syntax().text_range()) } } - pub fn emit_location(&mut self, label: Label, node: &impl ast::AstNode) { - if let Some((start, end)) = self - .text_range_for_node(node) + + fn location_for_node(&mut self, node: &impl ast::AstNode) -> (LineCol, LineCol) { + self.text_range_for_node(node) .and_then(|r| self.location(r)) - { - self.trap.emit_location(self.label, label, start, end) - } else { - self.emit_diagnostic( + .unwrap_or(UNKNOWN_LOCATION) + } + + pub fn emit_location(&mut self, label: Label, node: &impl ast::AstNode) { + match self.location_for_node(node) { + UNKNOWN_LOCATION => self.emit_diagnostic( DiagnosticSeverity::Debug, "locations".to_owned(), "missing location for AstNode".to_owned(), "missing location for AstNode".to_owned(), UNKNOWN_LOCATION, - ); - } + ), + (start, end) => self.trap.emit_location(self.label, label, start, end), + }; } pub fn emit_location_token( &mut self, @@ -657,9 +660,19 @@ impl<'a> Translator<'a> { let ExpandResult { value: expanded, .. } = semantics.expand_attr_macro(node)?; - // TODO emit err? self.emit_macro_expansion_parse_errors(node, &expanded); - let macro_items = ast::MacroItems::cast(expanded)?; + let macro_items = ast::MacroItems::cast(expanded).or_else(|| { + let message = "attribute macro expansion cannot be cast to MacroItems".to_owned(); + let location = self.location_for_node(node); + self.emit_diagnostic( + DiagnosticSeverity::Warning, + "item_expansion".to_owned(), + message.clone(), + message, + location, + ); + None + })?; let expanded = self.emit_macro_items(¯o_items)?; generated::Item::emit_attribute_macro_expansion(label, expanded, &mut self.trap.writer); Some(()) From 674800748befb0d0362a50bf16aa316d4032e139 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Fri, 2 May 2025 15:24:31 +0200 Subject: [PATCH 08/10] Rust: fix location emission --- rust/extractor/src/translate/base.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/rust/extractor/src/translate/base.rs b/rust/extractor/src/translate/base.rs index 476c02b3adfd..d0e99e8a5b45 100644 --- a/rust/extractor/src/translate/base.rs +++ b/rust/extractor/src/translate/base.rs @@ -160,22 +160,21 @@ impl<'a> Translator<'a> { } } - fn location_for_node(&mut self, node: &impl ast::AstNode) -> (LineCol, LineCol) { + fn location_for_node(&mut self, node: &impl ast::AstNode) -> Option<(LineCol, LineCol)> { self.text_range_for_node(node) .and_then(|r| self.location(r)) - .unwrap_or(UNKNOWN_LOCATION) } pub fn emit_location(&mut self, label: Label, node: &impl ast::AstNode) { match self.location_for_node(node) { - UNKNOWN_LOCATION => self.emit_diagnostic( + None => self.emit_diagnostic( DiagnosticSeverity::Debug, "locations".to_owned(), "missing location for AstNode".to_owned(), "missing location for AstNode".to_owned(), UNKNOWN_LOCATION, ), - (start, end) => self.trap.emit_location(self.label, label, start, end), + Some((start, end)) => self.trap.emit_location(self.label, label, start, end), }; } pub fn emit_location_token( @@ -669,7 +668,7 @@ impl<'a> Translator<'a> { "item_expansion".to_owned(), message.clone(), message, - location, + location.unwrap_or(UNKNOWN_LOCATION), ); None })?; From f5438390d5b025d8ab0fce5c3b2d342bd8b6f2dc Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 14 May 2025 10:01:44 +0200 Subject: [PATCH 09/10] Rust: enhance macro expansion testing --- rust/ql/integration-tests/.gitignore | 1 + .../macro-expansion/Cargo.lock | 53 ++++++ .../macro-expansion/Cargo.toml | 11 ++ .../macro-expansion/diagnostics.expected | 47 ++++++ .../macro-expansion/macros/Cargo.toml | 11 ++ .../macro-expansion/macros/src/lib.rs | 18 ++ .../macro-expansion/source_archive.expected | 2 + .../macro-expansion/src/lib.rs | 11 ++ .../macro-expansion/test.expected | 11 ++ .../integration-tests/macro-expansion/test.ql | 5 + .../macro-expansion/test_macro_expansion.py | 2 + .../macro_expansion/PrintAst.expected | 155 ++++++++++++++++++ .../macro_expansion/PrintAst.qlref | 1 + .../macro_expansion/macro_expansion.rs | 6 + rust/ql/test/utils/PrintAst.expected | 0 rust/ql/test/utils/PrintAst.ql | 15 ++ 16 files changed, 349 insertions(+) create mode 100644 rust/ql/integration-tests/.gitignore create mode 100644 rust/ql/integration-tests/macro-expansion/Cargo.lock create mode 100644 rust/ql/integration-tests/macro-expansion/Cargo.toml create mode 100644 rust/ql/integration-tests/macro-expansion/diagnostics.expected create mode 100644 rust/ql/integration-tests/macro-expansion/macros/Cargo.toml create mode 100644 rust/ql/integration-tests/macro-expansion/macros/src/lib.rs create mode 100644 rust/ql/integration-tests/macro-expansion/source_archive.expected create mode 100644 rust/ql/integration-tests/macro-expansion/src/lib.rs create mode 100644 rust/ql/integration-tests/macro-expansion/test.expected create mode 100644 rust/ql/integration-tests/macro-expansion/test.ql create mode 100644 rust/ql/integration-tests/macro-expansion/test_macro_expansion.py create mode 100644 rust/ql/test/extractor-tests/macro_expansion/PrintAst.expected create mode 100644 rust/ql/test/extractor-tests/macro_expansion/PrintAst.qlref create mode 100644 rust/ql/test/utils/PrintAst.expected create mode 100644 rust/ql/test/utils/PrintAst.ql diff --git a/rust/ql/integration-tests/.gitignore b/rust/ql/integration-tests/.gitignore new file mode 100644 index 000000000000..2f7896d1d136 --- /dev/null +++ b/rust/ql/integration-tests/.gitignore @@ -0,0 +1 @@ +target/ diff --git a/rust/ql/integration-tests/macro-expansion/Cargo.lock b/rust/ql/integration-tests/macro-expansion/Cargo.lock new file mode 100644 index 000000000000..976dc5e7def2 --- /dev/null +++ b/rust/ql/integration-tests/macro-expansion/Cargo.lock @@ -0,0 +1,53 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "macro_expansion" +version = "0.1.0" +dependencies = [ + "macros", +] + +[[package]] +name = "macros" +version = "0.1.0" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "proc-macro2" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "syn" +version = "2.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" diff --git a/rust/ql/integration-tests/macro-expansion/Cargo.toml b/rust/ql/integration-tests/macro-expansion/Cargo.toml new file mode 100644 index 000000000000..b7ce204e07ff --- /dev/null +++ b/rust/ql/integration-tests/macro-expansion/Cargo.toml @@ -0,0 +1,11 @@ +[workspace] +members = ["macros"] +resolver = "2" + +[package] +name = "macro_expansion" +version = "0.1.0" +edition = "2024" + +[dependencies] +macros = { path = "macros" } diff --git a/rust/ql/integration-tests/macro-expansion/diagnostics.expected b/rust/ql/integration-tests/macro-expansion/diagnostics.expected new file mode 100644 index 000000000000..74e11aa9f2b4 --- /dev/null +++ b/rust/ql/integration-tests/macro-expansion/diagnostics.expected @@ -0,0 +1,47 @@ +{ + "attributes": { + "durations": { + "crateGraph": { + "ms": "__REDACTED__", + "pretty": "__REDACTED__" + }, + "extract": { + "ms": "__REDACTED__", + "pretty": "__REDACTED__" + }, + "findManifests": { + "ms": "__REDACTED__", + "pretty": "__REDACTED__" + }, + "loadManifest": { + "ms": "__REDACTED__", + "pretty": "__REDACTED__" + }, + "loadSource": { + "ms": "__REDACTED__", + "pretty": "__REDACTED__" + }, + "parse": { + "ms": "__REDACTED__", + "pretty": "__REDACTED__" + }, + "total": { + "ms": "__REDACTED__", + "pretty": "__REDACTED__" + } + }, + "numberOfFiles": 3, + "numberOfManifests": 1 + }, + "severity": "note", + "source": { + "extractorName": "rust", + "id": "rust/extractor/telemetry", + "name": "telemetry" + }, + "visibility": { + "cliSummaryTable": false, + "statusPage": false, + "telemetry": true + } +} diff --git a/rust/ql/integration-tests/macro-expansion/macros/Cargo.toml b/rust/ql/integration-tests/macro-expansion/macros/Cargo.toml new file mode 100644 index 000000000000..a503d3fb903f --- /dev/null +++ b/rust/ql/integration-tests/macro-expansion/macros/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "macros" +version = "0.1.0" +edition = "2024" + +[lib] +proc-macro = true + +[dependencies] +quote = "1.0.40" +syn = { version = "2.0.100", features = ["full"] } diff --git a/rust/ql/integration-tests/macro-expansion/macros/src/lib.rs b/rust/ql/integration-tests/macro-expansion/macros/src/lib.rs new file mode 100644 index 000000000000..8d1f3be0e4ef --- /dev/null +++ b/rust/ql/integration-tests/macro-expansion/macros/src/lib.rs @@ -0,0 +1,18 @@ +use proc_macro::TokenStream; +use quote::quote; + +#[proc_macro_attribute] +pub fn repeat(attr: TokenStream, item: TokenStream) -> TokenStream { + let number = syn::parse_macro_input!(attr as syn::LitInt).base10_parse::().unwrap(); + let ast = syn::parse_macro_input!(item as syn::ItemFn); + let items = (0..number) + .map(|i| { + let mut new_ast = ast.clone(); + new_ast.sig.ident = syn::Ident::new(&format!("{}_{}", ast.sig.ident, i), ast.sig.ident.span()); + new_ast + }) + .collect::>(); + quote! { + #(#items)* + }.into() +} diff --git a/rust/ql/integration-tests/macro-expansion/source_archive.expected b/rust/ql/integration-tests/macro-expansion/source_archive.expected new file mode 100644 index 000000000000..ec61af6032b7 --- /dev/null +++ b/rust/ql/integration-tests/macro-expansion/source_archive.expected @@ -0,0 +1,2 @@ +macros/src/lib.rs +src/lib.rs diff --git a/rust/ql/integration-tests/macro-expansion/src/lib.rs b/rust/ql/integration-tests/macro-expansion/src/lib.rs new file mode 100644 index 000000000000..6d2d6037e5d2 --- /dev/null +++ b/rust/ql/integration-tests/macro-expansion/src/lib.rs @@ -0,0 +1,11 @@ +use macros::repeat; + +#[repeat(3)] +fn foo() {} + +#[repeat(2)] +#[repeat(3)] +fn bar() {} + +#[repeat(0)] +fn baz() {} diff --git a/rust/ql/integration-tests/macro-expansion/test.expected b/rust/ql/integration-tests/macro-expansion/test.expected new file mode 100644 index 000000000000..1247930bd226 --- /dev/null +++ b/rust/ql/integration-tests/macro-expansion/test.expected @@ -0,0 +1,11 @@ +| src/lib.rs:3:1:4:11 | fn foo | 0 | src/lib.rs:4:1:4:10 | fn foo_0 | +| src/lib.rs:3:1:4:11 | fn foo | 1 | src/lib.rs:4:1:4:10 | fn foo_1 | +| src/lib.rs:3:1:4:11 | fn foo | 2 | src/lib.rs:4:1:4:10 | fn foo_2 | +| src/lib.rs:6:1:8:11 | fn bar | 0 | src/lib.rs:7:1:8:10 | fn bar_0 | +| src/lib.rs:6:1:8:11 | fn bar | 1 | src/lib.rs:7:1:8:10 | fn bar_1 | +| src/lib.rs:7:1:8:10 | fn bar_0 | 0 | src/lib.rs:8:1:8:10 | fn bar_0_0 | +| src/lib.rs:7:1:8:10 | fn bar_0 | 1 | src/lib.rs:8:1:8:10 | fn bar_0_1 | +| src/lib.rs:7:1:8:10 | fn bar_0 | 2 | src/lib.rs:8:1:8:10 | fn bar_0_2 | +| src/lib.rs:7:1:8:10 | fn bar_1 | 0 | src/lib.rs:8:1:8:10 | fn bar_1_0 | +| src/lib.rs:7:1:8:10 | fn bar_1 | 1 | src/lib.rs:8:1:8:10 | fn bar_1_1 | +| src/lib.rs:7:1:8:10 | fn bar_1 | 2 | src/lib.rs:8:1:8:10 | fn bar_1_2 | diff --git a/rust/ql/integration-tests/macro-expansion/test.ql b/rust/ql/integration-tests/macro-expansion/test.ql new file mode 100644 index 000000000000..f3f49cbf5c73 --- /dev/null +++ b/rust/ql/integration-tests/macro-expansion/test.ql @@ -0,0 +1,5 @@ +import rust + +from Item i, MacroItems items, int index, Item expanded +where i.getAttributeMacroExpansion() = items and items.getItem(index) = expanded +select i, index, expanded diff --git a/rust/ql/integration-tests/macro-expansion/test_macro_expansion.py b/rust/ql/integration-tests/macro-expansion/test_macro_expansion.py new file mode 100644 index 000000000000..0d20cc2e27da --- /dev/null +++ b/rust/ql/integration-tests/macro-expansion/test_macro_expansion.py @@ -0,0 +1,2 @@ +def test_macro_expansion(codeql, rust, check_source_archive, rust_check_diagnostics): + codeql.database.create() diff --git a/rust/ql/test/extractor-tests/macro_expansion/PrintAst.expected b/rust/ql/test/extractor-tests/macro_expansion/PrintAst.expected new file mode 100644 index 000000000000..43410dfcd8e4 --- /dev/null +++ b/rust/ql/test/extractor-tests/macro_expansion/PrintAst.expected @@ -0,0 +1,155 @@ +lib.rs: +# 1| [SourceFile] SourceFile +# 1| getItem(0): [Module] mod macro_expansion +# 1| getName(): [Name] macro_expansion +macro_expansion.rs: +# 1| [SourceFile] SourceFile +# 1| getItem(0): [Function] fn foo +# 2| getAttributeMacroExpansion(): [MacroItems] MacroItems +# 2| getItem(0): [Function] fn foo +# 1| getParamList(): [ParamList] ParamList +# 1| getAbi(): [Abi] Abi +# 2| getBody(): [BlockExpr] { ... } +# 2| getStmtList(): [StmtList] StmtList +# 2| getName(): [Name] foo +# 2| getItem(1): [Static] Static +# 1| getAttr(0): [Attr] Attr +# 1| getMeta(): [Meta] Meta +# 1| getPath(): [Path] used +# 1| getSegment(): [PathSegment] used +# 1| getIdentifier(): [NameRef] used +# 1| getAttr(1): [Attr] Attr +# 1| getMeta(): [Meta] Meta +# 1| getPath(): [Path] allow +# 1| getSegment(): [PathSegment] allow +# 1| getIdentifier(): [NameRef] allow +# 1| getTokenTree(): [TokenTree] TokenTree +# 1| getAttr(2): [Attr] Attr +# 1| getMeta(): [Meta] Meta +# 1| getPath(): [Path] doc +# 1| getSegment(): [PathSegment] doc +# 1| getIdentifier(): [NameRef] doc +# 1| getTokenTree(): [TokenTree] TokenTree +# 1| getAttr(3): [Attr] Attr +# 1| getMeta(): [Meta] Meta +# 1| getPath(): [Path] cfg_attr +# 1| getSegment(): [PathSegment] cfg_attr +# 1| getIdentifier(): [NameRef] cfg_attr +# 1| getTokenTree(): [TokenTree] TokenTree +# 1| getAttr(4): [Attr] Attr +# 1| getMeta(): [Meta] Meta +# 1| getPath(): [Path] cfg_attr +# 1| getSegment(): [PathSegment] cfg_attr +# 1| getIdentifier(): [NameRef] cfg_attr +# 1| getTokenTree(): [TokenTree] TokenTree +# 1| getAttr(5): [Attr] Attr +# 1| getMeta(): [Meta] Meta +# 1| getPath(): [Path] cfg_attr +# 1| getSegment(): [PathSegment] cfg_attr +# 1| getIdentifier(): [NameRef] cfg_attr +# 1| getTokenTree(): [TokenTree] TokenTree +# 1| getAttr(6): [Attr] Attr +# 1| getMeta(): [Meta] Meta +# 1| getPath(): [Path] cfg_attr +# 1| getSegment(): [PathSegment] cfg_attr +# 1| getIdentifier(): [NameRef] cfg_attr +# 1| getTokenTree(): [TokenTree] TokenTree +# 1| getAttr(7): [Attr] Attr +# 1| getMeta(): [Meta] Meta +# 1| getPath(): [Path] cfg_attr +# 1| getSegment(): [PathSegment] cfg_attr +# 1| getIdentifier(): [NameRef] cfg_attr +# 1| getTokenTree(): [TokenTree] TokenTree +# 1| getAttr(8): [Attr] Attr +# 1| getMeta(): [Meta] Meta +# 1| getPath(): [Path] cfg_attr +# 1| getSegment(): [PathSegment] cfg_attr +# 1| getIdentifier(): [NameRef] cfg_attr +# 1| getTokenTree(): [TokenTree] TokenTree +# 1| getAttr(9): [Attr] Attr +# 1| getMeta(): [Meta] Meta +# 1| getPath(): [Path] cfg_attr +# 1| getSegment(): [PathSegment] cfg_attr +# 1| getIdentifier(): [NameRef] cfg_attr +# 1| getTokenTree(): [TokenTree] TokenTree +# 1| getAttr(10): [Attr] Attr +# 1| getMeta(): [Meta] Meta +# 1| getPath(): [Path] cfg_attr +# 1| getSegment(): [PathSegment] cfg_attr +# 1| getIdentifier(): [NameRef] cfg_attr +# 1| getTokenTree(): [TokenTree] TokenTree +# 1| getAttr(11): [Attr] Attr +# 1| getMeta(): [Meta] Meta +# 1| getPath(): [Path] cfg_attr +# 1| getSegment(): [PathSegment] cfg_attr +# 1| getIdentifier(): [NameRef] cfg_attr +# 1| getTokenTree(): [TokenTree] TokenTree +# 2| getBody(): [BlockExpr] { ... } +# 2| getStmtList(): [StmtList] StmtList +# 2| getStatement(0): [Function] fn foo___rust_ctor___ctor +# 1| getParamList(): [ParamList] ParamList +# 1| getAttr(0): [Attr] Attr +# 1| getMeta(): [Meta] Meta +# 1| getPath(): [Path] allow +# 1| getSegment(): [PathSegment] allow +# 1| getIdentifier(): [NameRef] allow +# 1| getTokenTree(): [TokenTree] TokenTree +# 1| getAttr(1): [Attr] Attr +# 1| getMeta(): [Meta] Meta +# 1| getPath(): [Path] cfg_attr +# 1| getSegment(): [PathSegment] cfg_attr +# 1| getIdentifier(): [NameRef] cfg_attr +# 1| getTokenTree(): [TokenTree] TokenTree +# 1| getAbi(): [Abi] Abi +# 2| getBody(): [BlockExpr] { ... } +# 2| getStmtList(): [StmtList] StmtList +# 2| getStatement(0): [ExprStmt] ExprStmt +# 2| getExpr(): [CallExpr] foo(...) +# 1| getArgList(): [ArgList] ArgList +# 2| getFunction(): [PathExpr] foo +# 2| getPath(): [Path] foo +# 2| getSegment(): [PathSegment] foo +# 2| getIdentifier(): [NameRef] foo +# 1| getTailExpr(): [LiteralExpr] 0 +# 1| getName(): [Name] foo___rust_ctor___ctor +# 1| getRetType(): [RetTypeRepr] RetTypeRepr +# 1| getTypeRepr(): [PathTypeRepr] usize +# 1| getPath(): [Path] usize +# 1| getSegment(): [PathSegment] usize +# 1| getIdentifier(): [NameRef] usize +# 1| getTailExpr(): [PathExpr] foo___rust_ctor___ctor +# 1| getPath(): [Path] foo___rust_ctor___ctor +# 1| getSegment(): [PathSegment] foo___rust_ctor___ctor +# 1| getIdentifier(): [NameRef] foo___rust_ctor___ctor +# 1| getName(): [Name] foo___rust_ctor___ctor +# 1| getTypeRepr(): [FnPtrTypeRepr] FnPtrTypeRepr +# 1| getAbi(): [Abi] Abi +# 1| getParamList(): [ParamList] ParamList +# 1| getRetType(): [RetTypeRepr] RetTypeRepr +# 1| getTypeRepr(): [PathTypeRepr] usize +# 1| getPath(): [Path] usize +# 1| getSegment(): [PathSegment] usize +# 1| getIdentifier(): [NameRef] usize +# 2| getParamList(): [ParamList] ParamList +# 1| getAttr(0): [Attr] Attr +# 1| getMeta(): [Meta] Meta +# 1| getPath(): [Path] ...::ctor +# 1| getQualifier(): [Path] ctor +# 1| getSegment(): [PathSegment] ctor +# 1| getIdentifier(): [NameRef] ctor +# 1| getSegment(): [PathSegment] ctor +# 1| getIdentifier(): [NameRef] ctor +# 2| getBody(): [BlockExpr] { ... } +# 2| getStmtList(): [StmtList] StmtList +# 2| getName(): [Name] foo +# 4| getItem(1): [Function] fn bar +# 5| getParamList(): [ParamList] ParamList +# 4| getAttr(0): [Attr] Attr +# 4| getMeta(): [Meta] Meta +# 4| getPath(): [Path] cfg +# 4| getSegment(): [PathSegment] cfg +# 4| getIdentifier(): [NameRef] cfg +# 4| getTokenTree(): [TokenTree] TokenTree +# 5| getBody(): [BlockExpr] { ... } +# 5| getStmtList(): [StmtList] StmtList +# 5| getName(): [Name] bar diff --git a/rust/ql/test/extractor-tests/macro_expansion/PrintAst.qlref b/rust/ql/test/extractor-tests/macro_expansion/PrintAst.qlref new file mode 100644 index 000000000000..ee3c14c56f15 --- /dev/null +++ b/rust/ql/test/extractor-tests/macro_expansion/PrintAst.qlref @@ -0,0 +1 @@ +utils/PrintAst.ql diff --git a/rust/ql/test/extractor-tests/macro_expansion/macro_expansion.rs b/rust/ql/test/extractor-tests/macro_expansion/macro_expansion.rs index 8ccaa6276c6a..1825f1056e35 100644 --- a/rust/ql/test/extractor-tests/macro_expansion/macro_expansion.rs +++ b/rust/ql/test/extractor-tests/macro_expansion/macro_expansion.rs @@ -1,2 +1,8 @@ #[ctor::ctor] fn foo() {} + +#[cfg(any(linux, not(linux)))] +fn bar() {} + +#[cfg(all(linux, not(linux)))] +fn baz() {} diff --git a/rust/ql/test/utils/PrintAst.expected b/rust/ql/test/utils/PrintAst.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/utils/PrintAst.ql b/rust/ql/test/utils/PrintAst.ql new file mode 100644 index 000000000000..299b092d51f2 --- /dev/null +++ b/rust/ql/test/utils/PrintAst.ql @@ -0,0 +1,15 @@ +/** + * @name Print AST + * @description Outputs a representation of a file's Abstract Syntax Tree + * @id rust/test/print-ast + * @kind graph + */ + +import rust +import codeql.rust.printast.PrintAst +import codeql.rust.elements.internal.generated.ParentChild +import TestUtils + +predicate shouldPrint(Locatable e) { toBeTested(e) } + +import PrintAst From 3d38d77d635365bdf14d43f8bd6917b6a031f93e Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 14 May 2025 11:41:17 +0200 Subject: [PATCH 10/10] Rust: accept dummy test output --- rust/ql/test/utils/PrintAst.expected | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rust/ql/test/utils/PrintAst.expected b/rust/ql/test/utils/PrintAst.expected index e69de29bb2d1..8c584755b351 100644 --- a/rust/ql/test/utils/PrintAst.expected +++ b/rust/ql/test/utils/PrintAst.expected @@ -0,0 +1,2 @@ +lib.rs: +# 1| [SourceFile] SourceFile