diff --git a/misc/codegen/lib/schemadefs.py b/misc/codegen/lib/schemadefs.py index c4d3c0669e80..de648c0f8e4a 100644 --- a/misc/codegen/lib/schemadefs.py +++ b/misc/codegen/lib/schemadefs.py @@ -252,7 +252,7 @@ def __getitem__(self, item): use_for_null = _ClassPragma("null") -qltest.add(_ClassPragma("skip")) +qltest.add(_Pragma("skip")) qltest.add(_ClassPragma("collapse_hierarchy")) qltest.add(_ClassPragma("uncollapse_hierarchy")) qltest.add( diff --git a/rust/ast-generator/src/main.rs b/rust/ast-generator/src/main.rs index 0cc52b9508e2..f136fd57fc41 100644 --- a/rust/ast-generator/src/main.rs +++ b/rust/ast-generator/src/main.rs @@ -76,6 +76,8 @@ fn should_enum_be_skipped(name: &str) -> bool { fn should_node_be_skipped(name: &str) -> bool { name == "TypeAnchor" // we flatten TypeAnchor into PathSegment in the extractor || name == "MacroStmts" // we workaround a getter bug in the extractor + || name == "ParenExpr" // parenthesized expressions are extracted as their inner expression + || name == "ParenPat" // parenthesized patterns are extracted as their inner pattern } fn should_node_be_skipped_in_extractor(name: &str) -> bool { @@ -133,6 +135,7 @@ fn get_additional_fields(node_name: &str) -> Vec { FieldInfo::body("body", "TokenTree"), ], "MacroCall" => vec![FieldInfo::body("token_tree", "TokenTree")], + "MacroExpr" | "RecordExpr" => vec![FieldInfo::list("attrs", "AnyAttr")], "FormatArgsExpr" => vec![FieldInfo::list("args", "FormatArgsArg")], "ArgList" => vec![FieldInfo::list("args", "Expr")], "Fn" => vec![FieldInfo::body("body", "BlockExpr")], @@ -349,6 +352,7 @@ struct EnumVariantInfo { name: String, snake_case_name: String, variant_ast_name: String, + emission: String, } #[derive(Serialize)] @@ -365,6 +369,8 @@ struct ExtractorNodeFieldInfo { name: String, method: String, snake_case_ty: String, + attributes: bool, + parenthesized_attrs: bool, string: bool, predicate: bool, optional: bool, @@ -399,10 +405,16 @@ fn enum_to_extractor_info(node: &AstEnumSrc) -> ExtractorEnumInfo { .map(|v| { let name = class_name(v); let snake_case_name = to_lower_snake_case(v); + let emission = match v.as_str() { + "ParenExpr" => "self.emit_parenthesized_expr(inner)".to_owned(), + "ParenPat" => "self.emit_parenthesized_pat(inner)".to_owned(), + _ => format!("self.emit_{snake_case_name}(inner).map(Into::into)"), + }; EnumVariantInfo { name, snake_case_name, variant_ast_name: v.to_string(), + emission, } }) .collect(), @@ -412,6 +424,7 @@ fn enum_to_extractor_info(node: &AstEnumSrc) -> ExtractorEnumInfo { fn field_info_to_extractor_info(name: &str, field: &FieldInfo) -> ExtractorNodeFieldInfo { let name = property_name(name, &field.name); + let attributes = name == "attrs"; match &field.ty { FieldType::String => ExtractorNodeFieldInfo { name, @@ -440,6 +453,7 @@ fn field_info_to_extractor_info(name: &str, field: &FieldInfo) -> ExtractorNodeF }, FieldType::List(ty) => ExtractorNodeFieldInfo { name, + attributes, method: if ty == "AnyAttr" { "attrs_with_doc".to_owned() } else { @@ -453,12 +467,19 @@ fn field_info_to_extractor_info(name: &str, field: &FieldInfo) -> ExtractorNodeF } fn node_to_extractor_info(node: &AstNodeSrc) -> ExtractorNodeInfo { let fields = get_fields(node); - let has_attrs = fields.iter().any(|f| f.name == "attrs"); + let parenthesized_attrs = matches!(node.name.as_str(), "MacroExpr" | "RecordExpr"); let name = class_name(&node.name); - let fields = fields + let fields: Vec<_> = fields .iter() .map(|f| field_info_to_extractor_info(&name, f)) + .map(|mut f| { + f.parenthesized_attrs = parenthesized_attrs && f.name == "attrs"; + f + }) .collect(); + let has_attrs = fields + .iter() + .any(|f| f.name == "attrs" && !f.parenthesized_attrs); ExtractorNodeInfo { name, snake_case_name: to_lower_snake_case(&node.name), diff --git a/rust/ast-generator/templates/extractor.mustache b/rust/ast-generator/templates/extractor.mustache index 03269c26ae3f..ec1f1b17da31 100644 --- a/rust/ast-generator/templates/extractor.mustache +++ b/rust/ast-generator/templates/extractor.mustache @@ -18,7 +18,7 @@ impl Translator<'_> { {{>pre_emission}} let label = match node { {{#variants}} - ast::{{ast_name}}::{{variant_ast_name}}(inner) => self.emit_{{snake_case_name}}(inner).map(Into::into), + ast::{{ast_name}}::{{variant_ast_name}}(inner) => {{{emission}}}, {{/variants}} }?; {{>post_emission}} @@ -33,6 +33,18 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } {{/has_attrs}} {{#fields}} + {{#attributes}} + {{#parenthesized_attrs}} + let attrs = self.take_parenthesized_expr_attrs(node.syntax()); + {{/parenthesized_attrs}} + {{^parenthesized_attrs}} + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.{{method}}().filter_map(|x| self.emit_{{snake_case_ty}}(&x))); + {{/parenthesized_attrs}} + {{/attributes}} + {{/fields}} + {{#fields}} + {{^attributes}} let {{name}} = {{#predicate}} node.{{method}}().is_some() @@ -50,11 +62,17 @@ impl Translator<'_> { if self.should_skip_bodies() { None } else { node.{{method}}().and_then(|x| self.emit_{{snake_case_ty}}(&x)) } {{/body}} ; + {{/attributes}} {{/fields}} let label = self.trap.emit(generated::{{name}} { id: TrapId::Star, {{#fields}} + {{#attributes}} + attrs, + {{/attributes}} + {{^attributes}} {{name}}, + {{/attributes}} {{/fields}} }); self.emit_location(label, node); diff --git a/rust/downgrades/7980434ec600632010dc150cdd85c23a95b922fb/old.dbscheme b/rust/downgrades/7980434ec600632010dc150cdd85c23a95b922fb/old.dbscheme new file mode 100644 index 000000000000..7980434ec600 --- /dev/null +++ b/rust/downgrades/7980434ec600632010dc150cdd85c23a95b922fb/old.dbscheme @@ -0,0 +1,3753 @@ +// 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_comments (unique int id: @yaml_comment, + string text: string ref, + string tostring: 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 | @yaml_comment; + +/*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +overlayChangedFiles( + string path: string ref +); + + +// from prefix.dbscheme +#keyset[id] +locatable_locations( + int id: @locatable ref, + int location: @location_default ref +); + + +// from schema + +@element = + @extractor_step +| @locatable +| @named_crate +| @unextracted +; + +extractor_steps( + unique int id: @extractor_step, + string action: string ref, + int duration_ms: int ref +); + +#keyset[id] +extractor_step_files( + int id: @extractor_step ref, + int file: @file ref +); + +@locatable = + @ast_node +| @crate +; + +named_crates( + unique int id: @named_crate, + string name: string ref, + int crate: @crate ref +); + +@unextracted = + @missing +| @unimplemented +; + +@ast_node = + @abi +| @addressable +| @any_attr +| @arg_list +| @asm_dir_spec +| @asm_operand +| @asm_operand_expr +| @asm_option +| @asm_piece +| @asm_reg_spec +| @assoc_item_list +| @callable +| @cfg_predicate +| @expr +| @extern_item_list +| @field_list +| @for_binder +| @format_args_arg +| @generic_arg +| @generic_arg_list +| @generic_param +| @generic_param_list +| @impl_restriction +| @item_list +| @label +| @let_else +| @macro_items +| @match_arm +| @match_arm_list +| @match_guard +| @meta +| @mut_restriction +| @name +| @param_base +| @param_list +| @parenthesized_arg_list +| @pat +| @path +| @path_ast_node +| @path_segment +| @rename +| @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 +| @try_block_modifier +| @tuple_field +| @type_bound +| @type_bound_list +| @type_repr +| @use_bound_generic_arg +| @use_bound_generic_args +| @use_tree +| @use_tree_list +| @variant_list +| @visibility +| @visibility_inner +| @where_clause +| @where_pred +; + +crates( + unique int id: @crate +); + +#keyset[id] +crate_names( + int id: @crate ref, + string name: string ref +); + +#keyset[id] +crate_versions( + int id: @crate ref, + string version: string ref +); + +#keyset[id, index] +crate_cfg_options( + int id: @crate ref, + int index: int ref, + string cfg_option: string ref +); + +#keyset[id, index] +crate_named_dependencies( + int id: @crate ref, + int index: int ref, + int named_dependency: @named_crate ref +); + +missings( + unique int id: @missing +); + +unimplementeds( + unique int id: @unimplemented +); + +abis( + unique int id: @abi +); + +#keyset[id] +abi_abi_strings( + int id: @abi ref, + string abi_string: string ref +); + +@addressable = + @item +| @variant +; + +@any_attr = + @attr +| @doc_comment +; + +arg_lists( + unique int id: @arg_list +); + +#keyset[id, index] +arg_list_args( + int id: @arg_list ref, + int index: int ref, + int arg: @expr ref +); + +asm_dir_specs( + unique int id: @asm_dir_spec +); + +@asm_operand = + @asm_const +| @asm_label +| @asm_reg_operand +| @asm_sym +; + +asm_operand_exprs( + unique int id: @asm_operand_expr +); + +#keyset[id] +asm_operand_expr_in_exprs( + int id: @asm_operand_expr ref, + int in_expr: @expr ref +); + +#keyset[id] +asm_operand_expr_out_exprs( + int id: @asm_operand_expr ref, + int out_expr: @expr ref +); + +asm_options( + unique int id: @asm_option +); + +#keyset[id] +asm_option_is_raw( + int id: @asm_option ref +); + +@asm_piece = + @asm_clobber_abi +| @asm_operand_named +| @asm_options_list +; + +asm_reg_specs( + unique int id: @asm_reg_spec +); + +#keyset[id] +asm_reg_spec_identifiers( + int id: @asm_reg_spec ref, + int identifier: @name_ref ref +); + +assoc_item_lists( + unique int id: @assoc_item_list +); + +#keyset[id, index] +assoc_item_list_assoc_items( + int id: @assoc_item_list ref, + int index: int ref, + int assoc_item: @assoc_item ref +); + +#keyset[id, index] +assoc_item_list_attrs( + int id: @assoc_item_list ref, + int index: int ref, + int attr: @any_attr 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: @any_attr ref +); + +@cfg_predicate = + @cfg_atom +| @cfg_composite +; + +@expr = + @array_expr_internal +| @asm_expr +| @await_expr +| @become_expr +| @binary_expr +| @break_expr +| @call_expr +| @cast_expr +| @cfg_pred_expr +| @closure_expr +| @continue_expr +| @field_expr +| @format_args_expr +| @if_expr +| @include_bytes_expr +| @index_expr +| @labelable_expr +| @let_expr +| @literal_expr +| @macro_expr +| @match_expr +| @method_call_expr +| @offset_of_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_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: @any_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 +; + +for_binders( + unique int id: @for_binder +); + +#keyset[id] +for_binder_generic_param_lists( + int id: @for_binder ref, + int generic_param_list: @generic_param_list ref +); + +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 +); + +impl_restrictions( + unique int id: @impl_restriction +); + +#keyset[id] +impl_restriction_visibility_inners( + int id: @impl_restriction ref, + int visibility_inner: @visibility_inner 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: @any_attr ref +); + +#keyset[id, index] +item_list_items( + int id: @item_list ref, + int index: int ref, + int item: @item ref +); + +labels( + unique int id: @label +); + +#keyset[id] +label_lifetimes( + int id: @label ref, + int lifetime: @lifetime ref +); + +let_elses( + unique int id: @let_else +); + +#keyset[id] +let_else_block_exprs( + int id: @let_else ref, + int block_expr: @block_expr ref +); + +macro_items( + unique int id: @macro_items +); + +#keyset[id, index] +macro_items_items( + int id: @macro_items ref, + int index: int ref, + int item: @item ref +); + +match_arms( + unique int id: @match_arm +); + +#keyset[id, index] +match_arm_attrs( + int id: @match_arm ref, + int index: int ref, + int attr: @any_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: @any_attr ref +); + +match_guards( + unique int id: @match_guard +); + +#keyset[id] +match_guard_conditions( + int id: @match_guard ref, + int condition: @expr ref +); + +@meta = + @cfg_attr_meta +| @cfg_meta +| @key_value_meta +| @path_meta +| @token_tree_meta +| @unsafe_meta +; + +mut_restrictions( + unique int id: @mut_restriction +); + +#keyset[id] +mut_restriction_is_mut( + int id: @mut_restriction ref +); + +#keyset[id] +mut_restriction_visibility_inners( + int id: @mut_restriction ref, + int visibility_inner: @visibility_inner 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: @any_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 +| @cfg_pred_pat +| @const_block_pat +| @deref_pat +| @ident_pat +| @literal_pat +| @macro_pat +| @not_null +| @or_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_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_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 +); + +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: @any_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: @any_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: @any_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: @any_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: @any_attr ref +); + +#keyset[id] +struct_field_default_vals( + int id: @struct_field ref, + int default_val: @const_arg ref +); + +#keyset[id] +struct_field_is_unsafe( + int id: @struct_field ref +); + +#keyset[id] +struct_field_mut_restrictions( + int id: @struct_field ref, + int mut_restriction: @mut_restriction 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: @any_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 +); + +try_block_modifiers( + unique int id: @try_block_modifier +); + +#keyset[id] +try_block_modifier_is_try( + int id: @try_block_modifier ref +); + +#keyset[id] +try_block_modifier_type_reprs( + int id: @try_block_modifier ref, + int type_repr: @type_repr ref +); + +tuple_fields( + unique int id: @tuple_field +); + +#keyset[id, index] +tuple_field_attrs( + int id: @tuple_field ref, + int index: int ref, + int attr: @any_attr ref +); + +#keyset[id] +tuple_field_mut_restrictions( + int id: @tuple_field ref, + int mut_restriction: @mut_restriction 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_for_binders( + int id: @type_bound ref, + int for_binder: @for_binder ref +); + +#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 +| @pattern_type_repr +| @ptr_type_repr +| @ref_type_repr +| @slice_type_repr +| @tuple_type_repr +; + +@use_bound_generic_arg = + @lifetime +| @name_ref +; + +use_bound_generic_args( + unique int id: @use_bound_generic_args +); + +#keyset[id, index] +use_bound_generic_args_use_bound_generic_args( + int id: @use_bound_generic_args ref, + int index: int ref, + int use_bound_generic_arg: @use_bound_generic_arg ref +); + +use_trees( + unique int id: @use_tree +); + +#keyset[id] +use_tree_is_glob( + int id: @use_tree ref +); + +#keyset[id] +use_tree_paths( + int id: @use_tree ref, + int path: @path ref +); + +#keyset[id] +use_tree_renames( + int id: @use_tree ref, + int rename: @rename ref +); + +#keyset[id] +use_tree_use_tree_lists( + int id: @use_tree ref, + int use_tree_list: @use_tree_list ref +); + +use_tree_lists( + unique int id: @use_tree_list +); + +#keyset[id, index] +use_tree_list_use_trees( + int id: @use_tree_list ref, + int index: int ref, + int use_tree: @use_tree ref +); + +variant_lists( + unique int id: @variant_list +); + +#keyset[id, index] +variant_list_variants( + int id: @variant_list ref, + int index: int ref, + int variant: @variant ref +); + +visibilities( + unique int id: @visibility +); + +#keyset[id] +visibility_visibility_inners( + int id: @visibility ref, + int visibility_inner: @visibility_inner ref +); + +visibility_inners( + unique int id: @visibility_inner +); + +#keyset[id] +visibility_inner_paths( + int id: @visibility_inner 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_for_binders( + int id: @where_pred ref, + int for_binder: @for_binder 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: @any_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 +); + +#keyset[id, index] +asm_clobber_abi_attrs( + int id: @asm_clobber_abi ref, + int index: int ref, + int attr: @any_attr ref +); + +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_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, index] +asm_operand_named_attrs( + int id: @asm_operand_named ref, + int index: int ref, + int attr: @any_attr 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 +); + +#keyset[id, index] +asm_options_list_attrs( + int id: @asm_options_list ref, + int index: int ref, + int attr: @any_attr 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 +); + +attrs( + unique int id: @attr +); + +#keyset[id] +attr_meta( + int id: @attr ref, + int meta: @meta 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: @any_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: @any_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: @any_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: @any_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_exprs( + unique int id: @call_expr +); + +#keyset[id] +call_expr_arg_lists( + int id: @call_expr ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +call_expr_attrs( + int id: @call_expr ref, + int index: int ref, + int attr: @any_attr ref +); + +#keyset[id] +call_expr_functions( + int id: @call_expr ref, + int function: @expr 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: @any_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 +); + +cfg_atoms( + unique int id: @cfg_atom +); + +cfg_attr_meta( + unique int id: @cfg_attr_meta +); + +#keyset[id] +cfg_attr_meta_cfg_predicates( + int id: @cfg_attr_meta ref, + int cfg_predicate: @cfg_predicate ref +); + +#keyset[id, index] +cfg_attr_meta_metas( + int id: @cfg_attr_meta ref, + int index: int ref, + int meta: @meta ref +); + +cfg_composites( + unique int id: @cfg_composite +); + +#keyset[id, index] +cfg_composite_cfg_predicates( + int id: @cfg_composite ref, + int index: int ref, + int cfg_predicate: @cfg_predicate ref +); + +cfg_meta( + unique int id: @cfg_meta +); + +#keyset[id] +cfg_meta_cfg_predicates( + int id: @cfg_meta ref, + int cfg_predicate: @cfg_predicate ref +); + +cfg_pred_exprs( + unique int id: @cfg_pred_expr +); + +#keyset[id] +cfg_pred_expr_cfg_predicates( + int id: @cfg_pred_expr ref, + int cfg_predicate: @cfg_predicate ref +); + +cfg_pred_pats( + unique int id: @cfg_pred_pat +); + +#keyset[id] +cfg_pred_pat_cfg_predicates( + int id: @cfg_pred_pat ref, + int cfg_predicate: @cfg_predicate ref +); + +closure_exprs( + unique int id: @closure_expr +); + +#keyset[id] +closure_expr_closure_bodies( + int id: @closure_expr ref, + int closure_body: @expr ref +); + +#keyset[id] +closure_expr_for_binders( + int id: @closure_expr ref, + int for_binder: @for_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: @any_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: @any_attr ref +); + +#keyset[id] +continue_expr_lifetimes( + int id: @continue_expr ref, + int lifetime: @lifetime ref +); + +deref_pats( + unique int id: @deref_pat +); + +#keyset[id] +deref_pat_pats( + int id: @deref_pat ref, + int pat: @pat ref +); + +doc_comments( + unique int id: @doc_comment +); + +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: @any_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_for_binders( + int id: @for_type_repr ref, + int for_binder: @for_binder 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: @any_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: @any_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: @any_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 +); + +include_bytes_exprs( + unique int id: @include_bytes_expr +); + +index_exprs( + unique int id: @index_expr +); + +#keyset[id, index] +index_expr_attrs( + int id: @index_expr ref, + int index: int ref, + int attr: @any_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 = + @asm_expr +| @assoc_item +| @extern_block +| @extern_crate +| @extern_item +| @impl +| @macro_def +| @macro_rules +| @module +| @trait +| @type_item +| @use +; + +#keyset[id] +item_attribute_macro_expansions( + int id: @item ref, + int attribute_macro_expansion: @macro_items ref +); + +key_value_meta( + unique int id: @key_value_meta +); + +#keyset[id] +key_value_meta_exprs( + int id: @key_value_meta ref, + int expr: @expr ref +); + +#keyset[id] +key_value_meta_paths( + int id: @key_value_meta ref, + int path: @path 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: @any_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: @any_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: @any_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: @any_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, index] +macro_expr_attrs( + int id: @macro_expr ref, + int index: int ref, + int attr: @any_attr ref +); + +#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: @any_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 +); + +method_call_exprs( + unique int id: @method_call_expr +); + +#keyset[id] +method_call_expr_arg_lists( + int id: @method_call_expr ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +method_call_expr_attrs( + int id: @method_call_expr ref, + int index: int ref, + int attr: @any_attr ref +); + +#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 +); + +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 +); + +not_nulls( + unique int id: @not_null +); + +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: @any_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_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_expr_base = + @path_expr +; + +path_meta( + unique int id: @path_meta +); + +#keyset[id] +path_meta_paths( + int id: @path_meta ref, + int path: @path ref +); + +path_pats( + unique int id: @path_pat +); + +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 +); + +pattern_type_reprs( + unique int id: @pattern_type_repr +); + +#keyset[id] +pattern_type_repr_pats( + int id: @pattern_type_repr ref, + int pat: @pat ref +); + +#keyset[id] +pattern_type_repr_type_reprs( + int id: @pattern_type_repr ref, + int type_repr: @type_repr 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: @any_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: @any_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: @any_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: @any_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: @any_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_exprs( + unique int id: @struct_expr +); + +#keyset[id, index] +struct_expr_attrs( + int id: @struct_expr ref, + int index: int ref, + int attr: @any_attr ref +); + +#keyset[id] +struct_expr_struct_expr_field_lists( + int id: @struct_expr ref, + int struct_expr_field_list: @struct_expr_field_list 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 +); + +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 +); + +token_tree_meta( + unique int id: @token_tree_meta +); + +#keyset[id] +token_tree_meta_paths( + int id: @token_tree_meta ref, + int path: @path ref +); + +#keyset[id] +token_tree_meta_token_trees( + int id: @token_tree_meta ref, + int token_tree: @token_tree 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: @any_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: @any_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_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 +); + +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: @any_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: @any_attr ref +); + +unsafe_meta( + unique int id: @unsafe_meta +); + +#keyset[id] +unsafe_meta_is_unsafe( + int id: @unsafe_meta ref +); + +#keyset[id] +unsafe_meta_meta( + int id: @unsafe_meta ref, + int meta: @meta ref +); + +variants( + unique int id: @variant +); + +#keyset[id, index] +variant_attrs( + int id: @variant ref, + int index: int ref, + int attr: @any_attr ref +); + +#keyset[id] +variant_const_args( + int id: @variant ref, + int const_arg: @const_arg 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: @any_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: @any_attr ref +); + +#keyset[id] +yield_expr_exprs( + int id: @yield_expr ref, + int expr: @expr 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: @any_attr ref +); + +#keyset[id, index] +asm_expr_templates( + int id: @asm_expr ref, + int index: int ref, + int template: @expr ref +); + +@assoc_item = + @const +| @function +| @macro_call +| @type_alias +; + +block_exprs( + unique int id: @block_expr +); + +#keyset[id, index] +block_expr_attrs( + int id: @block_expr ref, + int index: int ref, + int attr: @any_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_unsafe( + int id: @block_expr ref +); + +#keyset[id] +block_expr_stmt_lists( + int id: @block_expr ref, + int stmt_list: @stmt_list ref +); + +#keyset[id] +block_expr_try_block_modifiers( + int id: @block_expr ref, + int try_block_modifier: @try_block_modifier 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: @any_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: @any_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 +); + +@extern_item = + @function +| @macro_call +| @static +| @type_alias +; + +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: @any_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_trait_ties( + int id: @impl ref, + int trait_ty: @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_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: @any_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: @any_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 +); + +modules( + unique int id: @module +); + +#keyset[id, index] +module_attrs( + int id: @module ref, + int index: int ref, + int attr: @any_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: @any_attr 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: @any_attr ref +); + +#keyset[id] +trait_generic_param_lists( + int id: @trait ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +trait_impl_restrictions( + int id: @trait ref, + int impl_restriction: @impl_restriction 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 +); + +@type_item = + @enum +| @struct +| @union +; + +#keyset[id, index] +type_item_derive_macro_expansions( + int id: @type_item ref, + int index: int ref, + int derive_macro_expansion: @macro_items ref +); + +#keyset[id, index] +type_item_attrs( + int id: @type_item ref, + int index: int ref, + int attr: @any_attr ref +); + +#keyset[id] +type_item_generic_param_lists( + int id: @type_item ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +type_item_names( + int id: @type_item ref, + int name: @name ref +); + +#keyset[id] +type_item_visibilities( + int id: @type_item ref, + int visibility: @visibility ref +); + +#keyset[id] +type_item_where_clauses( + int id: @type_item 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: @any_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 +); + +consts( + unique int id: @const +); + +#keyset[id, index] +const_attrs( + int id: @const ref, + int index: int ref, + int attr: @any_attr ref +); + +#keyset[id] +const_bodies( + int id: @const ref, + int body: @expr ref +); + +#keyset[id] +const_generic_param_lists( + int id: @const ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +const_is_const( + int id: @const ref +); + +#keyset[id] +const_is_default( + int id: @const ref +); + +#keyset[id] +const_names( + int id: @const ref, + int name: @name ref +); + +#keyset[id] +const_type_reprs( + int id: @const ref, + int type_repr: @type_repr ref +); + +#keyset[id] +const_visibilities( + int id: @const ref, + int visibility: @visibility ref +); + +#keyset[id] +const_where_clauses( + int id: @const ref, + int where_clause: @where_clause ref +); + +#keyset[id] +const_has_implementation( + int id: @const ref +); + +enums( + unique int id: @enum +); + +#keyset[id] +enum_variant_lists( + int id: @enum ref, + int variant_list: @variant_list 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: @any_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 +); + +functions( + unique int id: @function +); + +#keyset[id] +function_abis( + int id: @function ref, + int abi: @abi ref +); + +#keyset[id] +function_function_bodies( + int id: @function ref, + int function_body: @block_expr ref +); + +#keyset[id] +function_generic_param_lists( + int id: @function ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +function_is_async( + int id: @function ref +); + +#keyset[id] +function_is_const( + int id: @function ref +); + +#keyset[id] +function_is_default( + int id: @function ref +); + +#keyset[id] +function_is_gen( + int id: @function ref +); + +#keyset[id] +function_is_unsafe( + int id: @function ref +); + +#keyset[id] +function_names( + int id: @function ref, + int name: @name ref +); + +#keyset[id] +function_ret_types( + int id: @function ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +function_visibilities( + int id: @function ref, + int visibility: @visibility ref +); + +#keyset[id] +function_where_clauses( + int id: @function ref, + int where_clause: @where_clause ref +); + +#keyset[id] +function_has_implementation( + int id: @function ref +); + +loop_exprs( + unique int id: @loop_expr +); + +#keyset[id, index] +loop_expr_attrs( + int id: @loop_expr ref, + int index: int ref, + int attr: @any_attr 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: @any_attr ref +); + +#keyset[id] +macro_call_paths( + int id: @macro_call ref, + int path: @path ref +); + +#keyset[id] +macro_call_token_trees( + int id: @macro_call ref, + int token_tree: @token_tree ref +); + +#keyset[id] +macro_call_macro_call_expansions( + int id: @macro_call ref, + int macro_call_expansion: @ast_node ref +); + +statics( + unique int id: @static +); + +#keyset[id, index] +static_attrs( + int id: @static ref, + int index: int ref, + int attr: @any_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] +struct_field_lists_( + int id: @struct ref, + int field_list: @field_list 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: @any_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] +union_struct_field_lists( + int id: @union ref, + int struct_field_list: @struct_field_list 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: @any_attr ref +); + +#keyset[id] +while_expr_conditions( + int id: @while_expr ref, + int condition: @expr ref +); diff --git a/rust/downgrades/7980434ec600632010dc150cdd85c23a95b922fb/rust.dbscheme b/rust/downgrades/7980434ec600632010dc150cdd85c23a95b922fb/rust.dbscheme new file mode 100644 index 000000000000..9487e73d9da6 --- /dev/null +++ b/rust/downgrades/7980434ec600632010dc150cdd85c23a95b922fb/rust.dbscheme @@ -0,0 +1,3768 @@ +// 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_comments (unique int id: @yaml_comment, + string text: string ref, + string tostring: 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 | @yaml_comment; + +/*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +overlayChangedFiles( + string path: string ref +); + + +// from prefix.dbscheme +#keyset[id] +locatable_locations( + int id: @locatable ref, + int location: @location_default ref +); + + +// from schema + +@element = + @extractor_step +| @locatable +| @named_crate +| @unextracted +; + +extractor_steps( + unique int id: @extractor_step, + string action: string ref, + int duration_ms: int ref +); + +#keyset[id] +extractor_step_files( + int id: @extractor_step ref, + int file: @file ref +); + +@locatable = + @ast_node +| @crate +; + +named_crates( + unique int id: @named_crate, + string name: string ref, + int crate: @crate ref +); + +@unextracted = + @missing +| @unimplemented +; + +@ast_node = + @abi +| @addressable +| @any_attr +| @arg_list +| @asm_dir_spec +| @asm_operand +| @asm_operand_expr +| @asm_option +| @asm_piece +| @asm_reg_spec +| @assoc_item_list +| @callable +| @cfg_predicate +| @expr +| @extern_item_list +| @field_list +| @for_binder +| @format_args_arg +| @generic_arg +| @generic_arg_list +| @generic_param +| @generic_param_list +| @impl_restriction +| @item_list +| @label +| @let_else +| @macro_items +| @match_arm +| @match_arm_list +| @match_guard +| @meta +| @mut_restriction +| @name +| @param_base +| @param_list +| @parenthesized_arg_list +| @pat +| @path +| @path_ast_node +| @path_segment +| @rename +| @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 +| @try_block_modifier +| @tuple_field +| @type_bound +| @type_bound_list +| @type_repr +| @use_bound_generic_arg +| @use_bound_generic_args +| @use_tree +| @use_tree_list +| @variant_list +| @visibility +| @visibility_inner +| @where_clause +| @where_pred +; + +crates( + unique int id: @crate +); + +#keyset[id] +crate_names( + int id: @crate ref, + string name: string ref +); + +#keyset[id] +crate_versions( + int id: @crate ref, + string version: string ref +); + +#keyset[id, index] +crate_cfg_options( + int id: @crate ref, + int index: int ref, + string cfg_option: string ref +); + +#keyset[id, index] +crate_named_dependencies( + int id: @crate ref, + int index: int ref, + int named_dependency: @named_crate ref +); + +missings( + unique int id: @missing +); + +unimplementeds( + unique int id: @unimplemented +); + +abis( + unique int id: @abi +); + +#keyset[id] +abi_abi_strings( + int id: @abi ref, + string abi_string: string ref +); + +@addressable = + @item +| @variant +; + +@any_attr = + @attr +| @doc_comment +; + +arg_lists( + unique int id: @arg_list +); + +#keyset[id, index] +arg_list_args( + int id: @arg_list ref, + int index: int ref, + int arg: @expr ref +); + +asm_dir_specs( + unique int id: @asm_dir_spec +); + +@asm_operand = + @asm_const +| @asm_label +| @asm_reg_operand +| @asm_sym +; + +asm_operand_exprs( + unique int id: @asm_operand_expr +); + +#keyset[id] +asm_operand_expr_in_exprs( + int id: @asm_operand_expr ref, + int in_expr: @expr ref +); + +#keyset[id] +asm_operand_expr_out_exprs( + int id: @asm_operand_expr ref, + int out_expr: @expr ref +); + +asm_options( + unique int id: @asm_option +); + +#keyset[id] +asm_option_is_raw( + int id: @asm_option ref +); + +@asm_piece = + @asm_clobber_abi +| @asm_operand_named +| @asm_options_list +; + +asm_reg_specs( + unique int id: @asm_reg_spec +); + +#keyset[id] +asm_reg_spec_identifiers( + int id: @asm_reg_spec ref, + int identifier: @name_ref ref +); + +assoc_item_lists( + unique int id: @assoc_item_list +); + +#keyset[id, index] +assoc_item_list_assoc_items( + int id: @assoc_item_list ref, + int index: int ref, + int assoc_item: @assoc_item ref +); + +#keyset[id, index] +assoc_item_list_attrs( + int id: @assoc_item_list ref, + int index: int ref, + int attr: @any_attr 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: @any_attr ref +); + +@cfg_predicate = + @cfg_atom +| @cfg_composite +; + +@expr = + @array_expr_internal +| @asm_expr +| @await_expr +| @become_expr +| @binary_expr +| @break_expr +| @call_expr +| @cast_expr +| @cfg_pred_expr +| @closure_expr +| @continue_expr +| @field_expr +| @format_args_expr +| @if_expr +| @include_bytes_expr +| @index_expr +| @labelable_expr +| @let_expr +| @literal_expr +| @macro_expr +| @match_expr +| @method_call_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_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: @any_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 +; + +for_binders( + unique int id: @for_binder +); + +#keyset[id] +for_binder_generic_param_lists( + int id: @for_binder ref, + int generic_param_list: @generic_param_list ref +); + +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 +); + +impl_restrictions( + unique int id: @impl_restriction +); + +#keyset[id] +impl_restriction_visibility_inners( + int id: @impl_restriction ref, + int visibility_inner: @visibility_inner 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: @any_attr ref +); + +#keyset[id, index] +item_list_items( + int id: @item_list ref, + int index: int ref, + int item: @item ref +); + +labels( + unique int id: @label +); + +#keyset[id] +label_lifetimes( + int id: @label ref, + int lifetime: @lifetime ref +); + +let_elses( + unique int id: @let_else +); + +#keyset[id] +let_else_block_exprs( + int id: @let_else ref, + int block_expr: @block_expr ref +); + +macro_items( + unique int id: @macro_items +); + +#keyset[id, index] +macro_items_items( + int id: @macro_items ref, + int index: int ref, + int item: @item ref +); + +match_arms( + unique int id: @match_arm +); + +#keyset[id, index] +match_arm_attrs( + int id: @match_arm ref, + int index: int ref, + int attr: @any_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: @any_attr ref +); + +match_guards( + unique int id: @match_guard +); + +#keyset[id] +match_guard_conditions( + int id: @match_guard ref, + int condition: @expr ref +); + +@meta = + @cfg_attr_meta +| @cfg_meta +| @key_value_meta +| @path_meta +| @token_tree_meta +| @unsafe_meta +; + +mut_restrictions( + unique int id: @mut_restriction +); + +#keyset[id] +mut_restriction_is_mut( + int id: @mut_restriction ref +); + +#keyset[id] +mut_restriction_visibility_inners( + int id: @mut_restriction ref, + int visibility_inner: @visibility_inner 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: @any_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 +| @cfg_pred_pat +| @const_block_pat +| @deref_pat +| @ident_pat +| @literal_pat +| @macro_pat +| @not_null +| @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_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_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 +); + +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: @any_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: @any_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: @any_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: @any_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: @any_attr ref +); + +#keyset[id] +struct_field_default_vals( + int id: @struct_field ref, + int default_val: @const_arg ref +); + +#keyset[id] +struct_field_is_unsafe( + int id: @struct_field ref +); + +#keyset[id] +struct_field_mut_restrictions( + int id: @struct_field ref, + int mut_restriction: @mut_restriction 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: @any_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 +); + +try_block_modifiers( + unique int id: @try_block_modifier +); + +#keyset[id] +try_block_modifier_is_try( + int id: @try_block_modifier ref +); + +#keyset[id] +try_block_modifier_type_reprs( + int id: @try_block_modifier ref, + int type_repr: @type_repr ref +); + +tuple_fields( + unique int id: @tuple_field +); + +#keyset[id, index] +tuple_field_attrs( + int id: @tuple_field ref, + int index: int ref, + int attr: @any_attr ref +); + +#keyset[id] +tuple_field_mut_restrictions( + int id: @tuple_field ref, + int mut_restriction: @mut_restriction 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_for_binders( + int id: @type_bound ref, + int for_binder: @for_binder ref +); + +#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 +| @pattern_type_repr +| @ptr_type_repr +| @ref_type_repr +| @slice_type_repr +| @tuple_type_repr +; + +@use_bound_generic_arg = + @lifetime +| @name_ref +; + +use_bound_generic_args( + unique int id: @use_bound_generic_args +); + +#keyset[id, index] +use_bound_generic_args_use_bound_generic_args( + int id: @use_bound_generic_args ref, + int index: int ref, + int use_bound_generic_arg: @use_bound_generic_arg ref +); + +use_trees( + unique int id: @use_tree +); + +#keyset[id] +use_tree_is_glob( + int id: @use_tree ref +); + +#keyset[id] +use_tree_paths( + int id: @use_tree ref, + int path: @path ref +); + +#keyset[id] +use_tree_renames( + int id: @use_tree ref, + int rename: @rename ref +); + +#keyset[id] +use_tree_use_tree_lists( + int id: @use_tree ref, + int use_tree_list: @use_tree_list ref +); + +use_tree_lists( + unique int id: @use_tree_list +); + +#keyset[id, index] +use_tree_list_use_trees( + int id: @use_tree_list ref, + int index: int ref, + int use_tree: @use_tree ref +); + +variant_lists( + unique int id: @variant_list +); + +#keyset[id, index] +variant_list_variants( + int id: @variant_list ref, + int index: int ref, + int variant: @variant ref +); + +visibilities( + unique int id: @visibility +); + +#keyset[id] +visibility_visibility_inners( + int id: @visibility ref, + int visibility_inner: @visibility_inner ref +); + +visibility_inners( + unique int id: @visibility_inner +); + +#keyset[id] +visibility_inner_paths( + int id: @visibility_inner 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_for_binders( + int id: @where_pred ref, + int for_binder: @for_binder 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: @any_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 +); + +#keyset[id, index] +asm_clobber_abi_attrs( + int id: @asm_clobber_abi ref, + int index: int ref, + int attr: @any_attr ref +); + +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_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, index] +asm_operand_named_attrs( + int id: @asm_operand_named ref, + int index: int ref, + int attr: @any_attr 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 +); + +#keyset[id, index] +asm_options_list_attrs( + int id: @asm_options_list ref, + int index: int ref, + int attr: @any_attr 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 +); + +attrs( + unique int id: @attr +); + +#keyset[id] +attr_meta( + int id: @attr ref, + int meta: @meta 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: @any_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: @any_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: @any_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: @any_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_exprs( + unique int id: @call_expr +); + +#keyset[id] +call_expr_arg_lists( + int id: @call_expr ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +call_expr_attrs( + int id: @call_expr ref, + int index: int ref, + int attr: @any_attr ref +); + +#keyset[id] +call_expr_functions( + int id: @call_expr ref, + int function: @expr 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: @any_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 +); + +cfg_atoms( + unique int id: @cfg_atom +); + +cfg_attr_meta( + unique int id: @cfg_attr_meta +); + +#keyset[id] +cfg_attr_meta_cfg_predicates( + int id: @cfg_attr_meta ref, + int cfg_predicate: @cfg_predicate ref +); + +#keyset[id, index] +cfg_attr_meta_metas( + int id: @cfg_attr_meta ref, + int index: int ref, + int meta: @meta ref +); + +cfg_composites( + unique int id: @cfg_composite +); + +#keyset[id, index] +cfg_composite_cfg_predicates( + int id: @cfg_composite ref, + int index: int ref, + int cfg_predicate: @cfg_predicate ref +); + +cfg_meta( + unique int id: @cfg_meta +); + +#keyset[id] +cfg_meta_cfg_predicates( + int id: @cfg_meta ref, + int cfg_predicate: @cfg_predicate ref +); + +cfg_pred_exprs( + unique int id: @cfg_pred_expr +); + +#keyset[id] +cfg_pred_expr_cfg_predicates( + int id: @cfg_pred_expr ref, + int cfg_predicate: @cfg_predicate ref +); + +cfg_pred_pats( + unique int id: @cfg_pred_pat +); + +#keyset[id] +cfg_pred_pat_cfg_predicates( + int id: @cfg_pred_pat ref, + int cfg_predicate: @cfg_predicate ref +); + +closure_exprs( + unique int id: @closure_expr +); + +#keyset[id] +closure_expr_closure_bodies( + int id: @closure_expr ref, + int closure_body: @expr ref +); + +#keyset[id] +closure_expr_for_binders( + int id: @closure_expr ref, + int for_binder: @for_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: @any_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: @any_attr ref +); + +#keyset[id] +continue_expr_lifetimes( + int id: @continue_expr ref, + int lifetime: @lifetime ref +); + +deref_pats( + unique int id: @deref_pat +); + +#keyset[id] +deref_pat_pats( + int id: @deref_pat ref, + int pat: @pat ref +); + +doc_comments( + unique int id: @doc_comment +); + +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: @any_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_for_binders( + int id: @for_type_repr ref, + int for_binder: @for_binder 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: @any_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: @any_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: @any_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 +); + +include_bytes_exprs( + unique int id: @include_bytes_expr +); + +index_exprs( + unique int id: @index_expr +); + +#keyset[id, index] +index_expr_attrs( + int id: @index_expr ref, + int index: int ref, + int attr: @any_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 = + @asm_expr +| @assoc_item +| @extern_block +| @extern_crate +| @extern_item +| @impl +| @macro_def +| @macro_rules +| @module +| @trait +| @type_item +| @use +; + +#keyset[id] +item_attribute_macro_expansions( + int id: @item ref, + int attribute_macro_expansion: @macro_items ref +); + +key_value_meta( + unique int id: @key_value_meta +); + +#keyset[id] +key_value_meta_exprs( + int id: @key_value_meta ref, + int expr: @expr ref +); + +#keyset[id] +key_value_meta_paths( + int id: @key_value_meta ref, + int path: @path 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: @any_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: @any_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: @any_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: @any_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: @any_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 +); + +method_call_exprs( + unique int id: @method_call_expr +); + +#keyset[id] +method_call_expr_arg_lists( + int id: @method_call_expr ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +method_call_expr_attrs( + int id: @method_call_expr ref, + int index: int ref, + int attr: @any_attr ref +); + +#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 +); + +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 +); + +not_nulls( + unique int id: @not_null +); + +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: @any_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: @any_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_expr_base = + @path_expr +; + +path_meta( + unique int id: @path_meta +); + +#keyset[id] +path_meta_paths( + int id: @path_meta ref, + int path: @path ref +); + +path_pats( + unique int id: @path_pat +); + +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 +); + +pattern_type_reprs( + unique int id: @pattern_type_repr +); + +#keyset[id] +pattern_type_repr_pats( + int id: @pattern_type_repr ref, + int pat: @pat ref +); + +#keyset[id] +pattern_type_repr_type_reprs( + int id: @pattern_type_repr ref, + int type_repr: @type_repr 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: @any_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: @any_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: @any_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: @any_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: @any_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_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_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 +); + +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 +); + +token_tree_meta( + unique int id: @token_tree_meta +); + +#keyset[id] +token_tree_meta_paths( + int id: @token_tree_meta ref, + int path: @path ref +); + +#keyset[id] +token_tree_meta_token_trees( + int id: @token_tree_meta ref, + int token_tree: @token_tree 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: @any_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: @any_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_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 +); + +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: @any_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: @any_attr ref +); + +unsafe_meta( + unique int id: @unsafe_meta +); + +#keyset[id] +unsafe_meta_is_unsafe( + int id: @unsafe_meta ref +); + +#keyset[id] +unsafe_meta_meta( + int id: @unsafe_meta ref, + int meta: @meta ref +); + +variants( + unique int id: @variant +); + +#keyset[id, index] +variant_attrs( + int id: @variant ref, + int index: int ref, + int attr: @any_attr ref +); + +#keyset[id] +variant_const_args( + int id: @variant ref, + int const_arg: @const_arg 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: @any_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: @any_attr ref +); + +#keyset[id] +yield_expr_exprs( + int id: @yield_expr ref, + int expr: @expr 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: @any_attr ref +); + +#keyset[id, index] +asm_expr_templates( + int id: @asm_expr ref, + int index: int ref, + int template: @expr ref +); + +@assoc_item = + @const +| @function +| @macro_call +| @type_alias +; + +block_exprs( + unique int id: @block_expr +); + +#keyset[id, index] +block_expr_attrs( + int id: @block_expr ref, + int index: int ref, + int attr: @any_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_unsafe( + int id: @block_expr ref +); + +#keyset[id] +block_expr_stmt_lists( + int id: @block_expr ref, + int stmt_list: @stmt_list ref +); + +#keyset[id] +block_expr_try_block_modifiers( + int id: @block_expr ref, + int try_block_modifier: @try_block_modifier 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: @any_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: @any_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 +); + +@extern_item = + @function +| @macro_call +| @static +| @type_alias +; + +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: @any_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_trait_ties( + int id: @impl ref, + int trait_ty: @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_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: @any_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: @any_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 +); + +modules( + unique int id: @module +); + +#keyset[id, index] +module_attrs( + int id: @module ref, + int index: int ref, + int attr: @any_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: @any_attr 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: @any_attr ref +); + +#keyset[id] +trait_generic_param_lists( + int id: @trait ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +trait_impl_restrictions( + int id: @trait ref, + int impl_restriction: @impl_restriction 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 +); + +@type_item = + @enum +| @struct +| @union +; + +#keyset[id, index] +type_item_derive_macro_expansions( + int id: @type_item ref, + int index: int ref, + int derive_macro_expansion: @macro_items ref +); + +#keyset[id, index] +type_item_attrs( + int id: @type_item ref, + int index: int ref, + int attr: @any_attr ref +); + +#keyset[id] +type_item_generic_param_lists( + int id: @type_item ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +type_item_names( + int id: @type_item ref, + int name: @name ref +); + +#keyset[id] +type_item_visibilities( + int id: @type_item ref, + int visibility: @visibility ref +); + +#keyset[id] +type_item_where_clauses( + int id: @type_item 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: @any_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 +); + +consts( + unique int id: @const +); + +#keyset[id, index] +const_attrs( + int id: @const ref, + int index: int ref, + int attr: @any_attr ref +); + +#keyset[id] +const_bodies( + int id: @const ref, + int body: @expr ref +); + +#keyset[id] +const_generic_param_lists( + int id: @const ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +const_is_const( + int id: @const ref +); + +#keyset[id] +const_is_default( + int id: @const ref +); + +#keyset[id] +const_names( + int id: @const ref, + int name: @name ref +); + +#keyset[id] +const_type_reprs( + int id: @const ref, + int type_repr: @type_repr ref +); + +#keyset[id] +const_visibilities( + int id: @const ref, + int visibility: @visibility ref +); + +#keyset[id] +const_where_clauses( + int id: @const ref, + int where_clause: @where_clause ref +); + +#keyset[id] +const_has_implementation( + int id: @const ref +); + +enums( + unique int id: @enum +); + +#keyset[id] +enum_variant_lists( + int id: @enum ref, + int variant_list: @variant_list 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: @any_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 +); + +functions( + unique int id: @function +); + +#keyset[id] +function_abis( + int id: @function ref, + int abi: @abi ref +); + +#keyset[id] +function_function_bodies( + int id: @function ref, + int function_body: @block_expr ref +); + +#keyset[id] +function_generic_param_lists( + int id: @function ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +function_is_async( + int id: @function ref +); + +#keyset[id] +function_is_const( + int id: @function ref +); + +#keyset[id] +function_is_default( + int id: @function ref +); + +#keyset[id] +function_is_gen( + int id: @function ref +); + +#keyset[id] +function_is_unsafe( + int id: @function ref +); + +#keyset[id] +function_names( + int id: @function ref, + int name: @name ref +); + +#keyset[id] +function_ret_types( + int id: @function ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +function_visibilities( + int id: @function ref, + int visibility: @visibility ref +); + +#keyset[id] +function_where_clauses( + int id: @function ref, + int where_clause: @where_clause ref +); + +#keyset[id] +function_has_implementation( + int id: @function ref +); + +loop_exprs( + unique int id: @loop_expr +); + +#keyset[id, index] +loop_expr_attrs( + int id: @loop_expr ref, + int index: int ref, + int attr: @any_attr 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: @any_attr ref +); + +#keyset[id] +macro_call_paths( + int id: @macro_call ref, + int path: @path ref +); + +#keyset[id] +macro_call_token_trees( + int id: @macro_call ref, + int token_tree: @token_tree ref +); + +#keyset[id] +macro_call_macro_call_expansions( + int id: @macro_call ref, + int macro_call_expansion: @ast_node ref +); + +statics( + unique int id: @static +); + +#keyset[id, index] +static_attrs( + int id: @static ref, + int index: int ref, + int attr: @any_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] +struct_field_lists_( + int id: @struct ref, + int field_list: @field_list 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: @any_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] +union_struct_field_lists( + int id: @union ref, + int struct_field_list: @struct_field_list 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: @any_attr ref +); + +#keyset[id] +while_expr_conditions( + int id: @while_expr ref, + int condition: @expr ref +); diff --git a/rust/downgrades/7980434ec600632010dc150cdd85c23a95b922fb/upgrade.properties b/rust/downgrades/7980434ec600632010dc150cdd85c23a95b922fb/upgrade.properties new file mode 100644 index 000000000000..7bdefd6c94d2 --- /dev/null +++ b/rust/downgrades/7980434ec600632010dc150cdd85c23a95b922fb/upgrade.properties @@ -0,0 +1,5 @@ +description: Downgrade to a schema with parenthesized expression and pattern nodes +compatibility: partial + +macro_expr_attrs.rel: delete +struct_expr_attrs.rel: delete diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index 9a8a55c982e9..8edb95b72b86 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 c051c8526935e63353f69a0aa8f10c56255d80db6a97aa385d4143d74c9e2d47 c051c8526935e63353f69a0aa8f10c56255d80db6a97aa385d4143d74c9e2d47 +top.rs 5f0e554779a819f9163edf611cb7420ec588986f77edc97c65fa01de726c18e1 5f0e554779a819f9163edf611cb7420ec588986f77edc97c65fa01de726c18e1 diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index a46cc31744a3..77c33e218ab7 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -7017,6 +7017,7 @@ impl From> for trap::Label { #[derive(Debug)] pub struct MacroExpr { pub id: trap::TrapId, + pub attrs: Vec>, pub macro_call: Option>, } @@ -7027,6 +7028,9 @@ impl trap::TrapEntry for MacroExpr { fn emit(self, id: trap::Label, out: &mut trap::Writer) { out.add_tuple("macro_exprs", vec![id.into()]); + for (i, v) in self.attrs.into_iter().enumerate() { + out.add_tuple("macro_expr_attrs", vec![id.into(), i.into(), v.into()]); + } if let Some(v) = self.macro_call { out.add_tuple("macro_expr_macro_calls", vec![id.into(), v.into()]); } @@ -7695,128 +7699,6 @@ impl From> for trap::Label { } } -#[derive(Debug)] -pub struct ParenExpr { - pub id: trap::TrapId, - pub attrs: Vec>, - pub expr: Option>, -} - -impl trap::TrapEntry for ParenExpr { - fn extract_id(&mut self) -> trap::TrapId { - std::mem::replace(&mut self.id, trap::TrapId::Star) - } - - fn emit(self, id: trap::Label, out: &mut trap::Writer) { - out.add_tuple("paren_exprs", vec![id.into()]); - for (i, v) in self.attrs.into_iter().enumerate() { - out.add_tuple("paren_expr_attrs", vec![id.into(), i.into(), v.into()]); - } - if let Some(v) = self.expr { - out.add_tuple("paren_expr_exprs", vec![id.into(), v.into()]); - } - } -} - -impl trap::TrapClass for ParenExpr { - fn class_name() -> &'static str { "ParenExpr" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme ParenExpr is a subclass of Expr - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme ParenExpr is a subclass of AstNode - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme ParenExpr is a subclass of Locatable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme ParenExpr is a subclass of Element - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -#[derive(Debug)] -pub struct ParenPat { - pub id: trap::TrapId, - pub pat: Option>, -} - -impl trap::TrapEntry for ParenPat { - fn extract_id(&mut self) -> trap::TrapId { - std::mem::replace(&mut self.id, trap::TrapId::Star) - } - - fn emit(self, id: trap::Label, out: &mut trap::Writer) { - out.add_tuple("paren_pats", vec![id.into()]); - if let Some(v) = self.pat { - out.add_tuple("paren_pat_pats", vec![id.into(), v.into()]); - } - } -} - -impl trap::TrapClass for ParenPat { - fn class_name() -> &'static str { "ParenPat" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme ParenPat is a subclass of Pat - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme ParenPat is a subclass of AstNode - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme ParenPat is a subclass of Locatable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme ParenPat is a subclass of Element - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct ParenTypeRepr { pub id: trap::TrapId, @@ -8970,6 +8852,7 @@ impl From> for trap::Label { pub struct StructExpr { pub id: trap::TrapId, pub path: Option>, + pub attrs: Vec>, pub struct_expr_field_list: Option>, } @@ -8983,6 +8866,9 @@ impl trap::TrapEntry for StructExpr { if let Some(v) = self.path { out.add_tuple("path_ast_node_paths", vec![id.into(), v.into()]); } + for (i, v) in self.attrs.into_iter().enumerate() { + out.add_tuple("struct_expr_attrs", vec![id.into(), i.into(), v.into()]); + } if let Some(v) = self.struct_expr_field_list { out.add_tuple("struct_expr_struct_expr_field_lists", vec![id.into(), v.into()]); } diff --git a/rust/extractor/src/translate/base.rs b/rust/extractor/src/translate/base.rs index 05f838cfbc3b..2dd7c358a2f3 100644 --- a/rust/extractor/src/translate/base.rs +++ b/rust/extractor/src/translate/base.rs @@ -20,6 +20,7 @@ use ra_ap_syntax::{ use ra_ap_syntax_bridge::{ DocCommentDesugarMode, syntax_node_to_token_tree, token_tree_to_syntax_node, }; +use std::collections::HashMap; use std::path::{Path, PathBuf}; impl Emission for Translator<'_> { @@ -132,6 +133,7 @@ pub struct Translator<'db> { pub semantics: Option<&'db Semantics<'db, RootDatabase>>, source_kind: SourceKind, pub(crate) macro_context_depth: usize, + parenthesized_expr_attrs: HashMap>>, diagnostic_count: usize, /// When emitting a reconstructed built-in derive expansion, holds the span map of the /// synthesized syntax tree. Those nodes are not registered in the semantics cache, so @@ -162,6 +164,7 @@ impl<'db> Translator<'db> { semantics: semantic_info.map(|i| i.semantics), source_kind, macro_context_depth: 0, + parenthesized_expr_attrs: HashMap::new(), diagnostic_count: 0, builtin_derive_span_map: None, } @@ -523,6 +526,55 @@ impl<'db> Translator<'db> { }) } + pub(crate) fn emit_parenthesized_expr( + &mut self, + node: &ast::ParenExpr, + ) -> Option> { + if self.should_be_excluded(node) { + return None; + } + + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend( + node.attrs_with_doc() + .filter_map(|attr| self.emit_any_attr(&attr)), + ); + let result = node.expr().and_then(|expr| { + let syntax = expr.syntax().clone(); + self.parenthesized_expr_attrs + .entry(syntax.clone()) + .or_default() + .extend(attrs); + let result = self.emit_expr(&expr); + self.parenthesized_expr_attrs.remove(&syntax); + result + }); + if let Some(label) = result { + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); + } + result + } + + pub(crate) fn emit_parenthesized_pat( + &mut self, + node: &ast::ParenPat, + ) -> Option> { + let result = node.pat().and_then(|pat| self.emit_pat(&pat)); + if let Some(label) = result { + self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); + } + result + } + + pub(crate) fn take_parenthesized_expr_attrs( + &mut self, + node: &SyntaxNode, + ) -> Vec> { + self.parenthesized_expr_attrs + .remove(node) + .unwrap_or_default() + } + pub(crate) fn should_skip_bodies(&self) -> bool { self.source_kind == SourceKind::Library } diff --git a/rust/extractor/src/translate/generated.rs b/rust/extractor/src/translate/generated.rs index 0cf7a9e61c8f..511bc3e6d77b 100644 --- a/rust/extractor/src/translate/generated.rs +++ b/rust/extractor/src/translate/generated.rs @@ -104,7 +104,7 @@ impl Translator<'_> { ast::Expr::MatchExpr(inner) => self.emit_match_expr(inner).map(Into::into), ast::Expr::MethodCallExpr(inner) => self.emit_method_call_expr(inner).map(Into::into), ast::Expr::OffsetOfExpr(inner) => self.emit_offset_of_expr(inner).map(Into::into), - ast::Expr::ParenExpr(inner) => self.emit_paren_expr(inner).map(Into::into), + ast::Expr::ParenExpr(inner) => self.emit_parenthesized_expr(inner), ast::Expr::PathExpr(inner) => self.emit_path_expr(inner).map(Into::into), ast::Expr::PrefixExpr(inner) => self.emit_prefix_expr(inner).map(Into::into), ast::Expr::RangeExpr(inner) => self.emit_range_expr(inner).map(Into::into), @@ -201,7 +201,7 @@ impl Translator<'_> { ast::Pat::MacroPat(inner) => self.emit_macro_pat(inner).map(Into::into), ast::Pat::NotNull(inner) => self.emit_not_null(inner).map(Into::into), ast::Pat::OrPat(inner) => self.emit_or_pat(inner).map(Into::into), - ast::Pat::ParenPat(inner) => self.emit_paren_pat(inner).map(Into::into), + ast::Pat::ParenPat(inner) => self.emit_parenthesized_pat(inner), ast::Pat::PathPat(inner) => self.emit_path_pat(inner).map(Into::into), ast::Pat::RangePat(inner) => self.emit_range_pat(inner).map(Into::into), ast::Pat::RecordPat(inner) => self.emit_record_pat(inner).map(Into::into), @@ -308,10 +308,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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 { @@ -346,10 +344,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let label = self.trap.emit(generated::AsmClobberAbi { id: TrapId::Star, attrs, @@ -389,14 +385,12 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let asm_pieces = node .asm_pieces() .filter_map(|x| self.emit_asm_piece(&x)) .collect(); - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_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, @@ -443,11 +437,9 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let asm_operand = node.asm_operand().and_then(|x| self.emit_asm_operand(&x)); - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); let name = node.name().and_then(|x| self.emit_name(&x)); let label = self.trap.emit(generated::AsmOperandNamed { id: TrapId::Star, @@ -479,14 +471,12 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let asm_options = node .asm_options() .filter_map(|x| self.emit_asm_option(&x)) .collect(); - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); let label = self.trap.emit(generated::AsmOptionsList { id: TrapId::Star, asm_options, @@ -545,14 +535,12 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let assoc_items = node .assoc_items() .filter_map(|x| self.emit_assoc_item(&x)) .collect(); - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); let label = self.trap.emit(generated::AssocItemList { id: TrapId::Star, assoc_items, @@ -612,10 +600,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let expr = node.expr().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::AwaitExpr { id: TrapId::Star, @@ -633,10 +619,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let expr = node.expr().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::BecomeExpr { id: TrapId::Star, @@ -654,10 +638,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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)); @@ -679,10 +661,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&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(); @@ -726,10 +706,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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 { @@ -749,11 +727,9 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let arg_list = node.arg_list().and_then(|x| self.emit_arg_list(&x)); - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); let function = node.expr().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::CallExpr { id: TrapId::Star, @@ -772,10 +748,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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 { @@ -882,10 +856,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let closure_body = node.body().and_then(|x| self.emit_expr(&x)); let for_binder = node.for_binder().and_then(|x| self.emit_for_binder(&x)); let is_async = node.async_token().is_some(); @@ -919,10 +891,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let body = if self.should_skip_bodies() { None } else { @@ -989,10 +959,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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)); @@ -1016,10 +984,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(&x)); let label = self.trap.emit(generated::ContinueExpr { id: TrapId::Star, @@ -1074,10 +1040,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let generic_param_list = node .generic_param_list() .and_then(|x| self.emit_generic_param_list(&x)); @@ -1119,11 +1083,9 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let abi = node.abi().and_then(|x| self.emit_abi(&x)); - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); let extern_item_list = node .extern_item_list() .and_then(|x| self.emit_extern_item_list(&x)); @@ -1146,10 +1108,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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)); @@ -1171,10 +1131,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let extern_items = node .extern_items() .filter_map(|x| self.emit_extern_item(&x)) @@ -1195,10 +1153,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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 { @@ -1218,11 +1174,9 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let abi = node.abi().and_then(|x| self.emit_abi(&x)); - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); let function_body = if self.should_skip_bodies() { None } else { @@ -1308,10 +1262,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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)); @@ -1365,14 +1317,12 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let args = node .args() .filter_map(|x| self.emit_format_args_arg(&x)) .collect(); - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); let template = node.template().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::FormatArgsExpr { id: TrapId::Star, @@ -1423,10 +1373,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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)); @@ -1447,10 +1395,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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)); @@ -1469,13 +1415,11 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let assoc_item_list = node .assoc_item_list() .and_then(|x| self.emit_assoc_item_list(&x)); - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); let generic_param_list = node .generic_param_list() .and_then(|x| self.emit_generic_param_list(&x)); @@ -1551,10 +1495,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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 { @@ -1585,10 +1527,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let items = node.items().filter_map(|x| self.emit_item(&x)).collect(); let label = self.trap.emit(generated::ItemList { id: TrapId::Star, @@ -1644,10 +1584,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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 { @@ -1667,10 +1605,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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)); @@ -1720,10 +1656,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(&x)); let type_bound_list = node .type_bound_list() @@ -1745,10 +1679,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let text_value = node.try_get_text(); let label = self.trap.emit(generated::LiteralExpr { id: TrapId::Star, @@ -1779,10 +1711,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&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::LoopExpr { @@ -1805,10 +1735,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let path = node.path().and_then(|x| self.emit_path(&x)); let token_tree = if self.should_skip_bodies() { None @@ -1833,15 +1761,13 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let args = if self.should_skip_bodies() { None } else { node.args().and_then(|x| self.emit_token_tree(&x)) }; - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); let body = if self.should_skip_bodies() { None } else { @@ -1865,9 +1791,11 @@ impl Translator<'_> { &mut self, node: &ast::MacroExpr, ) -> Option> { + let attrs = self.take_parenthesized_expr_attrs(node.syntax()); let macro_call = node.macro_call().and_then(|x| self.emit_macro_call(&x)); let label = self.trap.emit(generated::MacroExpr { id: TrapId::Star, + attrs, macro_call, }); self.emit_location(label, node); @@ -1907,10 +1835,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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)); @@ -1945,10 +1871,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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)); @@ -1970,14 +1894,12 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let arms = node .arms() .filter_map(|x| self.emit_match_arm(&x)) .collect(); - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); let label = self.trap.emit(generated::MatchArmList { id: TrapId::Star, arms, @@ -1994,10 +1916,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let scrutinee = node.expr().and_then(|x| self.emit_expr(&x)); let match_arm_list = node .match_arm_list() @@ -2032,11 +1952,9 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let arg_list = node.arg_list().and_then(|x| self.emit_arg_list(&x)); - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); let generic_arg_list = node .generic_arg_list() .and_then(|x| self.emit_generic_arg_list(&x)); @@ -2058,10 +1976,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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)); @@ -2143,10 +2059,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let fields = node .fields() .filter_map(|x| self.emit_name_ref(&x)) @@ -2176,10 +2090,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let pat = if self.should_skip_bodies() { None } else { @@ -2211,40 +2123,6 @@ impl Translator<'_> { 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_with_doc() - .filter_map(|x| self.emit_any_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_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)); - let label = self.trap.emit(generated::ParenPat { - id: TrapId::Star, - pat, - }); - self.emit_location(label, node); - self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); - Some(label) - } pub(crate) fn emit_paren_type( &mut self, node: &ast::ParenType, @@ -2293,10 +2171,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let path = node.path().and_then(|x| self.emit_path(&x)); let label = self.trap.emit(generated::PathExpr { id: TrapId::Star, @@ -2399,10 +2275,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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 { @@ -2439,10 +2313,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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)); @@ -2478,12 +2350,14 @@ impl Translator<'_> { &mut self, node: &ast::RecordExpr, ) -> Option> { + let attrs = self.take_parenthesized_expr_attrs(node.syntax()); 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, + attrs, path, struct_expr_field_list, }); @@ -2498,10 +2372,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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 { @@ -2521,10 +2393,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let fields = node .fields() .filter_map(|x| self.emit_record_expr_field(&x)) @@ -2547,10 +2417,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let default_val = node.default_val().and_then(|x| self.emit_const_arg(&x)); let is_unsafe = node.unsafe_token().is_some(); let mut_restriction = node @@ -2613,10 +2481,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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 { @@ -2654,10 +2520,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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(); @@ -2720,10 +2584,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let label = self.trap.emit(generated::RestPat { id: TrapId::Star, attrs, @@ -2752,10 +2614,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let expr = node.expr().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::ReturnExpr { id: TrapId::Star, @@ -2784,10 +2644,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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)); @@ -2839,10 +2697,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let items = node.items().filter_map(|x| self.emit_item(&x)).collect(); let label = self.trap.emit(generated::SourceFile { id: TrapId::Star, @@ -2857,10 +2713,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let body = if self.should_skip_bodies() { None } else { @@ -2894,10 +2748,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let statements = node .statements() .filter_map(|x| self.emit_stmt(&x)) @@ -2920,10 +2772,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let field_list = node.field_list().and_then(|x| self.emit_field_list(&x)); let generic_param_list = node .generic_param_list() @@ -2973,13 +2823,11 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let assoc_item_list = node .assoc_item_list() .and_then(|x| self.emit_assoc_item_list(&x)); - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); let generic_param_list = node .generic_param_list() .and_then(|x| self.emit_generic_param_list(&x)); @@ -3033,10 +2881,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let expr = node.expr().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::TryExpr { id: TrapId::Star, @@ -3054,10 +2900,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let fields = node.fields().filter_map(|x| self.emit_expr(&x)).collect(); let label = self.trap.emit(generated::TupleExpr { id: TrapId::Star, @@ -3075,10 +2919,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let mut_restriction = node .mut_restriction() .and_then(|x| self.emit_mut_restriction(&x)); @@ -3159,10 +3001,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let generic_param_list = node .generic_param_list() .and_then(|x| self.emit_generic_param_list(&x)); @@ -3250,10 +3090,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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 @@ -3277,10 +3115,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let label = self.trap.emit(generated::UnderscoreExpr { id: TrapId::Star, attrs, @@ -3296,10 +3132,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let generic_param_list = node .generic_param_list() .and_then(|x| self.emit_generic_param_list(&x)); @@ -3342,10 +3176,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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 { @@ -3418,10 +3250,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let const_arg = node.const_arg().and_then(|x| self.emit_const_arg(&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)); @@ -3526,10 +3356,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); 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)); @@ -3560,10 +3388,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let expr = node.expr().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::YeetExpr { id: TrapId::Star, @@ -3581,10 +3407,8 @@ impl Translator<'_> { if self.should_be_excluded(node) { return None; } - let attrs = node - .attrs_with_doc() - .filter_map(|x| self.emit_any_attr(&x)) - .collect(); + let mut attrs = self.take_parenthesized_expr_attrs(node.syntax()); + attrs.extend(node.attrs_with_doc().filter_map(|x| self.emit_any_attr(&x))); let expr = node.expr().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::YieldExpr { id: TrapId::Star, diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 0cdb016c2d16..54dac41504d7 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -1,4 +1,4 @@ -lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll 22e459877a319214e6ba4eb1ed1145df2adbb4b217494e6a12209f2960f87e75 79eb67e02dbece2df4b9008d76aa34bb807832cb1ff9bc32d3a5dff61cfc3465 +lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll ec38e8864833e5dc3b4bc5f507dcc6bcf2b6a5c629b0d734980d690fb8174666 5dbceaad3a76d9032dd650f599b66528173ab8fc6f2e6c67eada1ed8f668ea59 lib/codeql/rust/elements/Abi.qll 485a2e79f6f7bfd1c02a6e795a71e62dede3c3e150149d5f8f18b761253b7208 6159ba175e7ead0dd2e3f2788f49516c306ee11b1a443bd4bdc00b7017d559bd lib/codeql/rust/elements/Addressable.qll 13011bfd2e1556694c3d440cc34af8527da4df49ad92b62f2939d3699ff2cea5 ddb25935f7553a1a384b1abe2e4b4fa90ab50b952dadec32fd867afcb054f4be lib/codeql/rust/elements/AnyAttr.qll 31536ed6ba02c538ff192089dc40c6f984ce808406f0522eed49539b9ae8a0da c6df96292f0f96415af4e8b3736e870475c21829ab08a8fe56d221ee4bb4cbd7 @@ -103,7 +103,7 @@ lib/codeql/rust/elements/LoopExpr.qll c646d912c459cc3e80e3836b2282ffa0371a374dca lib/codeql/rust/elements/LoopingExpr.qll 7ad7d4bbfd05adc0bb9b4ca90ff3377b8298121ca5360ffb45d5a7a1e20fe37a 964168b2045ee9bad827bba53f10a64d649b3513f2d1e3c17a1b1f11d0fc7f3a lib/codeql/rust/elements/MacroCall.qll ce9b38c0a2c693febe769ecfcfea1b89efef044e4d37f3e9878cc8ed105538da 4ebd0e15a79a4917bf7b5b9551dd0c7a026e0a84a4873d33895869d3b4fd1317 lib/codeql/rust/elements/MacroDef.qll f8628d41adac93bfee660905101a9382f16537a16891f7c1e0e8c553ae4f51c6 0ee343f5cdaf94b355b4061c6e56ede21e131aa6c647338c1102fe4e6e70d63c -lib/codeql/rust/elements/MacroExpr.qll 640554f4964def19936a16ce88a03fb12f74ec2bcfe38b88d32742b79f85d909 a284fb66e012664a33a4e9c8fd3e38d3ffd588fccd6b16b02270da55fc025f7a +lib/codeql/rust/elements/MacroExpr.qll e7ceece69e06d97fe98b2135843dc46c784eb7f7d4997bf8424444784148ec36 8a8dae1b3dbd9f1d84f9274bb85d71dba8739a2e75fb869cd2106b157523ad29 lib/codeql/rust/elements/MacroItems.qll f2d80ff23634ac6bc3e96e8d73154587f9d24edb56654b5c0ae426124d2709ea f794f751b77fc50d7cc3069c93c22dd3a479182edce15c1b22c8da31d2e30a12 lib/codeql/rust/elements/MacroPat.qll 8d9384d7e000add77ad9955c142800f71a993262b7923b3a4466eaf3a17ebed7 1561e5597c8dd6b6359dc7f0a01e3afe6568bf0aa4e9cc865469d5308c270b0e lib/codeql/rust/elements/MacroRules.qll 6886c8cbc08960c93321bc99f9481a5f5a9748ed4d8a285b67cc59b0b06313ec 800e3a899897d60131b17b98c51553d667983ed8ec6629ba2c8110f9838975af @@ -126,8 +126,6 @@ lib/codeql/rust/elements/OrPat.qll 408b71f51edbfc79bf93b86fb058d01fa79caf2ebfeef lib/codeql/rust/elements/Param.qll d0c0a427c003bbbacaeb0c2f4566f35b997ad0bca4d49f97b50c3a4bd1ddbd71 e654a17dfcb7aaeb589e7944c38f591c4cf922ebceb834071bcb9f9165ee48be lib/codeql/rust/elements/ParamBase.qll 7a728bda96be0b146e91e2abd54f9b4d4d48633c3406579ee6f74db64c77c6c5 ce7a62bf9ffcc0c887b9cbdb5eb991aaa2da22bf908729c795c684852dbb0a64 lib/codeql/rust/elements/ParamList.qll 08cba1bf455e333e5a96a321cd48e7e7276406912ec0589bf20d09cf54ede390 fb3777b5a19e18ef0f5c90b246b61ac94568db2dd8e3c44fbe6b4b8cc15cc0cf -lib/codeql/rust/elements/ParenExpr.qll 39623f3b0ace310cba5f7a018d3e54d86d2bf391ff8b2bb0c49c17b022f9abd7 c857d29e8712667cd0e9d85400cdbeec043d3f12218a214ce00e4cdf0f52256f -lib/codeql/rust/elements/ParenPat.qll 9359011e3fdf6a40396625c361f644e8c91f4d52570097e813817ed53196808e 34ed1a87043b25da439d6c9973f8b5461f4f6c11d233f8753ff76157628c66b8 lib/codeql/rust/elements/ParenTypeRepr.qll 2388b6c663b2d02c834592c5da5cafac71baa55d4a0eaaca341e13f52dd0e14d 029454c18859a639c4b87825932e5dfe8026cec6ab87adaa4a0d464149e51b07 lib/codeql/rust/elements/ParenthesizedArgList.qll aa3be48d2f8b5cec56db3866fb7d4e0cd97787e9123e2d947912eb8155bf372b 32790971728c9ae2f3d59155d46283aaf4f08238e47bb028a1f20a6d3a734b98 lib/codeql/rust/elements/Pat.qll 56211c5cb4709e7c12a2bfd2da5e413a451672d99e23a8386c08ad0b999fd45c b1b1893a13a75c4f0390f7e2a14ee98a46f067cfdc991a8d43adc82497d20aff @@ -160,7 +158,7 @@ lib/codeql/rust/elements/Static.qll 5000eac308407c62bd416dde284dcba421070b8498ff lib/codeql/rust/elements/Stmt.qll 532b12973037301246daf7d8c0177f734202f43d9261c7a4ca6f5080eea8ca64 b838643c4f2b4623d2c816cddad0e68ca3e11f2879ab7beaece46f489ec4b1f3 lib/codeql/rust/elements/StmtList.qll c4f35907b0fcdb08e7b0ba020ec74542883c1ad0b91447eacb59f7da9053e870 4051c26397c48f8e76dd0eedd46468eb014b81fec917ca905749101e3a068b9a lib/codeql/rust/elements/Struct.qll e60a859c0112b7a7ce4a4752e936e0d58f413ceb895db25d77ece2fcc9d8881c 8bf69f80bb9ef54644d9540b8be7d331f73ba362817508489ff91619718bee6b -lib/codeql/rust/elements/StructExpr.qll 84f384ef74c723796e514186037a91dd9666556f62c717f133ce22e9dda4425f 176497835252cfdfe110e58ebde9fbde553d03e44e07d3e4d8041e835dbf31b9 +lib/codeql/rust/elements/StructExpr.qll 98051ac5463576dc2ca5af20ab4c7bd38795ebd1b29b7facb4453a516103d282 ec1e010101dc4f9787234587e9e6f3b0cfdcf72488337cdd3d4676b84a8fe97a lib/codeql/rust/elements/StructExprField.qll 762e7d22ea56ab685267fd3a71c3a06c2e130bdc3243ae348390f478a29156e2 251df91dac242f37b628b0a13aaffb7da7b7345a418e4031b611cbb543ee04b3 lib/codeql/rust/elements/StructExprFieldList.qll d882eff7a43a2efaac04cb9be8c149a7735aaf833d43fc95b9913159fa76227f 3bff7111c861fa66413d294078d085f3b2cc326c78104f3102bba6834b01084b lib/codeql/rust/elements/StructField.qll 85254d9db0b012cd356fa6d94666b501d73fdba23725a80856d64afaaea718c2 f4c9e9195a3e99afebe38c7f84621963cde643135c4ac17936e381f83f61d378 @@ -380,8 +378,6 @@ lib/codeql/rust/elements/internal/OffsetOfExprImpl.qll e52d4596068cc54719438121f lib/codeql/rust/elements/internal/OrPatConstructor.qll 4ef583e07298487c0c4c6d7c76ffcc04b1e5fe58aba0c1da3e2c8446a9e0c92b 980a6bd176ae5e5b11c134569910c5468ba91f480982d846e222d031a6a05f1a lib/codeql/rust/elements/internal/ParamConstructor.qll b98a2d8969f289fdcc8c0fb11cbd19a3b0c71be038c4a74f5988295a2bae52f0 77d81b31064167945b79b19d9697b57ca24462c3a7cc19e462c4693ce87db532 lib/codeql/rust/elements/internal/ParamListConstructor.qll 3123142ab3cab46fb53d7f3eff6ba2d3ff7a45b78839a53dc1979a9c6a54920e 165f3d777ea257cfcf142cc4ba9a0ebcd1902eb99842b8a6657c87087f3df6fe -lib/codeql/rust/elements/internal/ParenExprConstructor.qll 104b67dc3fd53ab52e2a42ffde37f3a3a50647aa7bf35df9ba9528e9670da210 d1f5937756e87a477710c61698d141cdad0ccce8b07ecb51bab00330a1ca9835 -lib/codeql/rust/elements/internal/ParenPatConstructor.qll 9aea3c3b677755177d85c63e20234c234f530a16db20ab699de05ca3f1b59787 29f24aed0d880629a53b30550467ade09a0a778dbf88891769c1e11b0b239f98 lib/codeql/rust/elements/internal/ParenTypeReprConstructor.qll b3825399f90c8546c254df1f3285fe6053b8137e4705978de50017be941c9f42 696fa20ce5bd4731566b88c8ea13df836627354d37cc9d39514d89d8fb730200 lib/codeql/rust/elements/internal/ParenthesizedArgListConstructor.qll 67f49d376e87a58d7b22eb6e8f90c5b3d295a732be657b27ea6b86835a0ac327 6549e4f5bccb2d29dfeb207625f4d940344ac1bb4c7a7ae007a8eb1c4c985da0 lib/codeql/rust/elements/internal/ParenthesizedArgListImpl.qll c885ff2903fcbe89540aff643d416e8d0dd5dcf1f7a77f48b9952f4679f8c92b 7e5d8e6d77999f02fe4267ceac6892b2063b1252cf5fa3bceab7898c6bad5c54 @@ -600,7 +596,7 @@ lib/codeql/rust/elements/internal/generated/LoopExpr.qll 99d0e55c574ea81ff2433bb lib/codeql/rust/elements/internal/generated/LoopingExpr.qll 0792c38d84b8c68114da2bbdfef32ef803b696cb0fd06e10e101756d5c46976c 111fe961fad512722006323c3f2a075fddf59bd3eb5c7afc349835fcec8eb102 lib/codeql/rust/elements/internal/generated/MacroCall.qll a5dec6bd770884845b41539c61df8084a1ea24255e68077db8506275c76c9c97 292a5add471407e33d2a449f7b52b92db09a7148596437dc1d152deccd41095f lib/codeql/rust/elements/internal/generated/MacroDef.qll 9f57e22747469747eaf6d4b7e93e3e50abc26a11cac143b1c7bfc623dfa54050 ff5fc2fed898ac98af7d0bbe701e6c03d627d2a4b54e98e015cb64ed21f2afd8 -lib/codeql/rust/elements/internal/generated/MacroExpr.qll e36596803028408a76591e2ed6309aea8e5740105d6924029b1e74a6bf60efa0 34aa8c478f72c415a601d672c95f4e26384225a61e1f07b8f08d63cb4e4dc9d4 +lib/codeql/rust/elements/internal/generated/MacroExpr.qll b9256934abfd59f41a936e6f71c24cc70e0bc5dc694d8e26492a199ea02bb8dd 3010f338226f7154ef8e0044a530ca6cd8cda7bee3ccb717080ea32f25b13a07 lib/codeql/rust/elements/internal/generated/MacroItems.qll e641c26572c1b517b8f068cd76737b5f92f89f5015763e379e39d86b8f6440cc 4055ba4210bd96a4840601a260b6db50b9598eeef8a7650e5350fa28f84341b4 lib/codeql/rust/elements/internal/generated/MacroPat.qll 5c044c3cfc984e71902b7326c1f8b06a629863c80b61c0574022e905dfaa5f35 d12f30547b3eb264d0baa2ab284b394221f6c5363dbe6b2fe51e3bb557e1d057 lib/codeql/rust/elements/internal/generated/MacroRules.qll cd528d00634ae4fb4d2b030393f50bd6fd73c6165ada1bb6fc60c5dafb259a22 f05bf6bd8e05d411c98b440b333539acfaf9c37fd7ea03757fe7719f444de0fe @@ -624,10 +620,8 @@ lib/codeql/rust/elements/internal/generated/OrPat.qll 0dc6bd6ada8d11b7f708f71c82 lib/codeql/rust/elements/internal/generated/Param.qll 19f03396897c1b7b494df2d0e9677c1a2fc6d4ae190e64e5be51145aba9de2e2 3d63116e70457226ea7488a9f6ed9c7cea3233b0e5cab443db9566c17b125e80 lib/codeql/rust/elements/internal/generated/ParamBase.qll 1923276ebdc2dee2a469c905b7816910bbfd32a5938bd363f500dd5c780899a8 5058ee451c0e5c3030b9673130d7766e16a4cdd6e02002a3abb67a79a41dea6c lib/codeql/rust/elements/internal/generated/ParamList.qll d8e73957983491302faa560ba0756f125dec0b310d59def54d4763408e1b81c9 701fa4e1364478617b2f73c9d86bdba6f4a6c04f58208b9ed35a388f11e11938 -lib/codeql/rust/elements/internal/generated/ParenExpr.qll b978629328318874e4e7044dc0ed07ee44f96f426e06848e7a3ea499f2b99f9a 84a1ba59e38460bd16d82881f409084ea35fa55f2f1c52296c510abf3694076f -lib/codeql/rust/elements/internal/generated/ParenPat.qll 24f9dc7fce75827d6fddb856cd48f80168143151b27295c0bab6db5a06567a09 ebadbc6f5498e9ed754b39893ce0763840409a0721036a25b56e1ead7dcc09aa lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll 03f5c5b96a37adeb845352d7fcea3e098da9050e534972d14ac0f70d60a2d776 ed3d6e5d02086523087adebce4e89e35461eb95f2a66d1d4100fe23fc691b126 -lib/codeql/rust/elements/internal/generated/ParentChild.qll 537a7b27ad1e626ce858460a2c843d0721abd81eb276a26bab66c6f650f26a0e 31c41a4ea3b32d391c6fad3d4d9332e7c4b5fdf30eea5565e1005868358a6aef +lib/codeql/rust/elements/internal/generated/ParentChild.qll 89ddacd72c3c92178682f23e8e8caf48fe4bd18d8b4cef890bfdb367e156a1bb a8a75e4c1e25266a4857ad6ea93bf4c0971bb8ae246881d8bfb5501a9f6a0632 lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll 4e85b4bcabdbde71602d557fa0dd5ccbab09d2360d2bb470384cb85437e1611f 688af26f360655ee6454fa45b3169cc9db6ed46d8f58c2470111703e1e7a117f lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll 9b12afb46fc5a9ad3a811b05472621bbecccb900c47504feb7f29d96b28421ca bcacbffc36fb3e0c9b26523b5963af0ffa9fd6b19f00a2a31bdb2316071546bd @@ -644,7 +638,7 @@ lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll d7a400b238d7edf2b465 lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f lib/codeql/rust/elements/internal/generated/RangeExpr.qll 7a1ff277e5e8a6731d6cb664a09da07cce2bd6ca3541008b381cd5a5a636a15f 2a9d51363a1a55a080d39575c623ba11cb0f259c04f40351fbb5b89358b31aa6 lib/codeql/rust/elements/internal/generated/RangePat.qll a0c805eb31a773e16806384bd11592563c61b720e694bd444b93c28b5cf00d65 4b82088a62e7e5027f5930a697a18b5d4fd2a831a7bb6123d1b3f8ff4a9255ea -lib/codeql/rust/elements/internal/generated/Raw.qll ee4cce08f20a9049128fcaade49d0832a878e41090af41bd5831140e0336b381 01b8e1f4cbc05f49e4abfcdd7481ad9524b3f3d500c9da11529306ae1cd3071b +lib/codeql/rust/elements/internal/generated/Raw.qll 2059c5d19a9f0241ad81491f29830bae92ad32ca10bcaef3c97e82e65e6d3a23 d89c634e3374828ab2deeb5635ca2a5935fef2df693138dbf6cda522a5468c38 lib/codeql/rust/elements/internal/generated/RefExpr.qll c7b711ac05f7fe8fb97b81b09e794e7756141570265e3a995e40e7c79bb2b49d 11b572508c010e79a7edb0f1b349a4ea3e2fc68f6d7bc3f38fbeacf0c91d68e2 lib/codeql/rust/elements/internal/generated/RefPat.qll 456ede39837463ee22a630ec7ab6c8630d3664a8ea206fcc6e4f199e92fa564c 5622062765f32930465ba6b170e986706f159f6070f48adee3c20e24e8df4e05 lib/codeql/rust/elements/internal/generated/RefTypeRepr.qll fbab8bae4d3eac10338a9bc5743f3ac9c0feab11107d6d28825f4e97bcd59bad 224f6aec466ddcde526ce8df23d2f925887232b462730af078815a68b47c133d @@ -661,7 +655,7 @@ lib/codeql/rust/elements/internal/generated/Static.qll e5e0c498cc2f484f2f34fc763 lib/codeql/rust/elements/internal/generated/Stmt.qll 8473ff532dd5cc9d7decaddcd174b94d610f6ca0aec8e473cc051dad9f3db917 6ef7d2b5237c2dbdcacbf7d8b39109d4dc100229f2b28b5c9e3e4fbf673ba72b lib/codeql/rust/elements/internal/generated/StmtList.qll 6825e8b8b04e001ec8ae1cee416ea7eb240f306d2d586a1648395ec520e620d6 1d65eab64a80356d8a97412a21504df004cc87a71899a85a09be92843ffa2c77 lib/codeql/rust/elements/internal/generated/Struct.qll 56775b98f793c108bd0eb8f35dbbc4983c170138e92c7378c24f45d2e612ca39 7bd83f2686f2f7a6b55b82156028c1951fde4c3ac9fc0248b1bb28f35b949fd4 -lib/codeql/rust/elements/internal/generated/StructExpr.qll e77702890561102af38f52d836729e82569c964f8d4c7e680b27992c1ff0f141 23dc51f68107ab0e5c9dd88a6bcc85bb66e8e0f4064cb4d416f50f2ba5db698c +lib/codeql/rust/elements/internal/generated/StructExpr.qll af9000c85de0a41c35060a391b4370849e6aedb91b28cc2132c6f61de0dcfe26 37baeef41f8fc4f8c7106898cec0708ef8db2127cdd19dc950594d067b50ffc8 lib/codeql/rust/elements/internal/generated/StructExprField.qll 57d2f65527189accc061dad65076faea36285164ae4ba983e8cbc804eae82783 4de4689ea56c1477a7e8df27be6398abf10ec39f22a42d13c4d8064a56665a3b lib/codeql/rust/elements/internal/generated/StructExprFieldList.qll 599aeb4e8737093743db7477a1b423b61a2f4a53b094bc10df15c9cfd4aa3bc3 4a021e1534ce4c140280bc8d63e87c10b23620f30daaf1d29bf201588d2e310c lib/codeql/rust/elements/internal/generated/StructField.qll 08fa20cc832a014f78f37079becc64de95d0111f6022bdf0d5a6793167ab7a0f 2041f5bef78d589e5e53daf44e9f11796b40510bd0b5d44ae55a0ac7b49c42dd @@ -669,8 +663,8 @@ lib/codeql/rust/elements/internal/generated/StructFieldList.qll 2abf0688ca9659d2 lib/codeql/rust/elements/internal/generated/StructPat.qll c76fa005c2fd0448a8803233e1e8818c4123301eb66ac5cf69d0b9eaafc61e98 6e0dffccdce24bca20e87d5ba0f0995c9a1ae8983283e71e7dbfcf6fffc67a58 lib/codeql/rust/elements/internal/generated/StructPatField.qll 65fd5e42e0cb513ee2d5179d37169c02fcf91360aa2294a61657892939187b4a df48d60618f3319f544123fc615178689ceff848078bbb7b5d2c4d9f8feb0dd0 lib/codeql/rust/elements/internal/generated/StructPatFieldList.qll 342ca25fbd8bf8fef84d06e263f59f010e21418658c1f79f40c52e5ce76ca158 c950a39a946904b84a2557fb1febd59906e42e5de4903e88d0da67ba3e14a250 -lib/codeql/rust/elements/internal/generated/Synth.qll 360a0ce21e748dfbb5842548c0b4e7c867c9ec0a4670350b5b0c6a072f0ef313 1a1bfe65be484d44b08c27447b40bb7a31e6011690e5b97f493ac920b7828691 -lib/codeql/rust/elements/internal/generated/SynthConstructors.qll 371d10d1ddae6bf7de8d4760d21d1a550c9b18c86272930a118aad9c647afd0d 371d10d1ddae6bf7de8d4760d21d1a550c9b18c86272930a118aad9c647afd0d +lib/codeql/rust/elements/internal/generated/Synth.qll edc9e01c09f2483ff23a41a54fad2772d2f24fee6fe1ac28a1231bf345a31134 47a0c4a58457e48f614398b383559347cd34479576528becc3d0bb391547c871 +lib/codeql/rust/elements/internal/generated/SynthConstructors.qll 7bde7d013cb4b119748826a9ad363ba43203eff5a2360ff16a14f4e7d160fef5 7bde7d013cb4b119748826a9ad363ba43203eff5a2360ff16a14f4e7d160fef5 lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b lib/codeql/rust/elements/internal/generated/TokenTree.qll 3d855014747ae2996375f05bdaef1dd07464692ea09f47174a92f705a5ef63bb b85fed50862f97bce98fb4cbd3f275b553ef3e8dedf215915736197078867427 lib/codeql/rust/elements/internal/generated/TokenTreeMeta.qll 390121812f4f16753747d1eca17580a16385332e49fa93de89a5a5dc029a3a36 fa1e30306690fef85c6f455f4b51b1b14efd046b862e0160b311469da14ac98d @@ -710,7 +704,7 @@ lib/codeql/rust/elements/internal/generated/WhileExpr.qll e45b9ceafee6e933e37d70 lib/codeql/rust/elements/internal/generated/WildcardPat.qll d74b70b57a0a66bfae017a329352a5b27a6b9e73dd5521d627f680e810c6c59e 4b913b548ba27ff3c82fcd32cf996ff329cb57d176d3bebd0fcef394486ea499 lib/codeql/rust/elements/internal/generated/YeetExpr.qll c45a2a3c691b03c80aff5d1fdebe94c46856c1a00d42d6eaefec7f17222751d5 6c8e54035a6454a91f93d94e325f79dad275c7b86cdad2295248c94ebb0c5b00 lib/codeql/rust/elements/internal/generated/YieldExpr.qll ff60cf5a7c074117c3ea6721567944caa3d77034373d2fb31db8307aa9ffb4e6 39ec18ce5702bbac2580ab464dee1f6afc0a7dfbb7cc314b6ec8fb4efacba69e -lib/codeql/rust/elements.qll ff3bff2097f812d00926d00857ac925131757b056423458d91a09744f4194e80 ff3bff2097f812d00926d00857ac925131757b056423458d91a09744f4194e80 +lib/codeql/rust/elements.qll c5100ed31e25a299c447bb0f1b62d9575706416c51963ca504dc17a25e25f224 c5100ed31e25a299c447bb0f1b62d9575706416c51963ca504dc17a25e25f224 test/extractor-tests/generated/Abi/Abi.ql 086ed104ab1a7e7fe5c1ed29e03f1719a797c7096c738868bf6ebe872ab8fdaa fe23fe67ab0d9201e1177ea3f844b18ed428e13e3ce77381bf2b6910adfa3a0e test/extractor-tests/generated/ArgList/ArgList.ql da97b5b25418b2aa8cb8df793f48870c89fa00759cdade8ddba60d7f1f4bbc01 acfd5d2caf67282ad2d57b961068472100482d0f770a52a3c00214c647d18c75 test/extractor-tests/generated/ArrayListExpr/ArrayListExpr.ql 97d27b10e3b76f90538102014b45b254bc223e9bac17bd8059bdaeb063b2f734 b28efee84fdb8a4a0290110fc7820dfdbc934d02ab38813dd1074f9dcf5a6b03 @@ -815,8 +809,6 @@ test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr.ql 247b7daa146ed7b46db8 test/extractor-tests/generated/OrPat/OrPat.ql 8742e1708da0bcc172c8cc637082672c92a136aa50bb2f0ef928387337aefa3e 1901c223502e8cc046c233a10d923226373bad0837264e2b837fd549929020e3 test/extractor-tests/generated/Param/Param.ql 853cea9f6ceeec98bf861721aebe575971ad1e04eb216fbd8246ece46af9c7bf f43b20554b36209e1234cd62f01945df48490a8d8e629c501cb954ca40b30832 test/extractor-tests/generated/ParamList/ParamList.ql 015cfeec048fc89698d75a04492a0e39303b1264f80e2b6977d178aba18a745d 349455ea6fe026a482bf9d63e9581ed2f368de3331bd2f0b9591ec20ee2a5f21 -test/extractor-tests/generated/ParenExpr/ParenExpr.ql c7fce3be4c5f81d7e98f8fbc9da420e0bcfb31b9e256a316374de82dbba5c325 59936708b20c82e80d4d25c1d9b46653a4ae310cc05e9ef2239fc0b3bcd85947 -test/extractor-tests/generated/ParenPat/ParenPat.ql 50f99c6a7e5e2f76dc5bbc10a6b2db5f5f40b85e80a992aa616e424744a7606d 5ae681b09e7b8793d2d8fa36e9e7d9b6c32fc94d6c26d43425407d05d351fcb3 test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr.ql 86a45a9f9696a55562a7125f08297bcd50b368225a13cd31b6e9eb4071d04e13 53c0b8c4f453a748c9534220960c6ce8c52bd7501cf1d1f74e3928fc6512667c test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.ql 6d0e3f7cbcc835f2a5784ccb09b0d65c2bb063c1904edded2e7fc8c9fb57c4fa e41c898b8b0d61078e0d76c6e2e141251dca71f79ad5fa119c012220c54cc409 test/extractor-tests/generated/Path/Path.ql 0f6b63c723da7f140411c8e9a4bb9fbe043a997a1748a4a491add4bd6e81fd6e 5081db5bd590b72780c3c8032532e65b5d453c327c8771da6b87c10e30071523 diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index 3addf5fc652e..55dd6f8c9b9f 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -128,8 +128,6 @@ /lib/codeql/rust/elements/Param.qll linguist-generated /lib/codeql/rust/elements/ParamBase.qll linguist-generated /lib/codeql/rust/elements/ParamList.qll linguist-generated -/lib/codeql/rust/elements/ParenExpr.qll linguist-generated -/lib/codeql/rust/elements/ParenPat.qll linguist-generated /lib/codeql/rust/elements/ParenTypeRepr.qll linguist-generated /lib/codeql/rust/elements/ParenthesizedArgList.qll linguist-generated /lib/codeql/rust/elements/Pat.qll linguist-generated @@ -382,8 +380,6 @@ /lib/codeql/rust/elements/internal/OrPatConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ParamConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ParamListConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/ParenExprConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/ParenPatConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ParenTypeReprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ParenthesizedArgListConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ParenthesizedArgListImpl.qll linguist-generated @@ -626,8 +622,6 @@ /lib/codeql/rust/elements/internal/generated/Param.qll linguist-generated /lib/codeql/rust/elements/internal/generated/ParamBase.qll linguist-generated /lib/codeql/rust/elements/internal/generated/ParamList.qll linguist-generated -/lib/codeql/rust/elements/internal/generated/ParenExpr.qll linguist-generated -/lib/codeql/rust/elements/internal/generated/ParenPat.qll linguist-generated /lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/ParentChild.qll linguist-generated /lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll linguist-generated @@ -817,8 +811,6 @@ /test/extractor-tests/generated/OrPat/OrPat.ql linguist-generated /test/extractor-tests/generated/Param/Param.ql linguist-generated /test/extractor-tests/generated/ParamList/ParamList.ql linguist-generated -/test/extractor-tests/generated/ParenExpr/ParenExpr.ql linguist-generated -/test/extractor-tests/generated/ParenPat/ParenPat.ql linguist-generated /test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr.ql linguist-generated /test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.ql linguist-generated /test/extractor-tests/generated/Path/Path.ql linguist-generated diff --git a/rust/ql/lib/change-notes/2026-11-03-parenthesized-expressions-and-patterns.md b/rust/ql/lib/change-notes/2026-11-03-parenthesized-expressions-and-patterns.md new file mode 100644 index 000000000000..e60e0e6da66e --- /dev/null +++ b/rust/ql/lib/change-notes/2026-11-03-parenthesized-expressions-and-patterns.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* The Rust AST no longer exposes `ParenExpr` and `ParenPat` nodes. Parenthesized expressions and patterns are represented by their inner entities instead. +* The `rust/access-after-lifetime-ended` query now detects more accesses through pointers to struct fields created by `std::ptr::addr_of!` and `std::ptr::addr_of_mut!`. diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/CfgConsistency.qll b/rust/ql/lib/codeql/rust/controlflow/internal/CfgConsistency.qll index 02393cb98c26..1958f17d663e 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/CfgConsistency.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/CfgConsistency.qll @@ -13,7 +13,6 @@ private import codeql.rust.Diagnostics private predicate nonPostOrderExpr(Expr e) { not e instanceof LetExpr and - not e instanceof ParenExpr and exists(AstNode last, Completion c | CfgImpl::last(e, last, c) and last != e and diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll b/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll index ee1c0e6ab6b2..b4c3864a8d3f 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/CfgNodes.qll @@ -23,18 +23,7 @@ private module CfgNodesInput implements InputSig { class CfgNode = AstCfgNode; - private AstNode desugar(AstNode n) { - result = n.(ParenPat).getPat() - or - result = n.(ParenExpr).getExpr() - } - - AstNode getDesugared(AstNode n) { - result = getDesugared(desugar(n)) - or - not exists(desugar(n)) and - result = n - } + AstNode getDesugared(AstNode n) { result = n } } import MakeCfgNodes diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll b/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll index 33da4db473eb..cfc77ce98638 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/Completion.qll @@ -84,8 +84,6 @@ class BooleanCompletion extends ConditionalCompletion, TBooleanCompletion { e = any(BinaryLogicalOperation blo).getLhs() or exists(Expr parent | this.isValidForSpecific0(parent) | - e = parent.(ParenExpr).getExpr() - or e = parent.(LogicalNotExpr).getExpr() or e = parent.(BinaryLogicalOperation).getRhs() diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index 03c00f0bf3dc..c7e2ee2ea32d 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -503,20 +503,6 @@ module ExprTrees { class OffsetOfExprTree extends LeafTree instanceof OffsetOfExpr { } - class ParenExprTree extends ControlFlowTree, ParenExpr { - private ControlFlowTree expr; - - ParenExprTree() { expr = super.getExpr() } - - override predicate propagatesAbnormal(AstNode child) { expr.propagatesAbnormal(child) } - - override predicate first(AstNode first) { expr.first(first) } - - override predicate last(AstNode last, Completion c) { expr.last(last, c) } - - override predicate succ(AstNode pred, AstNode succ, Completion c) { none() } - } - class PathExprTree extends LeafTree instanceof PathExpr { } class RangeExprTree extends StandardPostOrderTree instanceof RangeExpr { @@ -654,20 +640,6 @@ module PatternTrees { } } - class ParenPatTree extends ControlFlowTree, ParenPat { - private ControlFlowTree pat; - - ParenPatTree() { pat = this.getPat() } - - override predicate propagatesAbnormal(AstNode child) { pat.propagatesAbnormal(child) } - - override predicate first(AstNode first) { pat.first(first) } - - override predicate last(AstNode last, Completion c) { pat.last(last, c) } - - override predicate succ(AstNode pred, AstNode succ, Completion c) { none() } - } - class PathPatTree extends LeafTree, PathPat { } class WildcardPatTree extends LeafTree, WildcardPat { } 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 d882de256d97..44c6cc0dc6d7 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll @@ -1985,6 +1985,21 @@ module MakeCfgNodes Input> { /** Gets the underlying `MacroExpr`. */ MacroExpr getMacroExpr() { result = node } + /** + * Gets the `index`th attr of this macro expression (0-based). + */ + AnyAttr getAttr(int index) { result = node.getAttr(index) } + + /** + * Gets any of the attrs of this macro expression. + */ + AnyAttr getAnAttr() { result = this.getAttr(_) } + + /** + * Gets the number of attrs of this macro expression. + */ + int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } + /** * Gets the macro call of this macro expression, if it exists. */ @@ -3058,6 +3073,21 @@ module MakeCfgNodes Input> { /** Gets the underlying `StructExpr`. */ StructExpr getStructExpr() { result = node } + /** + * Gets the `index`th attr of this struct expression (0-based). + */ + AnyAttr getAttr(int index) { result = node.getAttr(index) } + + /** + * Gets any of the attrs of this struct expression. + */ + AnyAttr getAnAttr() { result = this.getAttr(_) } + + /** + * Gets the number of attrs of this struct expression. + */ + int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } + /** * Gets the struct expression field list of this struct expression, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll index d6cf5aac1f95..befe95178930 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll @@ -155,8 +155,7 @@ private Expr getALastEvalNode(Expr e) { ) or result = e.(MatchExpr).getAnArm().getExpr() or result = e.(MacroExpr).getMacroCall().getMacroCallExpansion() or - result.(BreakExpr).getTarget() = e or - result = e.(ParenExpr).getExpr() + result.(BreakExpr).getTarget() = e } /** @@ -230,17 +229,6 @@ module LocalFlow { nodeFrom.asExpr() = match.getScrutinee() and nodeTo.asPat() = match.getAnArm().getPat() ) - or - exists(ParenExpr pe, Expr e | - e = pe.getExpr() and - if VariableImpl::assignmentOperationDescendant(_, pe) - then nodeTo.asExpr() = e and nodeFrom.asExpr() = pe - else ( - nodeFrom.asExpr() = e and nodeTo.asExpr() = pe - ) - ) - or - nodeTo.asPat() = nodeFrom.asPat().(ParenPat).getPat() } pragma[nomagic] @@ -494,26 +482,18 @@ module RustDataFlowGen implements InputSig node instanceof ImplicitBorrowNode or node instanceof DerefOutNode or node instanceof IndexOutNode or - node.asExpr() instanceof ParenExpr or nodeIsHidden(node.(PostUpdateNode).getPreUpdateNode()) } - private Expr stripParens(Expr e) { - not e instanceof ParenExpr and - result = e - or - result = stripParens(e.(ParenExpr).getExpr()) - } - predicate neverSkipInPathGraph(Node node) { node.(Node::Node).asPat() = any(LetStmt s).getPat() or node.(Node::Node).asPat() = any(LetExpr e).getPat() or - node.(Node::Node).asExpr() = stripParens(any(AssignmentExpr a).getLhs()) + node.(Node::Node).asExpr() = any(AssignmentExpr a).getLhs() or exists(MatchExpr match | - node.asExpr() = stripParens(match.getScrutinee()) or + node.asExpr() = match.getScrutinee() or node.asPat() = match.getAnArm().getPat() ) } @@ -1086,11 +1066,7 @@ module VariableCapture { } class Expr extends AstNode { - predicate hasCfgNode(BasicBlocks::BasicBlock bb, int i) { - this = bb.getNode(i).getAstNode() - or - this.(ParenExpr).getExpr().(Expr).hasCfgNode(bb, i) - } + predicate hasCfgNode(BasicBlocks::BasicBlock bb, int i) { this = bb.getNode(i).getAstNode() } } class VariableWrite extends Expr { diff --git a/rust/ql/lib/codeql/rust/elements.qll b/rust/ql/lib/codeql/rust/elements.qll index 10107841d52d..b9a6b62200c3 100644 --- a/rust/ql/lib/codeql/rust/elements.qll +++ b/rust/ql/lib/codeql/rust/elements.qll @@ -131,8 +131,6 @@ import codeql.rust.elements.OrPat import codeql.rust.elements.Param import codeql.rust.elements.ParamBase import codeql.rust.elements.ParamList -import codeql.rust.elements.ParenExpr -import codeql.rust.elements.ParenPat import codeql.rust.elements.ParenTypeRepr import codeql.rust.elements.ParenthesizedArgList import codeql.rust.elements.Pat diff --git a/rust/ql/lib/codeql/rust/elements/MacroExpr.qll b/rust/ql/lib/codeql/rust/elements/MacroExpr.qll index 9b063903caa8..054dcd367711 100644 --- a/rust/ql/lib/codeql/rust/elements/MacroExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/MacroExpr.qll @@ -4,6 +4,7 @@ */ private import internal.MacroExprImpl +import codeql.rust.elements.AnyAttr import codeql.rust.elements.Expr import codeql.rust.elements.MacroCall diff --git a/rust/ql/lib/codeql/rust/elements/ParenExpr.qll b/rust/ql/lib/codeql/rust/elements/ParenExpr.qll deleted file mode 100644 index 27da607e861c..000000000000 --- a/rust/ql/lib/codeql/rust/elements/ParenExpr.qll +++ /dev/null @@ -1,18 +0,0 @@ -// generated by codegen, do not edit -/** - * This module provides the public class `ParenExpr`. - */ - -private import internal.ParenExprImpl -import codeql.rust.elements.AnyAttr -import codeql.rust.elements.Expr - -/** - * A parenthesized expression. - * - * For example: - * ```rust - * (x + y) - * ``` - */ -final class ParenExpr = Impl::ParenExpr; diff --git a/rust/ql/lib/codeql/rust/elements/ParenPat.qll b/rust/ql/lib/codeql/rust/elements/ParenPat.qll deleted file mode 100644 index 6789be949792..000000000000 --- a/rust/ql/lib/codeql/rust/elements/ParenPat.qll +++ /dev/null @@ -1,18 +0,0 @@ -// generated by codegen, do not edit -/** - * This module provides the public class `ParenPat`. - */ - -private import internal.ParenPatImpl -import codeql.rust.elements.Pat - -/** - * A parenthesized pattern. - * - * For example: - * ```rust - * let (x) = 1; - * // ^^^ - * ``` - */ -final class ParenPat = Impl::ParenPat; diff --git a/rust/ql/lib/codeql/rust/elements/StructExpr.qll b/rust/ql/lib/codeql/rust/elements/StructExpr.qll index dfb1ae4f819a..ab84f10b2da1 100644 --- a/rust/ql/lib/codeql/rust/elements/StructExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/StructExpr.qll @@ -4,6 +4,7 @@ */ private import internal.StructExprImpl +import codeql.rust.elements.AnyAttr import codeql.rust.elements.Expr import codeql.rust.elements.PathAstNode import codeql.rust.elements.StructExprFieldList diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParenExprConstructor.qll b/rust/ql/lib/codeql/rust/elements/internal/ParenExprConstructor.qll deleted file mode 100644 index 95452ccb610a..000000000000 --- a/rust/ql/lib/codeql/rust/elements/internal/ParenExprConstructor.qll +++ /dev/null @@ -1,14 +0,0 @@ -// generated by codegen, remove this comment if you wish to edit this file -/** - * This module defines the hook used internally to tweak the characteristic predicate of - * `ParenExpr` synthesized instances. - * INTERNAL: Do not use. - */ - -private import codeql.rust.elements.internal.generated.Raw - -/** - * The characteristic predicate of `ParenExpr` synthesized instances. - * INTERNAL: Do not use. - */ -predicate constructParenExpr(Raw::ParenExpr id) { any() } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll deleted file mode 100644 index f52fd3aa0674..000000000000 --- a/rust/ql/lib/codeql/rust/elements/internal/ParenExprImpl.qll +++ /dev/null @@ -1,44 +0,0 @@ -/** - * This module provides a hand-modifiable wrapper around the generated class `ParenExpr`. - * - * INTERNAL: Do not use. - */ - -private import codeql.rust.elements.internal.generated.ParenExpr - -/** - * INTERNAL: This module contains the customizable definition of `ParenExpr` and should not - * be referenced directly. - */ -module Impl { - // the following QLdoc is generated: if you need to edit it, do it in the schema file - /** - * A parenthesized expression. - * - * For example: - * ```rust - * (x + y) - * ``` - */ - class ParenExpr extends Generated::ParenExpr { - override string toStringImpl() { - result = "(" + this.getExpr().toAbbreviatedString() + ")" - or - // In macro expansions such as - // - // ```rust - // [ - // "a", - // "b", - // #[cfg(target_os = "macos")] - // "c", - // ] - // ``` - // - // the last array element will give rise to an empty `ParenExpr` when not - // compiling for macos. - not exists(this.getExpr().toAbbreviatedString()) and - result = "(...)" - } - } -} diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParenPatConstructor.qll b/rust/ql/lib/codeql/rust/elements/internal/ParenPatConstructor.qll deleted file mode 100644 index 68ef6e0b0365..000000000000 --- a/rust/ql/lib/codeql/rust/elements/internal/ParenPatConstructor.qll +++ /dev/null @@ -1,14 +0,0 @@ -// generated by codegen, remove this comment if you wish to edit this file -/** - * This module defines the hook used internally to tweak the characteristic predicate of - * `ParenPat` synthesized instances. - * INTERNAL: Do not use. - */ - -private import codeql.rust.elements.internal.generated.Raw - -/** - * The characteristic predicate of `ParenPat` synthesized instances. - * INTERNAL: Do not use. - */ -predicate constructParenPat(Raw::ParenPat id) { any() } diff --git a/rust/ql/lib/codeql/rust/elements/internal/ParenPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ParenPatImpl.qll deleted file mode 100644 index f6fa342e8f93..000000000000 --- a/rust/ql/lib/codeql/rust/elements/internal/ParenPatImpl.qll +++ /dev/null @@ -1,27 +0,0 @@ -/** - * This module provides a hand-modifiable wrapper around the generated class `ParenPat`. - * - * INTERNAL: Do not use. - */ - -private import codeql.rust.elements.internal.generated.ParenPat - -/** - * INTERNAL: This module contains the customizable definition of `ParenPat` and should not - * be referenced directly. - */ -module Impl { - // the following QLdoc is generated: if you need to edit it, do it in the schema file - /** - * A parenthesized pattern. - * - * For example: - * ```rust - * let (x) = 1; - * // ^^^ - * ``` - */ - class ParenPat extends Generated::ParenPat { - override string toStringImpl() { result = "(" + this.getPat().toAbbreviatedString() + ")" } - } -} diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroExpr.qll index 21118262a248..ce18135527b7 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroExpr.qll @@ -6,6 +6,7 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw +import codeql.rust.elements.AnyAttr import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl import codeql.rust.elements.MacroCall @@ -29,6 +30,26 @@ module Generated { override string toStringImpl() { result = this.getAPrimaryQlClass() } + /** + * Gets the `index`th attr of this macro expression (0-based). + */ + AnyAttr getAttr(int index) { + result = + Synth::convertAnyAttrFromRaw(Synth::convertMacroExprToRaw(this) + .(Raw::MacroExpr) + .getAttr(index)) + } + + /** + * Gets any of the attrs of this macro expression. + */ + final AnyAttr getAnAttr() { result = this.getAttr(_) } + + /** + * Gets the number of attrs of this macro expression. + */ + final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } + /** * Gets the macro call of this macro expression, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParenExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParenExpr.qll deleted file mode 100644 index d02e79bb34fa..000000000000 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParenExpr.qll +++ /dev/null @@ -1,64 +0,0 @@ -// generated by codegen, do not edit -/** - * This module provides the generated definition of `ParenExpr`. - * INTERNAL: Do not import directly. - */ - -private import codeql.rust.elements.internal.generated.Synth -private import codeql.rust.elements.internal.generated.Raw -import codeql.rust.elements.AnyAttr -import codeql.rust.elements.Expr -import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl - -/** - * INTERNAL: This module contains the fully generated definition of `ParenExpr` and should not - * be referenced directly. - */ -module Generated { - /** - * A parenthesized expression. - * - * For example: - * ```rust - * (x + y) - * ``` - * INTERNAL: Do not reference the `Generated::ParenExpr` class directly. - * Use the subclass `ParenExpr`, where the following predicates are available. - */ - class ParenExpr extends Synth::TParenExpr, ExprImpl::Expr { - override string getAPrimaryQlClass() { result = "ParenExpr" } - - /** - * Gets the `index`th attr of this paren expression (0-based). - */ - AnyAttr getAttr(int index) { - result = - Synth::convertAnyAttrFromRaw(Synth::convertParenExprToRaw(this) - .(Raw::ParenExpr) - .getAttr(index)) - } - - /** - * Gets any of the attrs of this paren expression. - */ - final AnyAttr getAnAttr() { result = this.getAttr(_) } - - /** - * Gets the number of attrs of this paren expression. - */ - final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } - - /** - * Gets the expression of this paren expression, if it exists. - */ - Expr getExpr() { - result = - Synth::convertExprFromRaw(Synth::convertParenExprToRaw(this).(Raw::ParenExpr).getExpr()) - } - - /** - * Holds if `getExpr()` exists. - */ - final predicate hasExpr() { exists(this.getExpr()) } - } -} diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParenPat.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParenPat.qll deleted file mode 100644 index ddf678e24473..000000000000 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParenPat.qll +++ /dev/null @@ -1,43 +0,0 @@ -// generated by codegen, do not edit -/** - * This module provides the generated definition of `ParenPat`. - * INTERNAL: Do not import directly. - */ - -private import codeql.rust.elements.internal.generated.Synth -private import codeql.rust.elements.internal.generated.Raw -import codeql.rust.elements.Pat -import codeql.rust.elements.internal.PatImpl::Impl as PatImpl - -/** - * INTERNAL: This module contains the fully generated definition of `ParenPat` and should not - * be referenced directly. - */ -module Generated { - /** - * A parenthesized pattern. - * - * For example: - * ```rust - * let (x) = 1; - * // ^^^ - * ``` - * INTERNAL: Do not reference the `Generated::ParenPat` class directly. - * Use the subclass `ParenPat`, where the following predicates are available. - */ - class ParenPat extends Synth::TParenPat, PatImpl::Pat { - override string getAPrimaryQlClass() { result = "ParenPat" } - - /** - * Gets the pattern of this paren pattern, if it exists. - */ - Pat getPat() { - result = Synth::convertPatFromRaw(Synth::convertParenPatToRaw(this).(Raw::ParenPat).getPat()) - } - - /** - * Holds if `getPat()` exists. - */ - final predicate hasPat() { exists(this.getPat()) } - } -} 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 4d917343d90d..3d6489af4894 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -1688,13 +1688,17 @@ private module Impl { } private Element getImmediateChildOfMacroExpr(MacroExpr e, int index, string partialPredicateCall) { - exists(int n, int nMacroCall | + exists(int n, int nAttr, int nMacroCall | n = 0 and - nMacroCall = n + 1 and + nAttr = n + e.getNumberOfAttrs() and + nMacroCall = nAttr + 1 and ( none() or - index = n and result = e.getMacroCall() and partialPredicateCall = "MacroCall()" + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" + or + index = nAttr and result = e.getMacroCall() and partialPredicateCall = "MacroCall()" ) ) } @@ -1845,34 +1849,6 @@ private module Impl { ) } - private Element getImmediateChildOfParenExpr(ParenExpr e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nExpr | - n = 0 and - nAttr = n + e.getNumberOfAttrs() and - nExpr = nAttr + 1 and - ( - none() - or - result = e.getAttr(index - n) and - partialPredicateCall = "Attr(" + (index - n).toString() + ")" - or - index = nAttr and result = e.getExpr() and partialPredicateCall = "Expr()" - ) - ) - } - - private Element getImmediateChildOfParenPat(ParenPat e, int index, string partialPredicateCall) { - exists(int n, int nPat | - n = 0 and - nPat = n + 1 and - ( - none() - or - index = n and result = e.getPat() and partialPredicateCall = "Pat()" - ) - ) - } - private Element getImmediateChildOfParenTypeRepr( ParenTypeRepr e, int index, string partialPredicateCall ) { @@ -2130,16 +2106,20 @@ private module Impl { } private Element getImmediateChildOfStructExpr(StructExpr e, int index, string partialPredicateCall) { - exists(int n, int nPath, int nStructExprFieldList | + exists(int n, int nPath, int nAttr, int nStructExprFieldList | n = 0 and nPath = n + 1 and - nStructExprFieldList = nPath + 1 and + nAttr = nPath + e.getNumberOfAttrs() and + nStructExprFieldList = nAttr + 1 and ( none() or index = n and result = e.getPath() and partialPredicateCall = "Path()" or - index = nPath and + result = e.getAttr(index - nPath) and + partialPredicateCall = "Attr(" + (index - nPath).toString() + ")" + or + index = nAttr and result = e.getStructExprFieldList() and partialPredicateCall = "StructExprFieldList()" ) @@ -3459,10 +3439,6 @@ private module Impl { or result = getImmediateChildOfParam(e, index, partialAccessor) or - result = getImmediateChildOfParenExpr(e, index, partialAccessor) - or - result = getImmediateChildOfParenPat(e, index, partialAccessor) - or result = getImmediateChildOfParenTypeRepr(e, index, partialAccessor) or result = getImmediateChildOfPathMeta(e, index, partialAccessor) 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 284d1cc4c4b1..b133553edd3f 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -4596,6 +4596,16 @@ module Raw { class MacroExpr extends @macro_expr, Expr { override string toString() { result = "MacroExpr" } + /** + * Gets the `index`th attr of this macro expression (0-based). + */ + AnyAttr getAttr(int index) { macro_expr_attrs(this, index, result) } + + /** + * Gets the number of attrs of this macro expression. + */ + int getNumberOfAttrs() { result = count(int i | macro_expr_attrs(this, i, _)) } + /** * Gets the macro call of this macro expression, if it exists. */ @@ -4603,13 +4613,16 @@ module Raw { } private Element getImmediateChildOfMacroExpr(MacroExpr e, int index) { - exists(int n, int nMacroCall | + exists(int n, int nAttr, int nMacroCall | n = 0 and - nMacroCall = n + 1 and + nAttr = n + e.getNumberOfAttrs() and + nMacroCall = nAttr + 1 and ( none() or - index = n and result = e.getMacroCall() + result = e.getAttr(index - n) + or + index = nAttr and result = e.getMacroCall() ) ) } @@ -4993,80 +5006,6 @@ module Raw { ) } - /** - * INTERNAL: Do not use. - * A parenthesized expression. - * - * For example: - * ```rust - * (x + y) - * ``` - */ - class ParenExpr extends @paren_expr, Expr { - override string toString() { result = "ParenExpr" } - - /** - * Gets the `index`th attr of this paren expression (0-based). - */ - AnyAttr getAttr(int index) { paren_expr_attrs(this, index, result) } - - /** - * Gets the number of attrs of this paren expression. - */ - int getNumberOfAttrs() { result = count(int i | paren_expr_attrs(this, i, _)) } - - /** - * Gets the expression of this paren expression, if it exists. - */ - Expr getExpr() { paren_expr_exprs(this, result) } - } - - private Element getImmediateChildOfParenExpr(ParenExpr e, int index) { - exists(int n, int nAttr, int nExpr | - n = 0 and - nAttr = n + e.getNumberOfAttrs() and - nExpr = nAttr + 1 and - ( - none() - or - result = e.getAttr(index - n) - or - index = nAttr and result = e.getExpr() - ) - ) - } - - /** - * INTERNAL: Do not use. - * A parenthesized pattern. - * - * For example: - * ```rust - * let (x) = 1; - * // ^^^ - * ``` - */ - class ParenPat extends @paren_pat, Pat { - override string toString() { result = "ParenPat" } - - /** - * Gets the pattern of this paren pattern, if it exists. - */ - Pat getPat() { paren_pat_pats(this, result) } - } - - private Element getImmediateChildOfParenPat(ParenPat e, int index) { - exists(int n, int nPat | - n = 0 and - nPat = n + 1 and - ( - none() - or - index = n and result = e.getPat() - ) - ) - } - /** * INTERNAL: Do not use. * A parenthesized type. @@ -5779,6 +5718,16 @@ module Raw { class StructExpr extends @struct_expr, Expr, PathAstNode { override string toString() { result = "StructExpr" } + /** + * Gets the `index`th attr of this struct expression (0-based). + */ + AnyAttr getAttr(int index) { struct_expr_attrs(this, index, result) } + + /** + * Gets the number of attrs of this struct expression. + */ + int getNumberOfAttrs() { result = count(int i | struct_expr_attrs(this, i, _)) } + /** * Gets the struct expression field list of this struct expression, if it exists. */ @@ -5788,16 +5737,19 @@ module Raw { } private Element getImmediateChildOfStructExpr(StructExpr e, int index) { - exists(int n, int nPath, int nStructExprFieldList | + exists(int n, int nPath, int nAttr, int nStructExprFieldList | n = 0 and nPath = n + 1 and - nStructExprFieldList = nPath + 1 and + nAttr = nPath + e.getNumberOfAttrs() and + nStructExprFieldList = nAttr + 1 and ( none() or index = n and result = e.getPath() or - index = nPath and result = e.getStructExprFieldList() + result = e.getAttr(index - nPath) + or + index = nAttr and result = e.getStructExprFieldList() ) ) } @@ -8398,10 +8350,6 @@ module Raw { or result = getImmediateChildOfParam(e, index) or - result = getImmediateChildOfParenExpr(e, index) - or - result = getImmediateChildOfParenPat(e, index) - or result = getImmediateChildOfParenTypeRepr(e, index) or result = getImmediateChildOfPathMeta(e, index) diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/StructExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/StructExpr.qll index c9fbacd72686..4753f0063e10 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/StructExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/StructExpr.qll @@ -6,6 +6,7 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw +import codeql.rust.elements.AnyAttr import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl import codeql.rust.elements.internal.PathAstNodeImpl::Impl as PathAstNodeImpl import codeql.rust.elements.StructExprFieldList @@ -29,6 +30,26 @@ module Generated { class StructExpr extends Synth::TStructExpr, ExprImpl::Expr, PathAstNodeImpl::PathAstNode { override string getAPrimaryQlClass() { result = "StructExpr" } + /** + * Gets the `index`th attr of this struct expression (0-based). + */ + AnyAttr getAttr(int index) { + result = + Synth::convertAnyAttrFromRaw(Synth::convertStructExprToRaw(this) + .(Raw::StructExpr) + .getAttr(index)) + } + + /** + * Gets any of the attrs of this struct expression. + */ + final AnyAttr getAnAttr() { result = this.getAttr(_) } + + /** + * Gets the number of attrs of this struct expression. + */ + final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } + /** * Gets the struct expression field list of this struct expression, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll index f498377b7d1c..3bf058220f3e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll @@ -458,14 +458,6 @@ module Synth { * INTERNAL: Do not use. */ TParamList(Raw::ParamList id) { constructParamList(id) } or - /** - * INTERNAL: Do not use. - */ - TParenExpr(Raw::ParenExpr id) { constructParenExpr(id) } or - /** - * INTERNAL: Do not use. - */ - TParenPat(Raw::ParenPat id) { constructParenPat(id) } or /** * INTERNAL: Do not use. */ @@ -812,9 +804,8 @@ module Synth { TBreakExpr or TCallExpr or TCastExpr or TCfgPredExpr or TClosureExpr or TContinueExpr or TFieldExpr or TFormatArgsExpr or TIfExpr or TIncludeBytesExpr or TIndexExpr or TLabelableExpr or TLetExpr or TLiteralExpr or TMacroExpr or TMatchExpr or TMethodCallExpr or - TOffsetOfExpr or TParenExpr or TPathExprBase or TPrefixExpr or TRangeExpr or TRefExpr or - TReturnExpr or TStructExpr or TTryExpr or TTupleExpr or TUnderscoreExpr or TYeetExpr or - TYieldExpr; + TOffsetOfExpr or TPathExprBase or TPrefixExpr or TRangeExpr or TRefExpr or TReturnExpr or + TStructExpr or TTryExpr or TTupleExpr or TUnderscoreExpr or TYeetExpr or TYieldExpr; /** * INTERNAL: Do not use. @@ -874,8 +865,8 @@ module Synth { */ class TPat = TBoxPat or TCfgPredPat or TConstBlockPat or TDerefPat or TIdentPat or TLiteralPat or - TMacroPat or TNotNull or TOrPat or TParenPat or TPathPat or TRangePat or TRefPat or - TRestPat or TSlicePat or TStructPat or TTuplePat or TTupleStructPat or TWildcardPat; + TMacroPat or TNotNull or TOrPat or TPathPat or TRangePat or TRefPat or TRestPat or + TSlicePat or TStructPat or TTuplePat or TTupleStructPat or TWildcardPat; /** * INTERNAL: Do not use. @@ -1704,20 +1695,6 @@ module Synth { */ TParamList convertParamListFromRaw(Raw::Element e) { result = TParamList(e) } - /** - * INTERNAL: Do not use. - * - * Converts a raw element to a synthesized `TParenExpr`, if possible. - */ - TParenExpr convertParenExprFromRaw(Raw::Element e) { result = TParenExpr(e) } - - /** - * INTERNAL: Do not use. - * - * Converts a raw element to a synthesized `TParenPat`, if possible. - */ - TParenPat convertParenPatFromRaw(Raw::Element e) { result = TParenPat(e) } - /** * INTERNAL: Do not use. * @@ -2513,8 +2490,6 @@ module Synth { or result = convertOffsetOfExprFromRaw(e) or - result = convertParenExprFromRaw(e) - or result = convertPathExprBaseFromRaw(e) or result = convertPrefixExprFromRaw(e) @@ -2705,8 +2680,6 @@ module Synth { or result = convertOrPatFromRaw(e) or - result = convertParenPatFromRaw(e) - or result = convertPathPatFromRaw(e) or result = convertRangePatFromRaw(e) @@ -3496,18 +3469,6 @@ module Synth { */ Raw::Element convertParamListToRaw(TParamList e) { e = TParamList(result) } - /** - * INTERNAL: Do not use. - * Converts a synthesized `TParenExpr` to a raw DB element, if possible. - */ - Raw::Element convertParenExprToRaw(TParenExpr e) { e = TParenExpr(result) } - - /** - * INTERNAL: Do not use. - * Converts a synthesized `TParenPat` to a raw DB element, if possible. - */ - Raw::Element convertParenPatToRaw(TParenPat e) { e = TParenPat(result) } - /** * INTERNAL: Do not use. * Converts a synthesized `TParenTypeRepr` to a raw DB element, if possible. @@ -4233,8 +4194,6 @@ module Synth { or result = convertOffsetOfExprToRaw(e) or - result = convertParenExprToRaw(e) - or result = convertPathExprBaseToRaw(e) or result = convertPrefixExprToRaw(e) @@ -4425,8 +4384,6 @@ module Synth { or result = convertOrPatToRaw(e) or - result = convertParenPatToRaw(e) - or result = convertPathPatToRaw(e) or result = convertRangePatToRaw(e) diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/SynthConstructors.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/SynthConstructors.qll index e2a18a0bb2b8..2af06d4594be 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/SynthConstructors.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/SynthConstructors.qll @@ -112,8 +112,6 @@ import codeql.rust.elements.internal.OffsetOfExprConstructor import codeql.rust.elements.internal.OrPatConstructor import codeql.rust.elements.internal.ParamConstructor import codeql.rust.elements.internal.ParamListConstructor -import codeql.rust.elements.internal.ParenExprConstructor -import codeql.rust.elements.internal.ParenPatConstructor import codeql.rust.elements.internal.ParenTypeReprConstructor import codeql.rust.elements.internal.ParenthesizedArgListConstructor import codeql.rust.elements.internal.PathConstructor diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll index 0e71f878c08f..0a26d0a0cbbb 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll @@ -2322,8 +2322,9 @@ private module Input3 implements InputSig3 { class AssignExpr extends AssignmentImpl, Rust::AssignmentExpr { } - class ParenExpr extends Expr instanceof Rust::ParenExpr { - Expr getExpr() { result = super.getExpr() } + // Required by the shared type-inference signature; parenthesized expressions are transparent. + abstract class ParenExpr extends Expr { + Expr getExpr() { none() } } final class Declaration = DeclarationImpl; @@ -3040,8 +3041,6 @@ private module Input3 implements InputSig3 { ( n2 = n1.(OrPat).getAPat() or - n2 = n1.(ParenPat).getPat() - or n2 = n1.(LiteralPat).getLiteral() or exists(BreakExpr break | diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index 9487e73d9da6..7980434ec600 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -436,7 +436,6 @@ callable_attrs( | @match_expr | @method_call_expr | @offset_of_expr -| @paren_expr | @path_expr_base | @prefix_expr | @range_expr @@ -740,7 +739,6 @@ parenthesized_arg_list_type_args( | @macro_pat | @not_null | @or_pat -| @paren_pat | @path_pat | @range_pat | @ref_pat @@ -2236,6 +2234,13 @@ macro_exprs( unique int id: @macro_expr ); +#keyset[id, index] +macro_expr_attrs( + int id: @macro_expr ref, + int index: int ref, + int attr: @any_attr ref +); + #keyset[id] macro_expr_macro_calls( int id: @macro_expr ref, @@ -2383,33 +2388,6 @@ param_pats( 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: @any_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 ); @@ -2705,6 +2683,13 @@ struct_exprs( unique int id: @struct_expr ); +#keyset[id, index] +struct_expr_attrs( + int id: @struct_expr ref, + int index: int ref, + int attr: @any_attr ref +); + #keyset[id] struct_expr_struct_expr_field_lists( int id: @struct_expr ref, diff --git a/rust/ql/lib/upgrades/9487e73d9da6508522f07a34bc4aafa8d55c0f5f/old.dbscheme b/rust/ql/lib/upgrades/9487e73d9da6508522f07a34bc4aafa8d55c0f5f/old.dbscheme new file mode 100644 index 000000000000..9487e73d9da6 --- /dev/null +++ b/rust/ql/lib/upgrades/9487e73d9da6508522f07a34bc4aafa8d55c0f5f/old.dbscheme @@ -0,0 +1,3768 @@ +// 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_comments (unique int id: @yaml_comment, + string text: string ref, + string tostring: 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 | @yaml_comment; + +/*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +overlayChangedFiles( + string path: string ref +); + + +// from prefix.dbscheme +#keyset[id] +locatable_locations( + int id: @locatable ref, + int location: @location_default ref +); + + +// from schema + +@element = + @extractor_step +| @locatable +| @named_crate +| @unextracted +; + +extractor_steps( + unique int id: @extractor_step, + string action: string ref, + int duration_ms: int ref +); + +#keyset[id] +extractor_step_files( + int id: @extractor_step ref, + int file: @file ref +); + +@locatable = + @ast_node +| @crate +; + +named_crates( + unique int id: @named_crate, + string name: string ref, + int crate: @crate ref +); + +@unextracted = + @missing +| @unimplemented +; + +@ast_node = + @abi +| @addressable +| @any_attr +| @arg_list +| @asm_dir_spec +| @asm_operand +| @asm_operand_expr +| @asm_option +| @asm_piece +| @asm_reg_spec +| @assoc_item_list +| @callable +| @cfg_predicate +| @expr +| @extern_item_list +| @field_list +| @for_binder +| @format_args_arg +| @generic_arg +| @generic_arg_list +| @generic_param +| @generic_param_list +| @impl_restriction +| @item_list +| @label +| @let_else +| @macro_items +| @match_arm +| @match_arm_list +| @match_guard +| @meta +| @mut_restriction +| @name +| @param_base +| @param_list +| @parenthesized_arg_list +| @pat +| @path +| @path_ast_node +| @path_segment +| @rename +| @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 +| @try_block_modifier +| @tuple_field +| @type_bound +| @type_bound_list +| @type_repr +| @use_bound_generic_arg +| @use_bound_generic_args +| @use_tree +| @use_tree_list +| @variant_list +| @visibility +| @visibility_inner +| @where_clause +| @where_pred +; + +crates( + unique int id: @crate +); + +#keyset[id] +crate_names( + int id: @crate ref, + string name: string ref +); + +#keyset[id] +crate_versions( + int id: @crate ref, + string version: string ref +); + +#keyset[id, index] +crate_cfg_options( + int id: @crate ref, + int index: int ref, + string cfg_option: string ref +); + +#keyset[id, index] +crate_named_dependencies( + int id: @crate ref, + int index: int ref, + int named_dependency: @named_crate ref +); + +missings( + unique int id: @missing +); + +unimplementeds( + unique int id: @unimplemented +); + +abis( + unique int id: @abi +); + +#keyset[id] +abi_abi_strings( + int id: @abi ref, + string abi_string: string ref +); + +@addressable = + @item +| @variant +; + +@any_attr = + @attr +| @doc_comment +; + +arg_lists( + unique int id: @arg_list +); + +#keyset[id, index] +arg_list_args( + int id: @arg_list ref, + int index: int ref, + int arg: @expr ref +); + +asm_dir_specs( + unique int id: @asm_dir_spec +); + +@asm_operand = + @asm_const +| @asm_label +| @asm_reg_operand +| @asm_sym +; + +asm_operand_exprs( + unique int id: @asm_operand_expr +); + +#keyset[id] +asm_operand_expr_in_exprs( + int id: @asm_operand_expr ref, + int in_expr: @expr ref +); + +#keyset[id] +asm_operand_expr_out_exprs( + int id: @asm_operand_expr ref, + int out_expr: @expr ref +); + +asm_options( + unique int id: @asm_option +); + +#keyset[id] +asm_option_is_raw( + int id: @asm_option ref +); + +@asm_piece = + @asm_clobber_abi +| @asm_operand_named +| @asm_options_list +; + +asm_reg_specs( + unique int id: @asm_reg_spec +); + +#keyset[id] +asm_reg_spec_identifiers( + int id: @asm_reg_spec ref, + int identifier: @name_ref ref +); + +assoc_item_lists( + unique int id: @assoc_item_list +); + +#keyset[id, index] +assoc_item_list_assoc_items( + int id: @assoc_item_list ref, + int index: int ref, + int assoc_item: @assoc_item ref +); + +#keyset[id, index] +assoc_item_list_attrs( + int id: @assoc_item_list ref, + int index: int ref, + int attr: @any_attr 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: @any_attr ref +); + +@cfg_predicate = + @cfg_atom +| @cfg_composite +; + +@expr = + @array_expr_internal +| @asm_expr +| @await_expr +| @become_expr +| @binary_expr +| @break_expr +| @call_expr +| @cast_expr +| @cfg_pred_expr +| @closure_expr +| @continue_expr +| @field_expr +| @format_args_expr +| @if_expr +| @include_bytes_expr +| @index_expr +| @labelable_expr +| @let_expr +| @literal_expr +| @macro_expr +| @match_expr +| @method_call_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_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: @any_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 +; + +for_binders( + unique int id: @for_binder +); + +#keyset[id] +for_binder_generic_param_lists( + int id: @for_binder ref, + int generic_param_list: @generic_param_list ref +); + +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 +); + +impl_restrictions( + unique int id: @impl_restriction +); + +#keyset[id] +impl_restriction_visibility_inners( + int id: @impl_restriction ref, + int visibility_inner: @visibility_inner 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: @any_attr ref +); + +#keyset[id, index] +item_list_items( + int id: @item_list ref, + int index: int ref, + int item: @item ref +); + +labels( + unique int id: @label +); + +#keyset[id] +label_lifetimes( + int id: @label ref, + int lifetime: @lifetime ref +); + +let_elses( + unique int id: @let_else +); + +#keyset[id] +let_else_block_exprs( + int id: @let_else ref, + int block_expr: @block_expr ref +); + +macro_items( + unique int id: @macro_items +); + +#keyset[id, index] +macro_items_items( + int id: @macro_items ref, + int index: int ref, + int item: @item ref +); + +match_arms( + unique int id: @match_arm +); + +#keyset[id, index] +match_arm_attrs( + int id: @match_arm ref, + int index: int ref, + int attr: @any_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: @any_attr ref +); + +match_guards( + unique int id: @match_guard +); + +#keyset[id] +match_guard_conditions( + int id: @match_guard ref, + int condition: @expr ref +); + +@meta = + @cfg_attr_meta +| @cfg_meta +| @key_value_meta +| @path_meta +| @token_tree_meta +| @unsafe_meta +; + +mut_restrictions( + unique int id: @mut_restriction +); + +#keyset[id] +mut_restriction_is_mut( + int id: @mut_restriction ref +); + +#keyset[id] +mut_restriction_visibility_inners( + int id: @mut_restriction ref, + int visibility_inner: @visibility_inner 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: @any_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 +| @cfg_pred_pat +| @const_block_pat +| @deref_pat +| @ident_pat +| @literal_pat +| @macro_pat +| @not_null +| @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_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_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 +); + +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: @any_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: @any_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: @any_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: @any_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: @any_attr ref +); + +#keyset[id] +struct_field_default_vals( + int id: @struct_field ref, + int default_val: @const_arg ref +); + +#keyset[id] +struct_field_is_unsafe( + int id: @struct_field ref +); + +#keyset[id] +struct_field_mut_restrictions( + int id: @struct_field ref, + int mut_restriction: @mut_restriction 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: @any_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 +); + +try_block_modifiers( + unique int id: @try_block_modifier +); + +#keyset[id] +try_block_modifier_is_try( + int id: @try_block_modifier ref +); + +#keyset[id] +try_block_modifier_type_reprs( + int id: @try_block_modifier ref, + int type_repr: @type_repr ref +); + +tuple_fields( + unique int id: @tuple_field +); + +#keyset[id, index] +tuple_field_attrs( + int id: @tuple_field ref, + int index: int ref, + int attr: @any_attr ref +); + +#keyset[id] +tuple_field_mut_restrictions( + int id: @tuple_field ref, + int mut_restriction: @mut_restriction 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_for_binders( + int id: @type_bound ref, + int for_binder: @for_binder ref +); + +#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 +| @pattern_type_repr +| @ptr_type_repr +| @ref_type_repr +| @slice_type_repr +| @tuple_type_repr +; + +@use_bound_generic_arg = + @lifetime +| @name_ref +; + +use_bound_generic_args( + unique int id: @use_bound_generic_args +); + +#keyset[id, index] +use_bound_generic_args_use_bound_generic_args( + int id: @use_bound_generic_args ref, + int index: int ref, + int use_bound_generic_arg: @use_bound_generic_arg ref +); + +use_trees( + unique int id: @use_tree +); + +#keyset[id] +use_tree_is_glob( + int id: @use_tree ref +); + +#keyset[id] +use_tree_paths( + int id: @use_tree ref, + int path: @path ref +); + +#keyset[id] +use_tree_renames( + int id: @use_tree ref, + int rename: @rename ref +); + +#keyset[id] +use_tree_use_tree_lists( + int id: @use_tree ref, + int use_tree_list: @use_tree_list ref +); + +use_tree_lists( + unique int id: @use_tree_list +); + +#keyset[id, index] +use_tree_list_use_trees( + int id: @use_tree_list ref, + int index: int ref, + int use_tree: @use_tree ref +); + +variant_lists( + unique int id: @variant_list +); + +#keyset[id, index] +variant_list_variants( + int id: @variant_list ref, + int index: int ref, + int variant: @variant ref +); + +visibilities( + unique int id: @visibility +); + +#keyset[id] +visibility_visibility_inners( + int id: @visibility ref, + int visibility_inner: @visibility_inner ref +); + +visibility_inners( + unique int id: @visibility_inner +); + +#keyset[id] +visibility_inner_paths( + int id: @visibility_inner 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_for_binders( + int id: @where_pred ref, + int for_binder: @for_binder 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: @any_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 +); + +#keyset[id, index] +asm_clobber_abi_attrs( + int id: @asm_clobber_abi ref, + int index: int ref, + int attr: @any_attr ref +); + +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_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, index] +asm_operand_named_attrs( + int id: @asm_operand_named ref, + int index: int ref, + int attr: @any_attr 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 +); + +#keyset[id, index] +asm_options_list_attrs( + int id: @asm_options_list ref, + int index: int ref, + int attr: @any_attr 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 +); + +attrs( + unique int id: @attr +); + +#keyset[id] +attr_meta( + int id: @attr ref, + int meta: @meta 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: @any_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: @any_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: @any_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: @any_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_exprs( + unique int id: @call_expr +); + +#keyset[id] +call_expr_arg_lists( + int id: @call_expr ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +call_expr_attrs( + int id: @call_expr ref, + int index: int ref, + int attr: @any_attr ref +); + +#keyset[id] +call_expr_functions( + int id: @call_expr ref, + int function: @expr 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: @any_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 +); + +cfg_atoms( + unique int id: @cfg_atom +); + +cfg_attr_meta( + unique int id: @cfg_attr_meta +); + +#keyset[id] +cfg_attr_meta_cfg_predicates( + int id: @cfg_attr_meta ref, + int cfg_predicate: @cfg_predicate ref +); + +#keyset[id, index] +cfg_attr_meta_metas( + int id: @cfg_attr_meta ref, + int index: int ref, + int meta: @meta ref +); + +cfg_composites( + unique int id: @cfg_composite +); + +#keyset[id, index] +cfg_composite_cfg_predicates( + int id: @cfg_composite ref, + int index: int ref, + int cfg_predicate: @cfg_predicate ref +); + +cfg_meta( + unique int id: @cfg_meta +); + +#keyset[id] +cfg_meta_cfg_predicates( + int id: @cfg_meta ref, + int cfg_predicate: @cfg_predicate ref +); + +cfg_pred_exprs( + unique int id: @cfg_pred_expr +); + +#keyset[id] +cfg_pred_expr_cfg_predicates( + int id: @cfg_pred_expr ref, + int cfg_predicate: @cfg_predicate ref +); + +cfg_pred_pats( + unique int id: @cfg_pred_pat +); + +#keyset[id] +cfg_pred_pat_cfg_predicates( + int id: @cfg_pred_pat ref, + int cfg_predicate: @cfg_predicate ref +); + +closure_exprs( + unique int id: @closure_expr +); + +#keyset[id] +closure_expr_closure_bodies( + int id: @closure_expr ref, + int closure_body: @expr ref +); + +#keyset[id] +closure_expr_for_binders( + int id: @closure_expr ref, + int for_binder: @for_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: @any_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: @any_attr ref +); + +#keyset[id] +continue_expr_lifetimes( + int id: @continue_expr ref, + int lifetime: @lifetime ref +); + +deref_pats( + unique int id: @deref_pat +); + +#keyset[id] +deref_pat_pats( + int id: @deref_pat ref, + int pat: @pat ref +); + +doc_comments( + unique int id: @doc_comment +); + +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: @any_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_for_binders( + int id: @for_type_repr ref, + int for_binder: @for_binder 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: @any_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: @any_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: @any_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 +); + +include_bytes_exprs( + unique int id: @include_bytes_expr +); + +index_exprs( + unique int id: @index_expr +); + +#keyset[id, index] +index_expr_attrs( + int id: @index_expr ref, + int index: int ref, + int attr: @any_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 = + @asm_expr +| @assoc_item +| @extern_block +| @extern_crate +| @extern_item +| @impl +| @macro_def +| @macro_rules +| @module +| @trait +| @type_item +| @use +; + +#keyset[id] +item_attribute_macro_expansions( + int id: @item ref, + int attribute_macro_expansion: @macro_items ref +); + +key_value_meta( + unique int id: @key_value_meta +); + +#keyset[id] +key_value_meta_exprs( + int id: @key_value_meta ref, + int expr: @expr ref +); + +#keyset[id] +key_value_meta_paths( + int id: @key_value_meta ref, + int path: @path 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: @any_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: @any_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: @any_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: @any_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: @any_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 +); + +method_call_exprs( + unique int id: @method_call_expr +); + +#keyset[id] +method_call_expr_arg_lists( + int id: @method_call_expr ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +method_call_expr_attrs( + int id: @method_call_expr ref, + int index: int ref, + int attr: @any_attr ref +); + +#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 +); + +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 +); + +not_nulls( + unique int id: @not_null +); + +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: @any_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: @any_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_expr_base = + @path_expr +; + +path_meta( + unique int id: @path_meta +); + +#keyset[id] +path_meta_paths( + int id: @path_meta ref, + int path: @path ref +); + +path_pats( + unique int id: @path_pat +); + +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 +); + +pattern_type_reprs( + unique int id: @pattern_type_repr +); + +#keyset[id] +pattern_type_repr_pats( + int id: @pattern_type_repr ref, + int pat: @pat ref +); + +#keyset[id] +pattern_type_repr_type_reprs( + int id: @pattern_type_repr ref, + int type_repr: @type_repr 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: @any_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: @any_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: @any_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: @any_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: @any_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_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_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 +); + +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 +); + +token_tree_meta( + unique int id: @token_tree_meta +); + +#keyset[id] +token_tree_meta_paths( + int id: @token_tree_meta ref, + int path: @path ref +); + +#keyset[id] +token_tree_meta_token_trees( + int id: @token_tree_meta ref, + int token_tree: @token_tree 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: @any_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: @any_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_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 +); + +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: @any_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: @any_attr ref +); + +unsafe_meta( + unique int id: @unsafe_meta +); + +#keyset[id] +unsafe_meta_is_unsafe( + int id: @unsafe_meta ref +); + +#keyset[id] +unsafe_meta_meta( + int id: @unsafe_meta ref, + int meta: @meta ref +); + +variants( + unique int id: @variant +); + +#keyset[id, index] +variant_attrs( + int id: @variant ref, + int index: int ref, + int attr: @any_attr ref +); + +#keyset[id] +variant_const_args( + int id: @variant ref, + int const_arg: @const_arg 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: @any_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: @any_attr ref +); + +#keyset[id] +yield_expr_exprs( + int id: @yield_expr ref, + int expr: @expr 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: @any_attr ref +); + +#keyset[id, index] +asm_expr_templates( + int id: @asm_expr ref, + int index: int ref, + int template: @expr ref +); + +@assoc_item = + @const +| @function +| @macro_call +| @type_alias +; + +block_exprs( + unique int id: @block_expr +); + +#keyset[id, index] +block_expr_attrs( + int id: @block_expr ref, + int index: int ref, + int attr: @any_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_unsafe( + int id: @block_expr ref +); + +#keyset[id] +block_expr_stmt_lists( + int id: @block_expr ref, + int stmt_list: @stmt_list ref +); + +#keyset[id] +block_expr_try_block_modifiers( + int id: @block_expr ref, + int try_block_modifier: @try_block_modifier 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: @any_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: @any_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 +); + +@extern_item = + @function +| @macro_call +| @static +| @type_alias +; + +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: @any_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_trait_ties( + int id: @impl ref, + int trait_ty: @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_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: @any_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: @any_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 +); + +modules( + unique int id: @module +); + +#keyset[id, index] +module_attrs( + int id: @module ref, + int index: int ref, + int attr: @any_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: @any_attr 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: @any_attr ref +); + +#keyset[id] +trait_generic_param_lists( + int id: @trait ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +trait_impl_restrictions( + int id: @trait ref, + int impl_restriction: @impl_restriction 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 +); + +@type_item = + @enum +| @struct +| @union +; + +#keyset[id, index] +type_item_derive_macro_expansions( + int id: @type_item ref, + int index: int ref, + int derive_macro_expansion: @macro_items ref +); + +#keyset[id, index] +type_item_attrs( + int id: @type_item ref, + int index: int ref, + int attr: @any_attr ref +); + +#keyset[id] +type_item_generic_param_lists( + int id: @type_item ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +type_item_names( + int id: @type_item ref, + int name: @name ref +); + +#keyset[id] +type_item_visibilities( + int id: @type_item ref, + int visibility: @visibility ref +); + +#keyset[id] +type_item_where_clauses( + int id: @type_item 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: @any_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 +); + +consts( + unique int id: @const +); + +#keyset[id, index] +const_attrs( + int id: @const ref, + int index: int ref, + int attr: @any_attr ref +); + +#keyset[id] +const_bodies( + int id: @const ref, + int body: @expr ref +); + +#keyset[id] +const_generic_param_lists( + int id: @const ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +const_is_const( + int id: @const ref +); + +#keyset[id] +const_is_default( + int id: @const ref +); + +#keyset[id] +const_names( + int id: @const ref, + int name: @name ref +); + +#keyset[id] +const_type_reprs( + int id: @const ref, + int type_repr: @type_repr ref +); + +#keyset[id] +const_visibilities( + int id: @const ref, + int visibility: @visibility ref +); + +#keyset[id] +const_where_clauses( + int id: @const ref, + int where_clause: @where_clause ref +); + +#keyset[id] +const_has_implementation( + int id: @const ref +); + +enums( + unique int id: @enum +); + +#keyset[id] +enum_variant_lists( + int id: @enum ref, + int variant_list: @variant_list 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: @any_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 +); + +functions( + unique int id: @function +); + +#keyset[id] +function_abis( + int id: @function ref, + int abi: @abi ref +); + +#keyset[id] +function_function_bodies( + int id: @function ref, + int function_body: @block_expr ref +); + +#keyset[id] +function_generic_param_lists( + int id: @function ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +function_is_async( + int id: @function ref +); + +#keyset[id] +function_is_const( + int id: @function ref +); + +#keyset[id] +function_is_default( + int id: @function ref +); + +#keyset[id] +function_is_gen( + int id: @function ref +); + +#keyset[id] +function_is_unsafe( + int id: @function ref +); + +#keyset[id] +function_names( + int id: @function ref, + int name: @name ref +); + +#keyset[id] +function_ret_types( + int id: @function ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +function_visibilities( + int id: @function ref, + int visibility: @visibility ref +); + +#keyset[id] +function_where_clauses( + int id: @function ref, + int where_clause: @where_clause ref +); + +#keyset[id] +function_has_implementation( + int id: @function ref +); + +loop_exprs( + unique int id: @loop_expr +); + +#keyset[id, index] +loop_expr_attrs( + int id: @loop_expr ref, + int index: int ref, + int attr: @any_attr 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: @any_attr ref +); + +#keyset[id] +macro_call_paths( + int id: @macro_call ref, + int path: @path ref +); + +#keyset[id] +macro_call_token_trees( + int id: @macro_call ref, + int token_tree: @token_tree ref +); + +#keyset[id] +macro_call_macro_call_expansions( + int id: @macro_call ref, + int macro_call_expansion: @ast_node ref +); + +statics( + unique int id: @static +); + +#keyset[id, index] +static_attrs( + int id: @static ref, + int index: int ref, + int attr: @any_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] +struct_field_lists_( + int id: @struct ref, + int field_list: @field_list 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: @any_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] +union_struct_field_lists( + int id: @union ref, + int struct_field_list: @struct_field_list 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: @any_attr ref +); + +#keyset[id] +while_expr_conditions( + int id: @while_expr ref, + int condition: @expr ref +); diff --git a/rust/ql/lib/upgrades/9487e73d9da6508522f07a34bc4aafa8d55c0f5f/rust.dbscheme b/rust/ql/lib/upgrades/9487e73d9da6508522f07a34bc4aafa8d55c0f5f/rust.dbscheme new file mode 100644 index 000000000000..7980434ec600 --- /dev/null +++ b/rust/ql/lib/upgrades/9487e73d9da6508522f07a34bc4aafa8d55c0f5f/rust.dbscheme @@ -0,0 +1,3753 @@ +// 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_comments (unique int id: @yaml_comment, + string text: string ref, + string tostring: 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 | @yaml_comment; + +/*- Database metadata -*/ + +/** + * The CLI will automatically emit applicable tuples for this table, + * such as `databaseMetadata("isOverlay", "true")` when building an + * overlay database. + */ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +/*- Overlay support -*/ + +/** + * The CLI will automatically emit tuples for each new/modified/deleted file + * when building an overlay database. + */ +overlayChangedFiles( + string path: string ref +); + + +// from prefix.dbscheme +#keyset[id] +locatable_locations( + int id: @locatable ref, + int location: @location_default ref +); + + +// from schema + +@element = + @extractor_step +| @locatable +| @named_crate +| @unextracted +; + +extractor_steps( + unique int id: @extractor_step, + string action: string ref, + int duration_ms: int ref +); + +#keyset[id] +extractor_step_files( + int id: @extractor_step ref, + int file: @file ref +); + +@locatable = + @ast_node +| @crate +; + +named_crates( + unique int id: @named_crate, + string name: string ref, + int crate: @crate ref +); + +@unextracted = + @missing +| @unimplemented +; + +@ast_node = + @abi +| @addressable +| @any_attr +| @arg_list +| @asm_dir_spec +| @asm_operand +| @asm_operand_expr +| @asm_option +| @asm_piece +| @asm_reg_spec +| @assoc_item_list +| @callable +| @cfg_predicate +| @expr +| @extern_item_list +| @field_list +| @for_binder +| @format_args_arg +| @generic_arg +| @generic_arg_list +| @generic_param +| @generic_param_list +| @impl_restriction +| @item_list +| @label +| @let_else +| @macro_items +| @match_arm +| @match_arm_list +| @match_guard +| @meta +| @mut_restriction +| @name +| @param_base +| @param_list +| @parenthesized_arg_list +| @pat +| @path +| @path_ast_node +| @path_segment +| @rename +| @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 +| @try_block_modifier +| @tuple_field +| @type_bound +| @type_bound_list +| @type_repr +| @use_bound_generic_arg +| @use_bound_generic_args +| @use_tree +| @use_tree_list +| @variant_list +| @visibility +| @visibility_inner +| @where_clause +| @where_pred +; + +crates( + unique int id: @crate +); + +#keyset[id] +crate_names( + int id: @crate ref, + string name: string ref +); + +#keyset[id] +crate_versions( + int id: @crate ref, + string version: string ref +); + +#keyset[id, index] +crate_cfg_options( + int id: @crate ref, + int index: int ref, + string cfg_option: string ref +); + +#keyset[id, index] +crate_named_dependencies( + int id: @crate ref, + int index: int ref, + int named_dependency: @named_crate ref +); + +missings( + unique int id: @missing +); + +unimplementeds( + unique int id: @unimplemented +); + +abis( + unique int id: @abi +); + +#keyset[id] +abi_abi_strings( + int id: @abi ref, + string abi_string: string ref +); + +@addressable = + @item +| @variant +; + +@any_attr = + @attr +| @doc_comment +; + +arg_lists( + unique int id: @arg_list +); + +#keyset[id, index] +arg_list_args( + int id: @arg_list ref, + int index: int ref, + int arg: @expr ref +); + +asm_dir_specs( + unique int id: @asm_dir_spec +); + +@asm_operand = + @asm_const +| @asm_label +| @asm_reg_operand +| @asm_sym +; + +asm_operand_exprs( + unique int id: @asm_operand_expr +); + +#keyset[id] +asm_operand_expr_in_exprs( + int id: @asm_operand_expr ref, + int in_expr: @expr ref +); + +#keyset[id] +asm_operand_expr_out_exprs( + int id: @asm_operand_expr ref, + int out_expr: @expr ref +); + +asm_options( + unique int id: @asm_option +); + +#keyset[id] +asm_option_is_raw( + int id: @asm_option ref +); + +@asm_piece = + @asm_clobber_abi +| @asm_operand_named +| @asm_options_list +; + +asm_reg_specs( + unique int id: @asm_reg_spec +); + +#keyset[id] +asm_reg_spec_identifiers( + int id: @asm_reg_spec ref, + int identifier: @name_ref ref +); + +assoc_item_lists( + unique int id: @assoc_item_list +); + +#keyset[id, index] +assoc_item_list_assoc_items( + int id: @assoc_item_list ref, + int index: int ref, + int assoc_item: @assoc_item ref +); + +#keyset[id, index] +assoc_item_list_attrs( + int id: @assoc_item_list ref, + int index: int ref, + int attr: @any_attr 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: @any_attr ref +); + +@cfg_predicate = + @cfg_atom +| @cfg_composite +; + +@expr = + @array_expr_internal +| @asm_expr +| @await_expr +| @become_expr +| @binary_expr +| @break_expr +| @call_expr +| @cast_expr +| @cfg_pred_expr +| @closure_expr +| @continue_expr +| @field_expr +| @format_args_expr +| @if_expr +| @include_bytes_expr +| @index_expr +| @labelable_expr +| @let_expr +| @literal_expr +| @macro_expr +| @match_expr +| @method_call_expr +| @offset_of_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_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: @any_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 +; + +for_binders( + unique int id: @for_binder +); + +#keyset[id] +for_binder_generic_param_lists( + int id: @for_binder ref, + int generic_param_list: @generic_param_list ref +); + +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 +); + +impl_restrictions( + unique int id: @impl_restriction +); + +#keyset[id] +impl_restriction_visibility_inners( + int id: @impl_restriction ref, + int visibility_inner: @visibility_inner 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: @any_attr ref +); + +#keyset[id, index] +item_list_items( + int id: @item_list ref, + int index: int ref, + int item: @item ref +); + +labels( + unique int id: @label +); + +#keyset[id] +label_lifetimes( + int id: @label ref, + int lifetime: @lifetime ref +); + +let_elses( + unique int id: @let_else +); + +#keyset[id] +let_else_block_exprs( + int id: @let_else ref, + int block_expr: @block_expr ref +); + +macro_items( + unique int id: @macro_items +); + +#keyset[id, index] +macro_items_items( + int id: @macro_items ref, + int index: int ref, + int item: @item ref +); + +match_arms( + unique int id: @match_arm +); + +#keyset[id, index] +match_arm_attrs( + int id: @match_arm ref, + int index: int ref, + int attr: @any_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: @any_attr ref +); + +match_guards( + unique int id: @match_guard +); + +#keyset[id] +match_guard_conditions( + int id: @match_guard ref, + int condition: @expr ref +); + +@meta = + @cfg_attr_meta +| @cfg_meta +| @key_value_meta +| @path_meta +| @token_tree_meta +| @unsafe_meta +; + +mut_restrictions( + unique int id: @mut_restriction +); + +#keyset[id] +mut_restriction_is_mut( + int id: @mut_restriction ref +); + +#keyset[id] +mut_restriction_visibility_inners( + int id: @mut_restriction ref, + int visibility_inner: @visibility_inner 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: @any_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 +| @cfg_pred_pat +| @const_block_pat +| @deref_pat +| @ident_pat +| @literal_pat +| @macro_pat +| @not_null +| @or_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_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_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 +); + +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: @any_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: @any_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: @any_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: @any_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: @any_attr ref +); + +#keyset[id] +struct_field_default_vals( + int id: @struct_field ref, + int default_val: @const_arg ref +); + +#keyset[id] +struct_field_is_unsafe( + int id: @struct_field ref +); + +#keyset[id] +struct_field_mut_restrictions( + int id: @struct_field ref, + int mut_restriction: @mut_restriction 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: @any_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 +); + +try_block_modifiers( + unique int id: @try_block_modifier +); + +#keyset[id] +try_block_modifier_is_try( + int id: @try_block_modifier ref +); + +#keyset[id] +try_block_modifier_type_reprs( + int id: @try_block_modifier ref, + int type_repr: @type_repr ref +); + +tuple_fields( + unique int id: @tuple_field +); + +#keyset[id, index] +tuple_field_attrs( + int id: @tuple_field ref, + int index: int ref, + int attr: @any_attr ref +); + +#keyset[id] +tuple_field_mut_restrictions( + int id: @tuple_field ref, + int mut_restriction: @mut_restriction 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_for_binders( + int id: @type_bound ref, + int for_binder: @for_binder ref +); + +#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 +| @pattern_type_repr +| @ptr_type_repr +| @ref_type_repr +| @slice_type_repr +| @tuple_type_repr +; + +@use_bound_generic_arg = + @lifetime +| @name_ref +; + +use_bound_generic_args( + unique int id: @use_bound_generic_args +); + +#keyset[id, index] +use_bound_generic_args_use_bound_generic_args( + int id: @use_bound_generic_args ref, + int index: int ref, + int use_bound_generic_arg: @use_bound_generic_arg ref +); + +use_trees( + unique int id: @use_tree +); + +#keyset[id] +use_tree_is_glob( + int id: @use_tree ref +); + +#keyset[id] +use_tree_paths( + int id: @use_tree ref, + int path: @path ref +); + +#keyset[id] +use_tree_renames( + int id: @use_tree ref, + int rename: @rename ref +); + +#keyset[id] +use_tree_use_tree_lists( + int id: @use_tree ref, + int use_tree_list: @use_tree_list ref +); + +use_tree_lists( + unique int id: @use_tree_list +); + +#keyset[id, index] +use_tree_list_use_trees( + int id: @use_tree_list ref, + int index: int ref, + int use_tree: @use_tree ref +); + +variant_lists( + unique int id: @variant_list +); + +#keyset[id, index] +variant_list_variants( + int id: @variant_list ref, + int index: int ref, + int variant: @variant ref +); + +visibilities( + unique int id: @visibility +); + +#keyset[id] +visibility_visibility_inners( + int id: @visibility ref, + int visibility_inner: @visibility_inner ref +); + +visibility_inners( + unique int id: @visibility_inner +); + +#keyset[id] +visibility_inner_paths( + int id: @visibility_inner 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_for_binders( + int id: @where_pred ref, + int for_binder: @for_binder 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: @any_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 +); + +#keyset[id, index] +asm_clobber_abi_attrs( + int id: @asm_clobber_abi ref, + int index: int ref, + int attr: @any_attr ref +); + +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_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, index] +asm_operand_named_attrs( + int id: @asm_operand_named ref, + int index: int ref, + int attr: @any_attr 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 +); + +#keyset[id, index] +asm_options_list_attrs( + int id: @asm_options_list ref, + int index: int ref, + int attr: @any_attr 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 +); + +attrs( + unique int id: @attr +); + +#keyset[id] +attr_meta( + int id: @attr ref, + int meta: @meta 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: @any_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: @any_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: @any_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: @any_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_exprs( + unique int id: @call_expr +); + +#keyset[id] +call_expr_arg_lists( + int id: @call_expr ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +call_expr_attrs( + int id: @call_expr ref, + int index: int ref, + int attr: @any_attr ref +); + +#keyset[id] +call_expr_functions( + int id: @call_expr ref, + int function: @expr 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: @any_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 +); + +cfg_atoms( + unique int id: @cfg_atom +); + +cfg_attr_meta( + unique int id: @cfg_attr_meta +); + +#keyset[id] +cfg_attr_meta_cfg_predicates( + int id: @cfg_attr_meta ref, + int cfg_predicate: @cfg_predicate ref +); + +#keyset[id, index] +cfg_attr_meta_metas( + int id: @cfg_attr_meta ref, + int index: int ref, + int meta: @meta ref +); + +cfg_composites( + unique int id: @cfg_composite +); + +#keyset[id, index] +cfg_composite_cfg_predicates( + int id: @cfg_composite ref, + int index: int ref, + int cfg_predicate: @cfg_predicate ref +); + +cfg_meta( + unique int id: @cfg_meta +); + +#keyset[id] +cfg_meta_cfg_predicates( + int id: @cfg_meta ref, + int cfg_predicate: @cfg_predicate ref +); + +cfg_pred_exprs( + unique int id: @cfg_pred_expr +); + +#keyset[id] +cfg_pred_expr_cfg_predicates( + int id: @cfg_pred_expr ref, + int cfg_predicate: @cfg_predicate ref +); + +cfg_pred_pats( + unique int id: @cfg_pred_pat +); + +#keyset[id] +cfg_pred_pat_cfg_predicates( + int id: @cfg_pred_pat ref, + int cfg_predicate: @cfg_predicate ref +); + +closure_exprs( + unique int id: @closure_expr +); + +#keyset[id] +closure_expr_closure_bodies( + int id: @closure_expr ref, + int closure_body: @expr ref +); + +#keyset[id] +closure_expr_for_binders( + int id: @closure_expr ref, + int for_binder: @for_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: @any_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: @any_attr ref +); + +#keyset[id] +continue_expr_lifetimes( + int id: @continue_expr ref, + int lifetime: @lifetime ref +); + +deref_pats( + unique int id: @deref_pat +); + +#keyset[id] +deref_pat_pats( + int id: @deref_pat ref, + int pat: @pat ref +); + +doc_comments( + unique int id: @doc_comment +); + +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: @any_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_for_binders( + int id: @for_type_repr ref, + int for_binder: @for_binder 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: @any_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: @any_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: @any_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 +); + +include_bytes_exprs( + unique int id: @include_bytes_expr +); + +index_exprs( + unique int id: @index_expr +); + +#keyset[id, index] +index_expr_attrs( + int id: @index_expr ref, + int index: int ref, + int attr: @any_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 = + @asm_expr +| @assoc_item +| @extern_block +| @extern_crate +| @extern_item +| @impl +| @macro_def +| @macro_rules +| @module +| @trait +| @type_item +| @use +; + +#keyset[id] +item_attribute_macro_expansions( + int id: @item ref, + int attribute_macro_expansion: @macro_items ref +); + +key_value_meta( + unique int id: @key_value_meta +); + +#keyset[id] +key_value_meta_exprs( + int id: @key_value_meta ref, + int expr: @expr ref +); + +#keyset[id] +key_value_meta_paths( + int id: @key_value_meta ref, + int path: @path 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: @any_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: @any_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: @any_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: @any_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, index] +macro_expr_attrs( + int id: @macro_expr ref, + int index: int ref, + int attr: @any_attr ref +); + +#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: @any_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 +); + +method_call_exprs( + unique int id: @method_call_expr +); + +#keyset[id] +method_call_expr_arg_lists( + int id: @method_call_expr ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +method_call_expr_attrs( + int id: @method_call_expr ref, + int index: int ref, + int attr: @any_attr ref +); + +#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 +); + +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 +); + +not_nulls( + unique int id: @not_null +); + +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: @any_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_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_expr_base = + @path_expr +; + +path_meta( + unique int id: @path_meta +); + +#keyset[id] +path_meta_paths( + int id: @path_meta ref, + int path: @path ref +); + +path_pats( + unique int id: @path_pat +); + +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 +); + +pattern_type_reprs( + unique int id: @pattern_type_repr +); + +#keyset[id] +pattern_type_repr_pats( + int id: @pattern_type_repr ref, + int pat: @pat ref +); + +#keyset[id] +pattern_type_repr_type_reprs( + int id: @pattern_type_repr ref, + int type_repr: @type_repr 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: @any_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: @any_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: @any_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: @any_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: @any_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_exprs( + unique int id: @struct_expr +); + +#keyset[id, index] +struct_expr_attrs( + int id: @struct_expr ref, + int index: int ref, + int attr: @any_attr ref +); + +#keyset[id] +struct_expr_struct_expr_field_lists( + int id: @struct_expr ref, + int struct_expr_field_list: @struct_expr_field_list 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 +); + +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 +); + +token_tree_meta( + unique int id: @token_tree_meta +); + +#keyset[id] +token_tree_meta_paths( + int id: @token_tree_meta ref, + int path: @path ref +); + +#keyset[id] +token_tree_meta_token_trees( + int id: @token_tree_meta ref, + int token_tree: @token_tree 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: @any_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: @any_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_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 +); + +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: @any_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: @any_attr ref +); + +unsafe_meta( + unique int id: @unsafe_meta +); + +#keyset[id] +unsafe_meta_is_unsafe( + int id: @unsafe_meta ref +); + +#keyset[id] +unsafe_meta_meta( + int id: @unsafe_meta ref, + int meta: @meta ref +); + +variants( + unique int id: @variant +); + +#keyset[id, index] +variant_attrs( + int id: @variant ref, + int index: int ref, + int attr: @any_attr ref +); + +#keyset[id] +variant_const_args( + int id: @variant ref, + int const_arg: @const_arg 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: @any_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: @any_attr ref +); + +#keyset[id] +yield_expr_exprs( + int id: @yield_expr ref, + int expr: @expr 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: @any_attr ref +); + +#keyset[id, index] +asm_expr_templates( + int id: @asm_expr ref, + int index: int ref, + int template: @expr ref +); + +@assoc_item = + @const +| @function +| @macro_call +| @type_alias +; + +block_exprs( + unique int id: @block_expr +); + +#keyset[id, index] +block_expr_attrs( + int id: @block_expr ref, + int index: int ref, + int attr: @any_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_unsafe( + int id: @block_expr ref +); + +#keyset[id] +block_expr_stmt_lists( + int id: @block_expr ref, + int stmt_list: @stmt_list ref +); + +#keyset[id] +block_expr_try_block_modifiers( + int id: @block_expr ref, + int try_block_modifier: @try_block_modifier 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: @any_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: @any_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 +); + +@extern_item = + @function +| @macro_call +| @static +| @type_alias +; + +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: @any_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_trait_ties( + int id: @impl ref, + int trait_ty: @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_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: @any_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: @any_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 +); + +modules( + unique int id: @module +); + +#keyset[id, index] +module_attrs( + int id: @module ref, + int index: int ref, + int attr: @any_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: @any_attr 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: @any_attr ref +); + +#keyset[id] +trait_generic_param_lists( + int id: @trait ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +trait_impl_restrictions( + int id: @trait ref, + int impl_restriction: @impl_restriction 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 +); + +@type_item = + @enum +| @struct +| @union +; + +#keyset[id, index] +type_item_derive_macro_expansions( + int id: @type_item ref, + int index: int ref, + int derive_macro_expansion: @macro_items ref +); + +#keyset[id, index] +type_item_attrs( + int id: @type_item ref, + int index: int ref, + int attr: @any_attr ref +); + +#keyset[id] +type_item_generic_param_lists( + int id: @type_item ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +type_item_names( + int id: @type_item ref, + int name: @name ref +); + +#keyset[id] +type_item_visibilities( + int id: @type_item ref, + int visibility: @visibility ref +); + +#keyset[id] +type_item_where_clauses( + int id: @type_item 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: @any_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 +); + +consts( + unique int id: @const +); + +#keyset[id, index] +const_attrs( + int id: @const ref, + int index: int ref, + int attr: @any_attr ref +); + +#keyset[id] +const_bodies( + int id: @const ref, + int body: @expr ref +); + +#keyset[id] +const_generic_param_lists( + int id: @const ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +const_is_const( + int id: @const ref +); + +#keyset[id] +const_is_default( + int id: @const ref +); + +#keyset[id] +const_names( + int id: @const ref, + int name: @name ref +); + +#keyset[id] +const_type_reprs( + int id: @const ref, + int type_repr: @type_repr ref +); + +#keyset[id] +const_visibilities( + int id: @const ref, + int visibility: @visibility ref +); + +#keyset[id] +const_where_clauses( + int id: @const ref, + int where_clause: @where_clause ref +); + +#keyset[id] +const_has_implementation( + int id: @const ref +); + +enums( + unique int id: @enum +); + +#keyset[id] +enum_variant_lists( + int id: @enum ref, + int variant_list: @variant_list 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: @any_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 +); + +functions( + unique int id: @function +); + +#keyset[id] +function_abis( + int id: @function ref, + int abi: @abi ref +); + +#keyset[id] +function_function_bodies( + int id: @function ref, + int function_body: @block_expr ref +); + +#keyset[id] +function_generic_param_lists( + int id: @function ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +function_is_async( + int id: @function ref +); + +#keyset[id] +function_is_const( + int id: @function ref +); + +#keyset[id] +function_is_default( + int id: @function ref +); + +#keyset[id] +function_is_gen( + int id: @function ref +); + +#keyset[id] +function_is_unsafe( + int id: @function ref +); + +#keyset[id] +function_names( + int id: @function ref, + int name: @name ref +); + +#keyset[id] +function_ret_types( + int id: @function ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +function_visibilities( + int id: @function ref, + int visibility: @visibility ref +); + +#keyset[id] +function_where_clauses( + int id: @function ref, + int where_clause: @where_clause ref +); + +#keyset[id] +function_has_implementation( + int id: @function ref +); + +loop_exprs( + unique int id: @loop_expr +); + +#keyset[id, index] +loop_expr_attrs( + int id: @loop_expr ref, + int index: int ref, + int attr: @any_attr 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: @any_attr ref +); + +#keyset[id] +macro_call_paths( + int id: @macro_call ref, + int path: @path ref +); + +#keyset[id] +macro_call_token_trees( + int id: @macro_call ref, + int token_tree: @token_tree ref +); + +#keyset[id] +macro_call_macro_call_expansions( + int id: @macro_call ref, + int macro_call_expansion: @ast_node ref +); + +statics( + unique int id: @static +); + +#keyset[id, index] +static_attrs( + int id: @static ref, + int index: int ref, + int attr: @any_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] +struct_field_lists_( + int id: @struct ref, + int field_list: @field_list 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: @any_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] +union_struct_field_lists( + int id: @union ref, + int struct_field_list: @struct_field_list 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: @any_attr ref +); + +#keyset[id] +while_expr_conditions( + int id: @while_expr ref, + int condition: @expr ref +); diff --git a/rust/ql/lib/upgrades/9487e73d9da6508522f07a34bc4aafa8d55c0f5f/upgrade.properties b/rust/ql/lib/upgrades/9487e73d9da6508522f07a34bc4aafa8d55c0f5f/upgrade.properties new file mode 100644 index 000000000000..202c3973d95f --- /dev/null +++ b/rust/ql/lib/upgrades/9487e73d9da6508522f07a34bc4aafa8d55c0f5f/upgrade.properties @@ -0,0 +1,112 @@ +description: Remove parenthesized expression and pattern nodes +compatibility: partial + +locatable_locations.rel: run upgrade.ql new_locatable_locations +macro_call_macro_call_expansions.rel: run upgrade.ql new_macro_call_macro_call_expansions +comments.rel: run upgrade.ql new_comments + +arg_list_args.rel: run upgrade.ql new_arg_list_args +asm_operand_expr_in_exprs.rel: run upgrade.ql new_asm_operand_expr_in_exprs +asm_operand_expr_out_exprs.rel: run upgrade.ql new_asm_operand_expr_out_exprs +format_args_arg_exprs.rel: run upgrade.ql new_format_args_arg_exprs +match_arm_exprs.rel: run upgrade.ql new_match_arm_exprs +match_arm_pats.rel: run upgrade.ql new_match_arm_pats +match_guard_conditions.rel: run upgrade.ql new_match_guard_conditions +stmt_list_tail_exprs.rel: run upgrade.ql new_stmt_list_tail_exprs +struct_expr_field_exprs.rel: run upgrade.ql new_struct_expr_field_exprs +struct_expr_field_list_spreads.rel: run upgrade.ql new_struct_expr_field_list_spreads +struct_pat_field_pats.rel: run upgrade.ql new_struct_pat_field_pats +array_expr_internal_exprs.rel: run upgrade.ql new_array_expr_internal_exprs +asm_const_exprs.rel: run upgrade.ql new_asm_const_exprs +await_expr_exprs.rel: run upgrade.ql new_await_expr_exprs +become_expr_exprs.rel: run upgrade.ql new_become_expr_exprs +binary_expr_lhs.rel: run upgrade.ql new_binary_expr_lhs +binary_expr_rhs.rel: run upgrade.ql new_binary_expr_rhs +box_pat_pats.rel: run upgrade.ql new_box_pat_pats +break_expr_exprs.rel: run upgrade.ql new_break_expr_exprs +call_expr_functions.rel: run upgrade.ql new_call_expr_functions +cast_expr_exprs.rel: run upgrade.ql new_cast_expr_exprs +closure_expr_closure_bodies.rel: run upgrade.ql new_closure_expr_closure_bodies +const_arg_exprs.rel: run upgrade.ql new_const_arg_exprs +deref_pat_pats.rel: run upgrade.ql new_deref_pat_pats +expr_stmt_exprs.rel: run upgrade.ql new_expr_stmt_exprs +field_expr_containers.rel: run upgrade.ql new_field_expr_containers +format_args_expr_templates.rel: run upgrade.ql new_format_args_expr_templates +ident_pat_pats.rel: run upgrade.ql new_ident_pat_pats +if_expr_conditions.rel: run upgrade.ql new_if_expr_conditions +if_expr_elses.rel: run upgrade.ql new_if_expr_elses +index_expr_bases.rel: run upgrade.ql new_index_expr_bases +index_expr_indices.rel: run upgrade.ql new_index_expr_indices +key_value_meta_exprs.rel: run upgrade.ql new_key_value_meta_exprs +let_expr_scrutinees.rel: run upgrade.ql new_let_expr_scrutinees +let_expr_pats.rel: run upgrade.ql new_let_expr_pats +let_stmt_initializers.rel: run upgrade.ql new_let_stmt_initializers +let_stmt_pats.rel: run upgrade.ql new_let_stmt_pats +match_expr_scrutinees.rel: run upgrade.ql new_match_expr_scrutinees +method_call_expr_receivers.rel: run upgrade.ql new_method_call_expr_receivers +or_pat_pats.rel: run upgrade.ql new_or_pat_pats +param_pats.rel: run upgrade.ql new_param_pats +pattern_type_repr_pats.rel: run upgrade.ql new_pattern_type_repr_pats +prefix_expr_exprs.rel: run upgrade.ql new_prefix_expr_exprs +range_expr_ends.rel: run upgrade.ql new_range_expr_ends +range_expr_starts.rel: run upgrade.ql new_range_expr_starts +range_pat_ends.rel: run upgrade.ql new_range_pat_ends +range_pat_starts.rel: run upgrade.ql new_range_pat_starts +ref_expr_exprs.rel: run upgrade.ql new_ref_expr_exprs +ref_pat_pats.rel: run upgrade.ql new_ref_pat_pats +return_expr_exprs.rel: run upgrade.ql new_return_expr_exprs +slice_pat_pats.rel: run upgrade.ql new_slice_pat_pats +try_expr_exprs.rel: run upgrade.ql new_try_expr_exprs +tuple_expr_fields.rel: run upgrade.ql new_tuple_expr_fields +tuple_pat_fields.rel: run upgrade.ql new_tuple_pat_fields +tuple_struct_pat_fields.rel: run upgrade.ql new_tuple_struct_pat_fields +yeet_expr_exprs.rel: run upgrade.ql new_yeet_expr_exprs +yield_expr_exprs.rel: run upgrade.ql new_yield_expr_exprs +asm_expr_templates.rel: run upgrade.ql new_asm_expr_templates +const_bodies.rel: run upgrade.ql new_const_bodies +for_expr_iterables.rel: run upgrade.ql new_for_expr_iterables +for_expr_pats.rel: run upgrade.ql new_for_expr_pats +static_bodies.rel: run upgrade.ql new_static_bodies +while_expr_conditions.rel: run upgrade.ql new_while_expr_conditions + +array_expr_internal_attrs.rel: run upgrade.ql new_array_expr_internal_attrs +block_expr_attrs.rel: run upgrade.ql new_block_expr_attrs +callable_attrs.rel: run upgrade.ql new_callable_attrs +asm_expr_attrs.rel: run upgrade.ql new_asm_expr_attrs +await_expr_attrs.rel: run upgrade.ql new_await_expr_attrs +become_expr_attrs.rel: run upgrade.ql new_become_expr_attrs +binary_expr_attrs.rel: run upgrade.ql new_binary_expr_attrs +break_expr_attrs.rel: run upgrade.ql new_break_expr_attrs +call_expr_attrs.rel: run upgrade.ql new_call_expr_attrs +cast_expr_attrs.rel: run upgrade.ql new_cast_expr_attrs +continue_expr_attrs.rel: run upgrade.ql new_continue_expr_attrs +field_expr_attrs.rel: run upgrade.ql new_field_expr_attrs +format_args_expr_attrs.rel: run upgrade.ql new_format_args_expr_attrs +for_expr_attrs.rel: run upgrade.ql new_for_expr_attrs +if_expr_attrs.rel: run upgrade.ql new_if_expr_attrs +index_expr_attrs.rel: run upgrade.ql new_index_expr_attrs +let_expr_attrs.rel: run upgrade.ql new_let_expr_attrs +literal_expr_attrs.rel: run upgrade.ql new_literal_expr_attrs +loop_expr_attrs.rel: run upgrade.ql new_loop_expr_attrs +macro_expr_attrs.rel: run upgrade.ql new_macro_expr_attrs +match_expr_attrs.rel: run upgrade.ql new_match_expr_attrs +method_call_expr_attrs.rel: run upgrade.ql new_method_call_expr_attrs +offset_of_expr_attrs.rel: run upgrade.ql new_offset_of_expr_attrs +path_expr_attrs.rel: run upgrade.ql new_path_expr_attrs +prefix_expr_attrs.rel: run upgrade.ql new_prefix_expr_attrs +range_expr_attrs.rel: run upgrade.ql new_range_expr_attrs +ref_expr_attrs.rel: run upgrade.ql new_ref_expr_attrs +return_expr_attrs.rel: run upgrade.ql new_return_expr_attrs +try_expr_attrs.rel: run upgrade.ql new_try_expr_attrs +struct_expr_attrs.rel: run upgrade.ql new_struct_expr_attrs +tuple_expr_attrs.rel: run upgrade.ql new_tuple_expr_attrs +underscore_expr_attrs.rel: run upgrade.ql new_underscore_expr_attrs +yeet_expr_attrs.rel: run upgrade.ql new_yeet_expr_attrs +yield_expr_attrs.rel: run upgrade.ql new_yield_expr_attrs +while_expr_attrs.rel: run upgrade.ql new_while_expr_attrs + +paren_exprs.rel: delete +paren_expr_exprs.rel: delete +paren_expr_attrs.rel: delete +paren_pats.rel: delete +paren_pat_pats.rel: delete diff --git a/rust/ql/lib/upgrades/9487e73d9da6508522f07a34bc4aafa8d55c0f5f/upgrade.ql b/rust/ql/lib/upgrades/9487e73d9da6508522f07a34bc4aafa8d55c0f5f/upgrade.ql new file mode 100644 index 000000000000..ee77bd5215ee --- /dev/null +++ b/rust/ql/lib/upgrades/9487e73d9da6508522f07a34bc4aafa8d55c0f5f/upgrade.ql @@ -0,0 +1,697 @@ +class Element extends @element { + string toString() { none() } +} + +class Location extends @location_default { + string toString() { none() } +} + +class Expr extends Element, @expr { } + +class Pat extends Element, @pat { } + +class AnyAttr extends Element, @any_attr { } + +class ParenExpr extends Element, @paren_expr { } + +class ArgList extends Element, @arg_list { } + +class ArrayExprInternal extends Element, @array_expr_internal { } + +class BlockExpr extends Element, @block_expr { } + +class AsmConst extends Element, @asm_const { } + +class AsmExpr extends Element, @asm_expr { } + +class AsmOperandExpr extends Element, @asm_operand_expr { } + +class AwaitExpr extends Element, @await_expr { } + +class BecomeExpr extends Element, @become_expr { } + +class BinaryExpr extends Element, @binary_expr { } + +class BoxPat extends Element, @box_pat { } + +class BreakExpr extends Element, @break_expr { } + +class CallExpr extends Element, @call_expr { } + +class CastExpr extends Element, @cast_expr { } + +class ClosureExpr extends Element, @closure_expr { } + +class Const extends Element, @const { } + +class ConstArg extends Element, @const_arg { } + +class ContinueExpr extends Element, @continue_expr { } + +class DerefPat extends Element, @deref_pat { } + +class ExprStmt extends Element, @expr_stmt { } + +class FieldExpr extends Element, @field_expr { } + +class ForExpr extends Element, @for_expr { } + +class FormatArgsArg extends Element, @format_args_arg { } + +class FormatArgsExpr extends Element, @format_args_expr { } + +class IdentPat extends Element, @ident_pat { } + +class IfExpr extends Element, @if_expr { } + +class IndexExpr extends Element, @index_expr { } + +class KeyValueMeta extends Element, @key_value_meta { } + +class LetExpr extends Element, @let_expr { } + +class LetStmt extends Element, @let_stmt { } + +class LiteralExpr extends Element, @literal_expr { } + +class MatchArm extends Element, @match_arm { } + +class MatchExpr extends Element, @match_expr { } + +class MatchGuard extends Element, @match_guard { } + +class MacroExpr extends Element, @macro_expr { } + +class MethodCallExpr extends Element, @method_call_expr { } + +class OrPat extends Element, @or_pat { } + +class OffsetOfExpr extends Element, @offset_of_expr { } + +class Param extends Element, @param { } + +class PatternTypeRepr extends Element, @pattern_type_repr { } + +class PathExpr extends Element, @path_expr { } + +class PrefixExpr extends Element, @prefix_expr { } + +class RangeExpr extends Element, @range_expr { } + +class RangePat extends Element, @range_pat { } + +class RefExpr extends Element, @ref_expr { } + +class RefPat extends Element, @ref_pat { } + +class ReturnExpr extends Element, @return_expr { } + +class SlicePat extends Element, @slice_pat { } + +class Static extends Element, @static { } + +class StmtList extends Element, @stmt_list { } + +class StructExpr extends Element, @struct_expr { } + +class StructExprField extends Element, @struct_expr_field { } + +class StructExprFieldList extends Element, @struct_expr_field_list { } + +class StructPatField extends Element, @struct_pat_field { } + +class TryExpr extends Element, @try_expr { } + +class TupleExpr extends Element, @tuple_expr { } + +class TuplePat extends Element, @tuple_pat { } + +class TupleStructPat extends Element, @tuple_struct_pat { } + +class LoopExpr extends Element, @loop_expr { } + +class UnderscoreExpr extends Element, @underscore_expr { } + +class WhileExpr extends Element, @while_expr { } + +class YeetExpr extends Element, @yeet_expr { } + +class YieldExpr extends Element, @yield_expr { } + +private predicate stripExpr(Expr expr, Expr unwrapped) { + expr = unwrapped and not paren_exprs(expr) + or + exists(Expr inner | + paren_expr_exprs(expr, inner) and + stripExpr(inner, unwrapped) + ) +} + +private predicate stripPat(Pat pat, Pat unwrapped) { + pat = unwrapped and not paren_pats(pat) + or + exists(Pat inner | + paren_pat_pats(pat, inner) and + stripPat(inner, unwrapped) + ) +} + +private predicate stripAstNode(Element node, Element unwrapped) { + exists(Expr expr | node = expr and stripExpr(expr, unwrapped)) + or + exists(Pat pat | node = pat and stripPat(pat, unwrapped)) + or + node = unwrapped and not paren_exprs(node) and not paren_pats(node) +} + +private predicate deletedNode(Element id) { paren_exprs(id) or paren_pats(id) } + +private predicate wrapsExpr(Expr outer, Expr inner) { + paren_expr_exprs(outer, inner) + or + exists(Expr child | + paren_expr_exprs(outer, child) and + wrapsExpr(child, inner) + ) +} + +private int numberOfParenthesizedExprAttrs(Expr expr) { + result = + count(ParenExpr wrapper, int index | + stripExpr(wrapper, expr) and + paren_expr_attrs(wrapper, index, _) + ) +} + +private int numberOfOuterParenthesizedExprAttrs(ParenExpr expr) { + result = + count(ParenExpr outer, int index | + wrapsExpr(outer, expr) and + outer != expr and + paren_expr_attrs(outer, index, _) + ) +} + +private predicate exprAttrs(Element id, int index, AnyAttr attr) { + array_expr_internal_attrs(id, index, attr) or + asm_expr_attrs(id, index, attr) or + await_expr_attrs(id, index, attr) or + become_expr_attrs(id, index, attr) or + binary_expr_attrs(id, index, attr) or + break_expr_attrs(id, index, attr) or + call_expr_attrs(id, index, attr) or + cast_expr_attrs(id, index, attr) or + block_expr_attrs(id, index, attr) or + callable_attrs(id, index, attr) or + continue_expr_attrs(id, index, attr) or + field_expr_attrs(id, index, attr) or + format_args_expr_attrs(id, index, attr) or + for_expr_attrs(id, index, attr) or + if_expr_attrs(id, index, attr) or + index_expr_attrs(id, index, attr) or + let_expr_attrs(id, index, attr) or + literal_expr_attrs(id, index, attr) or + loop_expr_attrs(id, index, attr) or + match_expr_attrs(id, index, attr) or + method_call_expr_attrs(id, index, attr) or + offset_of_expr_attrs(id, index, attr) or + path_expr_attrs(id, index, attr) or + prefix_expr_attrs(id, index, attr) or + range_expr_attrs(id, index, attr) or + ref_expr_attrs(id, index, attr) or + return_expr_attrs(id, index, attr) or + try_expr_attrs(id, index, attr) or + tuple_expr_attrs(id, index, attr) or + underscore_expr_attrs(id, index, attr) or + while_expr_attrs(id, index, attr) or + yeet_expr_attrs(id, index, attr) or + yield_expr_attrs(id, index, attr) +} + +private predicate mergedExprAttrs(Expr expr, int index, AnyAttr attr) { + exists(int originalIndex | + exprAttrs(expr, originalIndex, attr) and + index = originalIndex + numberOfParenthesizedExprAttrs(expr) + ) + or + exists(ParenExpr wrapper, int originalIndex | + paren_expr_attrs(wrapper, originalIndex, attr) and + stripExpr(wrapper, expr) and + index = numberOfOuterParenthesizedExprAttrs(wrapper) + originalIndex + ) +} + +query predicate new_locatable_locations(Element id, Location location) { + locatable_locations(id, location) and not deletedNode(id) +} + +query predicate new_macro_call_macro_call_expansions(Element macroCall, Element expansion) { + exists(Element oldExpansion | + macro_call_macro_call_expansions(macroCall, oldExpansion) and + stripAstNode(oldExpansion, expansion) + ) +} + +query predicate new_comments(Element id, Element parent, string text) { + exists(Element oldParent | + comments(id, oldParent, text) and + stripAstNode(oldParent, parent) + ) +} + +query predicate new_arg_list_args(ArgList id, int index, Expr arg) { + arg = + rank[index + 1](Expr oldArg, Expr unwrappedArg, int oldIndex | + arg_list_args(id, oldIndex, oldArg) and stripExpr(oldArg, unwrappedArg) + | + unwrappedArg order by oldIndex + ) +} + +query predicate new_asm_operand_expr_in_exprs(AsmOperandExpr id, Expr in_expr) { + exists(Expr oldExpr | asm_operand_expr_in_exprs(id, oldExpr) and stripExpr(oldExpr, in_expr)) +} + +query predicate new_asm_operand_expr_out_exprs(AsmOperandExpr id, Expr out_expr) { + exists(Expr oldExpr | asm_operand_expr_out_exprs(id, oldExpr) and stripExpr(oldExpr, out_expr)) +} + +query predicate new_format_args_arg_exprs(FormatArgsArg id, Expr expr) { + exists(Expr oldExpr | format_args_arg_exprs(id, oldExpr) and stripExpr(oldExpr, expr)) +} + +query predicate new_match_arm_exprs(MatchArm id, Expr expr) { + exists(Expr oldExpr | match_arm_exprs(id, oldExpr) and stripExpr(oldExpr, expr)) +} + +query predicate new_match_arm_pats(MatchArm id, Pat pat) { + exists(Pat oldPat | match_arm_pats(id, oldPat) and stripPat(oldPat, pat)) +} + +query predicate new_match_guard_conditions(MatchGuard id, Expr condition) { + exists(Expr oldExpr | match_guard_conditions(id, oldExpr) and stripExpr(oldExpr, condition)) +} + +query predicate new_stmt_list_tail_exprs(StmtList id, Expr tail_expr) { + exists(Expr oldExpr | stmt_list_tail_exprs(id, oldExpr) and stripExpr(oldExpr, tail_expr)) +} + +query predicate new_struct_expr_field_exprs(StructExprField id, Expr expr) { + exists(Expr oldExpr | struct_expr_field_exprs(id, oldExpr) and stripExpr(oldExpr, expr)) +} + +query predicate new_struct_expr_field_list_spreads(StructExprFieldList id, Expr spread) { + exists(Expr oldExpr | struct_expr_field_list_spreads(id, oldExpr) and stripExpr(oldExpr, spread)) +} + +query predicate new_struct_pat_field_pats(StructPatField id, Pat pat) { + exists(Pat oldPat | struct_pat_field_pats(id, oldPat) and stripPat(oldPat, pat)) +} + +query predicate new_array_expr_internal_exprs(ArrayExprInternal id, int index, Expr expr) { + expr = + rank[index + 1](Expr oldExpr, Expr unwrappedExpr, int oldIndex | + array_expr_internal_exprs(id, oldIndex, oldExpr) and stripExpr(oldExpr, unwrappedExpr) + | + unwrappedExpr order by oldIndex + ) +} + +query predicate new_asm_const_exprs(AsmConst id, Expr expr) { + exists(Expr oldExpr | asm_const_exprs(id, oldExpr) and stripExpr(oldExpr, expr)) +} + +query predicate new_await_expr_exprs(AwaitExpr id, Expr expr) { + exists(Expr oldExpr | await_expr_exprs(id, oldExpr) and stripExpr(oldExpr, expr)) +} + +query predicate new_become_expr_exprs(BecomeExpr id, Expr expr) { + exists(Expr oldExpr | become_expr_exprs(id, oldExpr) and stripExpr(oldExpr, expr)) +} + +query predicate new_binary_expr_lhs(BinaryExpr id, Expr lhs) { + exists(Expr oldExpr | binary_expr_lhs(id, oldExpr) and stripExpr(oldExpr, lhs)) +} + +query predicate new_binary_expr_rhs(BinaryExpr id, Expr rhs) { + exists(Expr oldExpr | binary_expr_rhs(id, oldExpr) and stripExpr(oldExpr, rhs)) +} + +query predicate new_box_pat_pats(BoxPat id, Pat pat) { + exists(Pat oldPat | box_pat_pats(id, oldPat) and stripPat(oldPat, pat)) +} + +query predicate new_break_expr_exprs(BreakExpr id, Expr expr) { + exists(Expr oldExpr | break_expr_exprs(id, oldExpr) and stripExpr(oldExpr, expr)) +} + +query predicate new_call_expr_functions(CallExpr id, Expr function) { + exists(Expr oldExpr | call_expr_functions(id, oldExpr) and stripExpr(oldExpr, function)) +} + +query predicate new_cast_expr_exprs(CastExpr id, Expr expr) { + exists(Expr oldExpr | cast_expr_exprs(id, oldExpr) and stripExpr(oldExpr, expr)) +} + +query predicate new_closure_expr_closure_bodies(ClosureExpr id, Expr closure_body) { + exists(Expr oldExpr | + closure_expr_closure_bodies(id, oldExpr) and stripExpr(oldExpr, closure_body) + ) +} + +query predicate new_const_arg_exprs(ConstArg id, Expr expr) { + exists(Expr oldExpr | const_arg_exprs(id, oldExpr) and stripExpr(oldExpr, expr)) +} + +query predicate new_deref_pat_pats(DerefPat id, Pat pat) { + exists(Pat oldPat | deref_pat_pats(id, oldPat) and stripPat(oldPat, pat)) +} + +query predicate new_expr_stmt_exprs(ExprStmt id, Expr expr) { + exists(Expr oldExpr | expr_stmt_exprs(id, oldExpr) and stripExpr(oldExpr, expr)) +} + +query predicate new_field_expr_containers(FieldExpr id, Expr container) { + exists(Expr oldExpr | field_expr_containers(id, oldExpr) and stripExpr(oldExpr, container)) +} + +query predicate new_format_args_expr_templates(FormatArgsExpr id, Expr template) { + exists(Expr oldExpr | format_args_expr_templates(id, oldExpr) and stripExpr(oldExpr, template)) +} + +query predicate new_ident_pat_pats(IdentPat id, Pat pat) { + exists(Pat oldPat | ident_pat_pats(id, oldPat) and stripPat(oldPat, pat)) +} + +query predicate new_if_expr_conditions(IfExpr id, Expr condition) { + exists(Expr oldExpr | if_expr_conditions(id, oldExpr) and stripExpr(oldExpr, condition)) +} + +query predicate new_if_expr_elses(IfExpr id, Expr else_) { + exists(Expr oldExpr | if_expr_elses(id, oldExpr) and stripExpr(oldExpr, else_)) +} + +query predicate new_index_expr_bases(IndexExpr id, Expr base) { + exists(Expr oldExpr | index_expr_bases(id, oldExpr) and stripExpr(oldExpr, base)) +} + +query predicate new_index_expr_indices(IndexExpr id, Expr index) { + exists(Expr oldExpr | index_expr_indices(id, oldExpr) and stripExpr(oldExpr, index)) +} + +query predicate new_key_value_meta_exprs(KeyValueMeta id, Expr expr) { + exists(Expr oldExpr | key_value_meta_exprs(id, oldExpr) and stripExpr(oldExpr, expr)) +} + +query predicate new_let_expr_scrutinees(LetExpr id, Expr scrutinee) { + exists(Expr oldExpr | let_expr_scrutinees(id, oldExpr) and stripExpr(oldExpr, scrutinee)) +} + +query predicate new_let_expr_pats(LetExpr id, Pat pat) { + exists(Pat oldPat | let_expr_pats(id, oldPat) and stripPat(oldPat, pat)) +} + +query predicate new_let_stmt_initializers(LetStmt id, Expr initializer) { + exists(Expr oldExpr | let_stmt_initializers(id, oldExpr) and stripExpr(oldExpr, initializer)) +} + +query predicate new_let_stmt_pats(LetStmt id, Pat pat) { + exists(Pat oldPat | let_stmt_pats(id, oldPat) and stripPat(oldPat, pat)) +} + +query predicate new_match_expr_scrutinees(MatchExpr id, Expr scrutinee) { + exists(Expr oldExpr | match_expr_scrutinees(id, oldExpr) and stripExpr(oldExpr, scrutinee)) +} + +query predicate new_method_call_expr_receivers(MethodCallExpr id, Expr receiver) { + exists(Expr oldExpr | method_call_expr_receivers(id, oldExpr) and stripExpr(oldExpr, receiver)) +} + +query predicate new_or_pat_pats(OrPat id, int index, Pat pat) { + pat = + rank[index + 1](Pat oldPat, Pat unwrappedPat, int oldIndex | + or_pat_pats(id, oldIndex, oldPat) and stripPat(oldPat, unwrappedPat) + | + unwrappedPat order by oldIndex + ) +} + +query predicate new_param_pats(Param id, Pat pat) { + exists(Pat oldPat | param_pats(id, oldPat) and stripPat(oldPat, pat)) +} + +query predicate new_pattern_type_repr_pats(PatternTypeRepr id, Pat pat) { + exists(Pat oldPat | pattern_type_repr_pats(id, oldPat) and stripPat(oldPat, pat)) +} + +query predicate new_prefix_expr_exprs(PrefixExpr id, Expr expr) { + exists(Expr oldExpr | prefix_expr_exprs(id, oldExpr) and stripExpr(oldExpr, expr)) +} + +query predicate new_range_expr_ends(RangeExpr id, Expr end) { + exists(Expr oldExpr | range_expr_ends(id, oldExpr) and stripExpr(oldExpr, end)) +} + +query predicate new_range_expr_starts(RangeExpr id, Expr start) { + exists(Expr oldExpr | range_expr_starts(id, oldExpr) and stripExpr(oldExpr, start)) +} + +query predicate new_range_pat_ends(RangePat id, Pat end) { + exists(Pat oldPat | range_pat_ends(id, oldPat) and stripPat(oldPat, end)) +} + +query predicate new_range_pat_starts(RangePat id, Pat start) { + exists(Pat oldPat | range_pat_starts(id, oldPat) and stripPat(oldPat, start)) +} + +query predicate new_ref_expr_exprs(RefExpr id, Expr expr) { + exists(Expr oldExpr | ref_expr_exprs(id, oldExpr) and stripExpr(oldExpr, expr)) +} + +query predicate new_ref_pat_pats(RefPat id, Pat pat) { + exists(Pat oldPat | ref_pat_pats(id, oldPat) and stripPat(oldPat, pat)) +} + +query predicate new_return_expr_exprs(ReturnExpr id, Expr expr) { + exists(Expr oldExpr | return_expr_exprs(id, oldExpr) and stripExpr(oldExpr, expr)) +} + +query predicate new_slice_pat_pats(SlicePat id, int index, Pat pat) { + pat = + rank[index + 1](Pat oldPat, Pat unwrappedPat, int oldIndex | + slice_pat_pats(id, oldIndex, oldPat) and stripPat(oldPat, unwrappedPat) + | + unwrappedPat order by oldIndex + ) +} + +query predicate new_try_expr_exprs(TryExpr id, Expr expr) { + exists(Expr oldExpr | try_expr_exprs(id, oldExpr) and stripExpr(oldExpr, expr)) +} + +query predicate new_tuple_expr_fields(TupleExpr id, int index, Expr field) { + field = + rank[index + 1](Expr oldExpr, Expr unwrappedExpr, int oldIndex | + tuple_expr_fields(id, oldIndex, oldExpr) and stripExpr(oldExpr, unwrappedExpr) + | + unwrappedExpr order by oldIndex + ) +} + +query predicate new_tuple_pat_fields(TuplePat id, int index, Pat field) { + field = + rank[index + 1](Pat oldPat, Pat unwrappedPat, int oldIndex | + tuple_pat_fields(id, oldIndex, oldPat) and stripPat(oldPat, unwrappedPat) + | + unwrappedPat order by oldIndex + ) +} + +query predicate new_tuple_struct_pat_fields(TupleStructPat id, int index, Pat field) { + field = + rank[index + 1](Pat oldPat, Pat unwrappedPat, int oldIndex | + tuple_struct_pat_fields(id, oldIndex, oldPat) and stripPat(oldPat, unwrappedPat) + | + unwrappedPat order by oldIndex + ) +} + +query predicate new_yeet_expr_exprs(YeetExpr id, Expr expr) { + exists(Expr oldExpr | yeet_expr_exprs(id, oldExpr) and stripExpr(oldExpr, expr)) +} + +query predicate new_yield_expr_exprs(YieldExpr id, Expr expr) { + exists(Expr oldExpr | yield_expr_exprs(id, oldExpr) and stripExpr(oldExpr, expr)) +} + +query predicate new_asm_expr_templates(AsmExpr id, int index, Expr template) { + template = + rank[index + 1](Expr oldExpr, Expr unwrappedExpr, int oldIndex | + asm_expr_templates(id, oldIndex, oldExpr) and stripExpr(oldExpr, unwrappedExpr) + | + unwrappedExpr order by oldIndex + ) +} + +query predicate new_const_bodies(Const id, Expr body) { + exists(Expr oldExpr | const_bodies(id, oldExpr) and stripExpr(oldExpr, body)) +} + +query predicate new_for_expr_iterables(ForExpr id, Expr iterable) { + exists(Expr oldExpr | for_expr_iterables(id, oldExpr) and stripExpr(oldExpr, iterable)) +} + +query predicate new_for_expr_pats(ForExpr id, Pat pat) { + exists(Pat oldPat | for_expr_pats(id, oldPat) and stripPat(oldPat, pat)) +} + +query predicate new_static_bodies(Static id, Expr body) { + exists(Expr oldExpr | static_bodies(id, oldExpr) and stripExpr(oldExpr, body)) +} + +query predicate new_while_expr_conditions(WhileExpr id, Expr condition) { + exists(Expr oldExpr | while_expr_conditions(id, oldExpr) and stripExpr(oldExpr, condition)) +} + +query predicate new_array_expr_internal_attrs(ArrayExprInternal id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_block_expr_attrs(BlockExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_callable_attrs(Element id, int index, AnyAttr attr) { + exists(ClosureExpr expr | id = expr and mergedExprAttrs(expr, index, attr)) + or + callable_attrs(id, index, attr) and + not exists(ClosureExpr expr | id = expr) +} + +query predicate new_asm_expr_attrs(AsmExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_await_expr_attrs(AwaitExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_become_expr_attrs(BecomeExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_binary_expr_attrs(BinaryExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_break_expr_attrs(BreakExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_call_expr_attrs(CallExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_cast_expr_attrs(CastExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_continue_expr_attrs(ContinueExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_field_expr_attrs(FieldExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_format_args_expr_attrs(FormatArgsExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_for_expr_attrs(ForExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_if_expr_attrs(IfExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_index_expr_attrs(IndexExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_let_expr_attrs(LetExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_literal_expr_attrs(LiteralExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_loop_expr_attrs(LoopExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_macro_expr_attrs(MacroExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_match_expr_attrs(MatchExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_method_call_expr_attrs(MethodCallExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_offset_of_expr_attrs(OffsetOfExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_path_expr_attrs(PathExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_prefix_expr_attrs(PrefixExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_range_expr_attrs(RangeExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_ref_expr_attrs(RefExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_return_expr_attrs(ReturnExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_try_expr_attrs(TryExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_struct_expr_attrs(StructExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_tuple_expr_attrs(TupleExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_underscore_expr_attrs(UnderscoreExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_yeet_expr_attrs(YeetExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_yield_expr_attrs(YieldExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} + +query predicate new_while_expr_attrs(WhileExpr id, int index, AnyAttr attr) { + mergedExprAttrs(id, index, attr) +} diff --git a/rust/ql/test/extractor-tests/generated/.generated_tests.list b/rust/ql/test/extractor-tests/generated/.generated_tests.list index c21b0d493bad..85068306a94c 100644 --- a/rust/ql/test/extractor-tests/generated/.generated_tests.list +++ b/rust/ql/test/extractor-tests/generated/.generated_tests.list @@ -93,8 +93,6 @@ OffsetOfExpr/gen_offset_of_expr.rs 8e2077b4d7b85c91c17c3630511bc4f929950e9007261 OrPat/gen_or_pat.rs 71feef6e056bfe4cc8c22c9eb54fa3fecef613606769061d0efd059adbbd6f56 71feef6e056bfe4cc8c22c9eb54fa3fecef613606769061d0efd059adbbd6f56 Param/gen_param.rs 39f3979d6cb10e4c43e0b5601af2a92b7520a75a104211955bbbb5e6f13e9db9 39f3979d6cb10e4c43e0b5601af2a92b7520a75a104211955bbbb5e6f13e9db9 ParamList/gen_param_list.rs a842001c434b9716a131a77b5ec78ee5dd911ef7c42d22bf5e7bdac24c9a20bd a842001c434b9716a131a77b5ec78ee5dd911ef7c42d22bf5e7bdac24c9a20bd -ParenExpr/gen_paren_expr.rs caaf419c59d65ca911479dea7d62756a55593b3da65b02942a36abd975389f29 caaf419c59d65ca911479dea7d62756a55593b3da65b02942a36abd975389f29 -ParenPat/gen_paren_pat.rs 47a0c5b6ec3e51452c2c2e6882ed98aca9891b08246ec231484df8d226985212 47a0c5b6ec3e51452c2c2e6882ed98aca9891b08246ec231484df8d226985212 ParenTypeRepr/gen_paren_type_repr.rs 28194256a3d7bdcc49283f4be5e3ad3efb0ea2996126abed2a76c6cd9954c879 28194256a3d7bdcc49283f4be5e3ad3efb0ea2996126abed2a76c6cd9954c879 ParenthesizedArgList/gen_parenthesized_arg_list.rs 161083eb292e1d70ca97b5afda8e27bc96db95678b39cb680de638ac0e49be72 161083eb292e1d70ca97b5afda8e27bc96db95678b39cb680de638ac0e49be72 Path/gen_path.rs 490268d6bfb1635883b8bdefc683d59c4dd0e9c7f86c2e55954661efb3ab0253 490268d6bfb1635883b8bdefc683d59c4dd0e9c7f86c2e55954661efb3ab0253 diff --git a/rust/ql/test/extractor-tests/generated/.gitattributes b/rust/ql/test/extractor-tests/generated/.gitattributes index 04681384c1b2..6c6eb4fd4895 100644 --- a/rust/ql/test/extractor-tests/generated/.gitattributes +++ b/rust/ql/test/extractor-tests/generated/.gitattributes @@ -95,8 +95,6 @@ /OrPat/gen_or_pat.rs linguist-generated /Param/gen_param.rs linguist-generated /ParamList/gen_param_list.rs linguist-generated -/ParenExpr/gen_paren_expr.rs linguist-generated -/ParenPat/gen_paren_pat.rs linguist-generated /ParenTypeRepr/gen_paren_type_repr.rs linguist-generated /ParenthesizedArgList/gen_parenthesized_arg_list.rs linguist-generated /Path/gen_path.rs linguist-generated diff --git a/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr.expected b/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr.expected deleted file mode 100644 index 57a89a35cdef..000000000000 --- a/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr.expected +++ /dev/null @@ -1,5 +0,0 @@ -instances -| gen_paren_expr.rs:7:5:7:11 | (...) | -getAttr -getExpr -| gen_paren_expr.rs:7:5:7:11 | (...) | gen_paren_expr.rs:7:6:7:10 | ... + ... | diff --git a/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr.ql b/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr.ql deleted file mode 100644 index d62c0964705a..000000000000 --- a/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr.ql +++ /dev/null @@ -1,13 +0,0 @@ -// generated by codegen, do not edit -import codeql.rust.elements -import TestUtils - -query predicate instances(ParenExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(ParenExpr x, int index, AnyAttr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getExpr(ParenExpr x, Expr getExpr) { - toBeTested(x) and not x.isUnknown() and getExpr = x.getExpr() -} diff --git a/rust/ql/test/extractor-tests/generated/ParenExpr/gen_paren_expr.rs b/rust/ql/test/extractor-tests/generated/ParenExpr/gen_paren_expr.rs deleted file mode 100644 index 292053784d80..000000000000 --- a/rust/ql/test/extractor-tests/generated/ParenExpr/gen_paren_expr.rs +++ /dev/null @@ -1,8 +0,0 @@ -// generated by codegen, do not edit - -fn test_paren_expr() -> () { - // A parenthesized expression. - // - // For example: - (x + y) -} diff --git a/rust/ql/test/extractor-tests/generated/ParenPat/Cargo.lock b/rust/ql/test/extractor-tests/generated/ParenPat/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ParenPat/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat.expected b/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat.expected deleted file mode 100644 index 2e26da6da78c..000000000000 --- a/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat.expected +++ /dev/null @@ -1,4 +0,0 @@ -instances -| gen_paren_pat.rs:7:9:7:11 | (...) | -getPat -| gen_paren_pat.rs:7:9:7:11 | (...) | gen_paren_pat.rs:7:10:7:10 | x | diff --git a/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat.ql b/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat.ql deleted file mode 100644 index 18b7c74b94b8..000000000000 --- a/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat.ql +++ /dev/null @@ -1,9 +0,0 @@ -// generated by codegen, do not edit -import codeql.rust.elements -import TestUtils - -query predicate instances(ParenPat x) { toBeTested(x) and not x.isUnknown() } - -query predicate getPat(ParenPat x, Pat getPat) { - toBeTested(x) and not x.isUnknown() and getPat = x.getPat() -} diff --git a/rust/ql/test/extractor-tests/generated/ParenPat/gen_paren_pat.rs b/rust/ql/test/extractor-tests/generated/ParenPat/gen_paren_pat.rs deleted file mode 100644 index 33785db95d3d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ParenPat/gen_paren_pat.rs +++ /dev/null @@ -1,9 +0,0 @@ -// generated by codegen, do not edit - -fn test_paren_pat() -> () { - // A parenthesized pattern. - // - // For example: - let (x) = 1; - // ^^^ -} diff --git a/rust/ql/test/extractor-tests/macro-expansion/PrintAst.expected b/rust/ql/test/extractor-tests/macro-expansion/PrintAst.expected index a21af0bfc183..5a1568f12d83 100644 --- a/rust/ql/test/extractor-tests/macro-expansion/PrintAst.expected +++ b/rust/ql/test/extractor-tests/macro-expansion/PrintAst.expected @@ -579,13 +579,12 @@ macro_expansion.rs: # 56| getMacroCallExpansion(): [FormatArgsExpr] FormatArgsExpr # 57| getArg(0): [FormatArgsArg] FormatArgsArg # 57| getExpr(): [StringLiteralExpr] "hi" -# 56| getTemplate(): [ParenExpr] (...) -# 56| getExpr(): [MacroExpr] MacroExpr -# 56| getMacroCall(): [MacroCall] concat!... -# 56| getPath(): [Path] concat -# 56| getSegment(): [PathSegment] concat -# 56| getIdentifier(): [NameRef] concat -# 56| getTokenTree(): [TokenTree] TokenTree +# 56| getTemplate(): [MacroExpr] MacroExpr +# 56| getMacroCall(): [MacroCall] concat!... +# 56| getPath(): [Path] concat +# 56| getSegment(): [PathSegment] concat +# 56| getIdentifier(): [NameRef] concat +# 56| getTokenTree(): [TokenTree] TokenTree # 55| getFunction(): [PathExpr] ...::format # 55| getPath(): [Path] ...::format # 55| getQualifier(): [Path] ...::fmt @@ -1386,13 +1385,12 @@ proc_macro.rs: # 12| getSegment(): [PathSegment] new_ast # 12| getIdentifier(): [NameRef] new_ast # 9| getIdentifier(): [NameRef] map -# 8| getReceiver(): [ParenExpr] (...) -# 8| getExpr(): [RangeExpr] 0..number -# 8| getEnd(): [VariableAccess] number -# 8| getPath(): [Path] number -# 8| getSegment(): [PathSegment] number -# 8| getIdentifier(): [NameRef] number -# 8| getStart(): [IntegerLiteralExpr] 0 +# 8| getReceiver(): [RangeExpr] 0..number +# 8| getEnd(): [VariableAccess] number +# 8| getPath(): [Path] number +# 8| getSegment(): [PathSegment] number +# 8| getIdentifier(): [NameRef] number +# 8| getStart(): [IntegerLiteralExpr] 0 # 8| getPat(): [IdentPat] items # 8| getName(): [Name] items # 15| getTailExpr(): [MethodCallExpr] ... .into() diff --git a/rust/ql/test/extractor-tests/generated/ParenExpr/Cargo.lock b/rust/ql/test/extractor-tests/parenthesized/Cargo.lock similarity index 100% rename from rust/ql/test/extractor-tests/generated/ParenExpr/Cargo.lock rename to rust/ql/test/extractor-tests/parenthesized/Cargo.lock diff --git a/rust/ql/test/extractor-tests/parenthesized/parenthesized.rs b/rust/ql/test/extractor-tests/parenthesized/parenthesized.rs new file mode 100644 index 000000000000..f6877d335d99 --- /dev/null +++ b/rust/ql/test/extractor-tests/parenthesized/parenthesized.rs @@ -0,0 +1,21 @@ +fn attributed_non_leaf_expr() { + let _ = [#[allow(unused)] (1 + 2)]; +} + +struct S { + field: i32, +} + +fn attributed_macro_expr() { + let _ = [#[allow(unused)] (vec![1])]; +} + +fn attributed_struct_expr() { + let _ = [#[allow(unused)] (S { field: 1 })]; +} + +fn comments_in_parentheses() { + let _ = (1 + 2 /* expression parentheses */); + let (value /* pattern parentheses */) = 1; + let _ = value; +} diff --git a/rust/ql/test/extractor-tests/parenthesized/parenthesized_attrs.expected b/rust/ql/test/extractor-tests/parenthesized/parenthesized_attrs.expected new file mode 100644 index 000000000000..a4933188a80d --- /dev/null +++ b/rust/ql/test/extractor-tests/parenthesized/parenthesized_attrs.expected @@ -0,0 +1 @@ +| parenthesized.rs:2:32:2:36 | ... + ... | parenthesized.rs:2:14:2:29 | Attr | diff --git a/rust/ql/test/extractor-tests/parenthesized/parenthesized_attrs.ql b/rust/ql/test/extractor-tests/parenthesized/parenthesized_attrs.ql new file mode 100644 index 000000000000..17077e5d77ed --- /dev/null +++ b/rust/ql/test/extractor-tests/parenthesized/parenthesized_attrs.ql @@ -0,0 +1,5 @@ +import codeql.rust.elements + +from BinaryExpr expr +where expr.getAnAttr() instanceof Attr +select expr, expr.getAnAttr() diff --git a/rust/ql/test/extractor-tests/parenthesized/parenthesized_comments.expected b/rust/ql/test/extractor-tests/parenthesized/parenthesized_comments.expected new file mode 100644 index 000000000000..f33bd502f3a9 --- /dev/null +++ b/rust/ql/test/extractor-tests/parenthesized/parenthesized_comments.expected @@ -0,0 +1,2 @@ +| parenthesized.rs:18:20:18:47 | /*...*/ | parenthesized.rs:18:14:18:18 | ... + ... | +| parenthesized.rs:19:16:19:40 | /*...*/ | parenthesized.rs:19:10:19:14 | value | diff --git a/rust/ql/test/extractor-tests/parenthesized/parenthesized_comments.ql b/rust/ql/test/extractor-tests/parenthesized/parenthesized_comments.ql new file mode 100644 index 000000000000..5be53c2ccae8 --- /dev/null +++ b/rust/ql/test/extractor-tests/parenthesized/parenthesized_comments.ql @@ -0,0 +1,7 @@ +import codeql.rust.elements + +from Comment comment +where + comment.getText() = "/* expression parentheses */" or + comment.getText() = "/* pattern parentheses */" +select comment, comment.getParent() diff --git a/rust/ql/test/extractor-tests/parenthesized/parenthesized_special_attrs.expected b/rust/ql/test/extractor-tests/parenthesized/parenthesized_special_attrs.expected new file mode 100644 index 000000000000..ccc89b27a3eb --- /dev/null +++ b/rust/ql/test/extractor-tests/parenthesized/parenthesized_special_attrs.expected @@ -0,0 +1,2 @@ +| parenthesized.rs:10:32:10:38 | MacroExpr | parenthesized.rs:10:14:10:29 | Attr | +| parenthesized.rs:14:32:14:45 | S {...} | parenthesized.rs:14:14:14:29 | Attr | diff --git a/rust/ql/test/extractor-tests/parenthesized/parenthesized_special_attrs.ql b/rust/ql/test/extractor-tests/parenthesized/parenthesized_special_attrs.ql new file mode 100644 index 000000000000..0ba8861e9380 --- /dev/null +++ b/rust/ql/test/extractor-tests/parenthesized/parenthesized_special_attrs.ql @@ -0,0 +1,8 @@ +import codeql.rust.elements + +from Expr expr, AnyAttr attr +where + exists(MacroExpr macro | expr = macro and macro.getAnAttr() = attr) + or + exists(StructExpr struct | expr = struct and struct.getAnAttr() = attr) +select expr, attr diff --git a/rust/ql/test/library-tests/dataflow/global/inline-flow.expected b/rust/ql/test/library-tests/dataflow/global/inline-flow.expected index 8ed5ee8ac041..e281c8d483e5 100644 --- a/rust/ql/test/library-tests/dataflow/global/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/global/inline-flow.expected @@ -17,10 +17,11 @@ edges | main.rs:38:16:38:24 | source(...) | main.rs:38:5:38:5 | [post] a [MyStruct] | provenance | | | main.rs:39:10:39:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | provenance | | | main.rs:39:10:39:10 | a [MyStruct] | main.rs:39:10:39:21 | a.get_data() | provenance | | +| main.rs:44:6:47:5 | [post] { ... } [&ref, MyStruct] | main.rs:46:9:46:14 | [post] &mut a [&ref, MyStruct] | provenance | | | main.rs:46:9:46:14 | [post] &mut a [&ref, MyStruct] | main.rs:46:14:46:14 | [post] a [MyStruct] | provenance | | | main.rs:46:14:46:14 | [post] a [MyStruct] | main.rs:49:10:49:10 | a [MyStruct] | provenance | | | main.rs:48:15:48:23 | source(...) | main.rs:26:28:26:33 | ...: i64 | provenance | | -| main.rs:48:15:48:23 | source(...) | main.rs:46:9:46:14 | [post] &mut a [&ref, MyStruct] | provenance | | +| main.rs:48:15:48:23 | source(...) | main.rs:44:6:47:5 | [post] { ... } [&ref, MyStruct] | provenance | | | main.rs:49:10:49:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | provenance | | | main.rs:49:10:49:10 | a [MyStruct] | main.rs:49:10:49:21 | a.get_data() | provenance | | | main.rs:52:12:52:17 | ...: i64 | main.rs:53:10:53:10 | n | provenance | | @@ -258,6 +259,7 @@ nodes | main.rs:38:16:38:24 | source(...) | semmle.label | source(...) | | main.rs:39:10:39:10 | a [MyStruct] | semmle.label | a [MyStruct] | | main.rs:39:10:39:21 | a.get_data() | semmle.label | a.get_data() | +| main.rs:44:6:47:5 | [post] { ... } [&ref, MyStruct] | semmle.label | [post] { ... } [&ref, MyStruct] | | main.rs:46:9:46:14 | [post] &mut a [&ref, MyStruct] | semmle.label | [post] &mut a [&ref, MyStruct] | | main.rs:46:14:46:14 | [post] a [MyStruct] | semmle.label | [post] a [MyStruct] | | main.rs:48:15:48:23 | source(...) | semmle.label | source(...) | @@ -509,7 +511,7 @@ nodes subpaths | main.rs:38:16:38:24 | source(...) | main.rs:26:28:26:33 | ...: i64 | main.rs:26:17:26:25 | SelfParam [Return] [&ref, MyStruct] | main.rs:38:5:38:5 | [post] a [MyStruct] | | main.rs:39:10:39:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | main.rs:30:31:32:5 | { ... } | main.rs:39:10:39:21 | a.get_data() | -| main.rs:48:15:48:23 | source(...) | main.rs:26:28:26:33 | ...: i64 | main.rs:26:17:26:25 | SelfParam [Return] [&ref, MyStruct] | main.rs:46:9:46:14 | [post] &mut a [&ref, MyStruct] | +| main.rs:48:15:48:23 | source(...) | main.rs:26:28:26:33 | ...: i64 | main.rs:26:17:26:25 | SelfParam [Return] [&ref, MyStruct] | main.rs:44:6:47:5 | [post] { ... } [&ref, MyStruct] | | main.rs:49:10:49:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | main.rs:30:31:32:5 | { ... } | main.rs:49:10:49:21 | a.get_data() | | main.rs:67:26:67:26 | a | main.rs:61:17:61:22 | ...: i64 | main.rs:61:32:63:1 | { ... } | main.rs:67:13:67:27 | pass_through(...) | | main.rs:72:26:75:5 | { ... } | main.rs:61:17:61:22 | ...: i64 | main.rs:61:32:63:1 | { ... } | main.rs:72:13:75:6 | pass_through(...) | diff --git a/rust/ql/test/library-tests/dataflow/lambdas/inline-flow.expected b/rust/ql/test/library-tests/dataflow/lambdas/inline-flow.expected index 0b8ed1253aa4..d7071417b883 100644 --- a/rust/ql/test/library-tests/dataflow/lambdas/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/lambdas/inline-flow.expected @@ -12,12 +12,14 @@ edges | main.rs:27:10:27:14 | mut x | main.rs:28:6:28:6 | x | provenance | | | main.rs:27:22:27:35 | TupleExpr [tuple.0] | main.rs:27:9:27:18 | TuplePat [tuple.0] | provenance | | | main.rs:27:23:27:31 | source(...) | main.rs:27:22:27:35 | TupleExpr [tuple.0] | provenance | | -| main.rs:28:6:28:6 | x | main.rs:29:14:29:14 | x | provenance | | +| main.rs:28:6:28:6 | x | main.rs:29:6:29:15 | \|...\| ... : ... => .. [captured x] | provenance | | +| main.rs:29:6:29:15 | \|...\| ... : ... => .. [captured x] | main.rs:29:14:29:14 | x | provenance | | | main.rs:33:9:33:16 | TuplePat [tuple.0] | main.rs:33:10:33:14 | ref x | provenance | | | main.rs:33:10:33:14 | ref x | main.rs:33:14:33:14 | x [&ref] | provenance | | -| main.rs:33:14:33:14 | x [&ref] | main.rs:34:15:34:15 | x [&ref] | provenance | | +| main.rs:33:14:33:14 | x [&ref] | main.rs:34:6:34:16 | \|...\| ... : ... => .. [captured x, &ref] | provenance | | | main.rs:33:20:33:31 | TupleExpr [tuple.0] | main.rs:33:9:33:16 | TuplePat [tuple.0] | provenance | | | main.rs:33:21:33:29 | source(...) | main.rs:33:20:33:31 | TupleExpr [tuple.0] | provenance | | +| main.rs:34:6:34:16 | \|...\| ... : ... => .. [captured x, &ref] | main.rs:34:15:34:15 | x [&ref] | provenance | | | main.rs:34:15:34:15 | x [&ref] | main.rs:34:14:34:15 | * ... | provenance | MaD:1 | | main.rs:38:20:38:27 | ... | main.rs:38:30:38:56 | if cond {...} else {...} | provenance | | | main.rs:39:9:39:9 | a | main.rs:40:21:40:21 | a | provenance | | @@ -108,12 +110,14 @@ nodes | main.rs:27:22:27:35 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | | main.rs:27:23:27:31 | source(...) | semmle.label | source(...) | | main.rs:28:6:28:6 | x | semmle.label | x | +| main.rs:29:6:29:15 | \|...\| ... : ... => .. [captured x] | semmle.label | \|...\| ... : ... => .. [captured x] | | main.rs:29:14:29:14 | x | semmle.label | x | | main.rs:33:9:33:16 | TuplePat [tuple.0] | semmle.label | TuplePat [tuple.0] | | main.rs:33:10:33:14 | ref x | semmle.label | ref x | | main.rs:33:14:33:14 | x [&ref] | semmle.label | x [&ref] | | main.rs:33:20:33:31 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | | main.rs:33:21:33:29 | source(...) | semmle.label | source(...) | +| main.rs:34:6:34:16 | \|...\| ... : ... => .. [captured x, &ref] | semmle.label | \|...\| ... : ... => .. [captured x, &ref] | | main.rs:34:14:34:15 | * ... | semmle.label | * ... | | main.rs:34:15:34:15 | x [&ref] | semmle.label | x [&ref] | | main.rs:38:20:38:27 | ... | semmle.label | ... | diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index 2e8352e06195..6321f11c3b85 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -318,7 +318,6 @@ inferCertainType | blanket_impl.rs:47:18:47:25 | "{x1:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | blanket_impl.rs:47:18:47:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:47:18:47:25 | { ... } | | {EXTERNAL LOCATION} | () | -| blanket_impl.rs:48:18:48:22 | (...) | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:48:19:48:21 | &S1 | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:49:9:49:26 | MacroExpr | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:49:18:49:25 | "{x2:?}\\n" | | {EXTERNAL LOCATION} | & | @@ -330,7 +329,6 @@ inferCertainType | blanket_impl.rs:51:18:51:25 | "{x3:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | blanket_impl.rs:51:18:51:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:51:18:51:25 | { ... } | | {EXTERNAL LOCATION} | () | -| blanket_impl.rs:52:18:52:22 | (...) | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:52:19:52:21 | &S1 | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:53:9:53:26 | MacroExpr | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:53:18:53:25 | "{x4:?}\\n" | | {EXTERNAL LOCATION} | & | @@ -348,7 +346,6 @@ inferCertainType | blanket_impl.rs:57:18:57:25 | "{x6:?}\\n" | TRef | {EXTERNAL LOCATION} | str | | blanket_impl.rs:57:18:57:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:57:18:57:25 | { ... } | | {EXTERNAL LOCATION} | () | -| blanket_impl.rs:58:18:58:22 | (...) | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:58:19:58:21 | &S2 | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:59:9:59:26 | MacroExpr | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:59:18:59:25 | "{x7:?}\\n" | | {EXTERNAL LOCATION} | & | @@ -452,16 +449,11 @@ inferCertainType | blanket_impl.rs:252:15:252:18 | SelfParam | TRef | blanket_impl.rs:250:10:250:10 | T | | blanket_impl.rs:252:21:252:22 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:255:33:263:5 | { ... } | | {EXTERNAL LOCATION} | () | -| blanket_impl.rs:257:18:257:22 | (...) | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:257:19:257:21 | &S1 | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:258:18:258:23 | (...) | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:258:18:258:23 | (...) | TRef | {EXTERNAL LOCATION} | & | | blanket_impl.rs:258:19:258:22 | &... | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:258:19:258:22 | &... | TRef | {EXTERNAL LOCATION} | & | | blanket_impl.rs:258:20:258:22 | &S1 | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:260:18:260:22 | (...) | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:260:19:260:21 | &S1 | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:262:18:262:22 | (...) | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:262:19:262:21 | &S2 | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:272:21:272:25 | SelfParam | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:272:21:272:25 | SelfParam | TRef | blanket_impl.rs:271:5:274:5 | Self [trait Executor] | @@ -927,9 +919,6 @@ inferCertainType | closure.rs:254:13:254:13 | c | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:254:17:254:21 | \|...\| x | | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:254:17:254:21 | \|...\| x | dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:255:9:255:12 | (...) | | {EXTERNAL LOCATION} | & | -| closure.rs:255:9:255:12 | (...) | TRef | {EXTERNAL LOCATION} | dyn Fn | -| closure.rs:255:9:255:12 | (...) | TRef.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | | closure.rs:255:10:255:11 | &c | | {EXTERNAL LOCATION} | & | | closure.rs:255:10:255:11 | &c | TRef | {EXTERNAL LOCATION} | dyn Fn | | closure.rs:255:10:255:11 | &c | TRef.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | @@ -1085,9 +1074,7 @@ inferCertainType | dereference.rs:188:22:188:24 | arg | | {EXTERNAL LOCATION} | &mut | | dereference.rs:188:22:188:24 | arg | TRefMut | dereference.rs:159:5:159:13 | S | | dereference.rs:193:19:200:5 | { ... } | | {EXTERNAL LOCATION} | () | -| dereference.rs:194:17:194:20 | (...) | | {EXTERNAL LOCATION} | & | | dereference.rs:194:18:194:19 | &S | | {EXTERNAL LOCATION} | & | -| dereference.rs:196:17:196:24 | (...) | | {EXTERNAL LOCATION} | &mut | | dereference.rs:196:18:196:23 | &mut S | | {EXTERNAL LOCATION} | &mut | | dereference.rs:198:23:198:24 | &S | | {EXTERNAL LOCATION} | & | | dereference.rs:199:23:199:28 | &mut S | | {EXTERNAL LOCATION} | &mut | @@ -2664,7 +2651,6 @@ inferCertainType | main.rs:1494:25:1494:29 | false | | {EXTERNAL LOCATION} | bool | | main.rs:1498:17:1500:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1499:17:1499:17 | z | | {EXTERNAL LOCATION} | () | -| main.rs:1499:21:1499:27 | (...) | | {EXTERNAL LOCATION} | () | | main.rs:1499:22:1499:26 | ... = ... | | {EXTERNAL LOCATION} | () | | main.rs:1500:16:1502:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1501:13:1501:17 | ... = ... | | {EXTERNAL LOCATION} | () | @@ -4948,9 +4934,7 @@ inferCertainType | pattern_matching.rs:787:25:787:31 | 3.14f64 | | {EXTERNAL LOCATION} | f64 | | pattern_matching.rs:787:34:787:37 | true | | {EXTERNAL LOCATION} | bool | | pattern_matching.rs:788:41:788:45 | tuple | | {EXTERNAL LOCATION} | (T_3) | -| pattern_matching.rs:794:23:794:42 | (...) | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:794:23:794:42 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | -| pattern_matching.rs:794:45:794:64 | (...) | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:794:45:794:64 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:795:5:799:5 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:795:9:795:22 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | @@ -5498,8 +5482,6 @@ inferType | associated_types.rs:485:24:485:28 | SelfParam | TRef | associated_types.rs:469:5:469:24 | MyType | | associated_types.rs:485:24:485:28 | SelfParam | TRef.T | associated_types.rs:483:10:483:16 | T | | associated_types.rs:485:47:487:9 | { ... } | | associated_types.rs:483:10:483:16 | T | -| associated_types.rs:486:13:486:19 | (...) | | associated_types.rs:469:5:469:24 | MyType | -| associated_types.rs:486:13:486:19 | (...) | T | associated_types.rs:483:10:483:16 | T | | associated_types.rs:486:13:486:21 | ... .0 | | associated_types.rs:483:10:483:16 | T | | associated_types.rs:486:14:486:18 | * ... | | associated_types.rs:469:5:469:24 | MyType | | associated_types.rs:486:14:486:18 | * ... | T | associated_types.rs:483:10:483:16 | T | @@ -5595,8 +5577,6 @@ inferType | associated_types.rs:550:31:550:31 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | | associated_types.rs:550:61:558:5 | { ... } | | {EXTERNAL LOCATION} | () | | associated_types.rs:552:13:552:15 | _a1 | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:552:19:552:22 | (...) | | associated_types.rs:19:1:27:1 | dyn GetSet | -| associated_types.rs:552:19:552:22 | (...) | dyn(Output) | {EXTERNAL LOCATION} | i32 | | associated_types.rs:552:19:552:28 | ... .get() | | {EXTERNAL LOCATION} | i32 | | associated_types.rs:552:20:552:21 | * ... | | associated_types.rs:19:1:27:1 | dyn GetSet | | associated_types.rs:552:20:552:21 | * ... | dyn(Output) | {EXTERNAL LOCATION} | i32 | @@ -5619,9 +5599,6 @@ inferType | associated_types.rs:560:36:560:36 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | | associated_types.rs:560:92:566:5 | { ... } | | {EXTERNAL LOCATION} | () | | associated_types.rs:561:13:561:15 | _a1 | | {EXTERNAL LOCATION} | i32 | -| associated_types.rs:561:19:561:22 | (...) | | associated_types.rs:33:1:38:1 | dyn AnotherGet | -| associated_types.rs:561:19:561:22 | (...) | dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | -| associated_types.rs:561:19:561:22 | (...) | dyn(Output) | {EXTERNAL LOCATION} | i32 | | associated_types.rs:561:19:561:28 | ... .get() | | {EXTERNAL LOCATION} | i32 | | associated_types.rs:561:20:561:21 | * ... | | associated_types.rs:33:1:38:1 | dyn AnotherGet | | associated_types.rs:561:20:561:21 | * ... | dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | @@ -5643,9 +5620,6 @@ inferType | associated_types.rs:563:23:563:23 | t | TRef.dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | | associated_types.rs:563:23:563:23 | t | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | | associated_types.rs:564:13:564:15 | _b1 | | {EXTERNAL LOCATION} | bool | -| associated_types.rs:564:19:564:22 | (...) | | associated_types.rs:33:1:38:1 | dyn AnotherGet | -| associated_types.rs:564:19:564:22 | (...) | dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | -| associated_types.rs:564:19:564:22 | (...) | dyn(Output) | {EXTERNAL LOCATION} | i32 | | associated_types.rs:564:19:564:36 | ... .get_another() | | {EXTERNAL LOCATION} | bool | | associated_types.rs:564:20:564:21 | * ... | | associated_types.rs:33:1:38:1 | dyn AnotherGet | | associated_types.rs:564:20:564:21 | * ... | dyn(AnotherOutput) | {EXTERNAL LOCATION} | bool | @@ -5704,8 +5678,6 @@ inferType | blanket_impl.rs:47:18:47:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:47:20:47:21 | x1 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:48:13:48:14 | x2 | | blanket_impl.rs:6:5:7:14 | S1 | -| blanket_impl.rs:48:18:48:22 | (...) | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:48:18:48:22 | (...) | TRef | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:48:18:48:31 | ... .clone1() | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:48:19:48:21 | &S1 | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:48:19:48:21 | &S1 | TRef | blanket_impl.rs:6:5:7:14 | S1 | @@ -5728,8 +5700,6 @@ inferType | blanket_impl.rs:51:18:51:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:51:20:51:21 | x3 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:52:13:52:14 | x4 | | blanket_impl.rs:6:5:7:14 | S1 | -| blanket_impl.rs:52:18:52:22 | (...) | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:52:18:52:22 | (...) | TRef | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:52:18:52:34 | ... .duplicate() | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:52:19:52:21 | &S1 | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:52:19:52:21 | &S1 | TRef | blanket_impl.rs:6:5:7:14 | S1 | @@ -5764,8 +5734,6 @@ inferType | blanket_impl.rs:57:18:57:25 | { ... } | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:57:20:57:21 | x6 | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:58:13:58:14 | x7 | | blanket_impl.rs:6:5:7:14 | S1 | -| blanket_impl.rs:58:18:58:22 | (...) | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:58:18:58:22 | (...) | TRef | blanket_impl.rs:9:5:10:14 | S2 | | blanket_impl.rs:58:18:58:34 | ... .duplicate() | | blanket_impl.rs:6:5:7:14 | S1 | | blanket_impl.rs:58:19:58:21 | &S2 | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:58:19:58:21 | &S2 | TRef | blanket_impl.rs:9:5:10:14 | S2 | @@ -5939,16 +5907,11 @@ inferType | blanket_impl.rs:256:18:256:19 | S1 | | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:256:18:256:24 | S1.m1() | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:257:13:257:14 | x2 | | {EXTERNAL LOCATION} | () | -| blanket_impl.rs:257:18:257:22 | (...) | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:257:18:257:22 | (...) | TRef | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:257:18:257:27 | ... .m2() | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:257:19:257:21 | &S1 | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:257:19:257:21 | &S1 | TRef | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:257:20:257:21 | S1 | | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:258:13:258:14 | x3 | | {EXTERNAL LOCATION} | () | -| blanket_impl.rs:258:18:258:23 | (...) | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:258:18:258:23 | (...) | TRef | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:258:18:258:23 | (...) | TRef.TRef | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:258:18:258:28 | ... .m2() | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:258:19:258:22 | &... | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:258:19:258:22 | &... | TRef | {EXTERNAL LOCATION} | & | @@ -5960,8 +5923,6 @@ inferType | blanket_impl.rs:259:18:259:19 | S1 | | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:259:18:259:24 | S1.m4() | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:260:13:260:14 | x5 | | {EXTERNAL LOCATION} | () | -| blanket_impl.rs:260:18:260:22 | (...) | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:260:18:260:22 | (...) | TRef | blanket_impl.rs:188:5:189:14 | S1 | | blanket_impl.rs:260:18:260:27 | ... .m4() | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:260:19:260:21 | &S1 | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:260:19:260:21 | &S1 | TRef | blanket_impl.rs:188:5:189:14 | S1 | @@ -5970,8 +5931,6 @@ inferType | blanket_impl.rs:261:18:261:19 | S2 | | blanket_impl.rs:191:5:192:14 | S2 | | blanket_impl.rs:261:18:261:24 | S2.m4() | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:262:13:262:14 | x7 | | {EXTERNAL LOCATION} | () | -| blanket_impl.rs:262:18:262:22 | (...) | | {EXTERNAL LOCATION} | & | -| blanket_impl.rs:262:18:262:22 | (...) | TRef | blanket_impl.rs:191:5:192:14 | S2 | | blanket_impl.rs:262:18:262:27 | ... .m4() | | {EXTERNAL LOCATION} | () | | blanket_impl.rs:262:19:262:21 | &S2 | | {EXTERNAL LOCATION} | & | | blanket_impl.rs:262:19:262:21 | &S2 | TRef | blanket_impl.rs:191:5:192:14 | S2 | @@ -6810,11 +6769,6 @@ inferType | closure.rs:254:17:254:21 | \|...\| x | dyn(Output) | {EXTERNAL LOCATION} | i32 | | closure.rs:254:18:254:18 | x | | {EXTERNAL LOCATION} | i32 | | closure.rs:254:21:254:21 | x | | {EXTERNAL LOCATION} | i32 | -| closure.rs:255:9:255:12 | (...) | | {EXTERNAL LOCATION} | & | -| closure.rs:255:9:255:12 | (...) | TRef | {EXTERNAL LOCATION} | dyn Fn | -| closure.rs:255:9:255:12 | (...) | TRef.dyn(Args) | {EXTERNAL LOCATION} | (T_1) | -| closure.rs:255:9:255:12 | (...) | TRef.dyn(Args).T0 | {EXTERNAL LOCATION} | i32 | -| closure.rs:255:9:255:12 | (...) | TRef.dyn(Output) | {EXTERNAL LOCATION} | i32 | | closure.rs:255:9:255:15 | ...(...) | | {EXTERNAL LOCATION} | i32 | | closure.rs:255:10:255:11 | &c | | {EXTERNAL LOCATION} | & | | closure.rs:255:10:255:11 | &c | TRef | {EXTERNAL LOCATION} | dyn Fn | @@ -6889,7 +6843,6 @@ inferType | dereference.rs:56:14:56:42 | MyIntPointer {...} | | dereference.rs:5:1:7:1 | MyIntPointer | | dereference.rs:56:36:56:40 | 34i64 | | {EXTERNAL LOCATION} | i64 | | dereference.rs:57:9:57:11 | _b3 | | {EXTERNAL LOCATION} | bool | -| dereference.rs:57:15:57:19 | (...) | | {EXTERNAL LOCATION} | i64 | | dereference.rs:57:15:57:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | | dereference.rs:57:16:57:18 | * ... | | {EXTERNAL LOCATION} | i64 | | dereference.rs:57:17:57:18 | a3 | | dereference.rs:5:1:7:1 | MyIntPointer | @@ -6920,7 +6873,6 @@ inferType | dereference.rs:70:14:70:44 | MySmartPointer {...} | T | {EXTERNAL LOCATION} | i64 | | dereference.rs:70:38:70:42 | 34i64 | | {EXTERNAL LOCATION} | i64 | | dereference.rs:71:9:71:11 | _d3 | | {EXTERNAL LOCATION} | bool | -| dereference.rs:71:15:71:19 | (...) | | {EXTERNAL LOCATION} | i64 | | dereference.rs:71:15:71:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | | dereference.rs:71:16:71:18 | * ... | | {EXTERNAL LOCATION} | i64 | | dereference.rs:71:17:71:18 | c3 | | dereference.rs:18:1:20:1 | MySmartPointer | @@ -6952,7 +6904,6 @@ inferType | dereference.rs:84:14:84:19 | &34i64 | TRef | {EXTERNAL LOCATION} | i64 | | dereference.rs:84:15:84:19 | 34i64 | | {EXTERNAL LOCATION} | i64 | | dereference.rs:85:9:85:11 | _f3 | | {EXTERNAL LOCATION} | bool | -| dereference.rs:85:15:85:19 | (...) | | {EXTERNAL LOCATION} | i64 | | dereference.rs:85:15:85:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | | dereference.rs:85:16:85:18 | * ... | | {EXTERNAL LOCATION} | i64 | | dereference.rs:85:17:85:18 | e3 | | {EXTERNAL LOCATION} | & | @@ -6992,7 +6943,6 @@ inferType | dereference.rs:98:24:98:38 | ...::new(...) | T | {EXTERNAL LOCATION} | i64 | | dereference.rs:98:33:98:37 | 34i64 | | {EXTERNAL LOCATION} | i64 | | dereference.rs:99:9:99:11 | _h3 | | {EXTERNAL LOCATION} | bool | -| dereference.rs:99:15:99:19 | (...) | | {EXTERNAL LOCATION} | i64 | | dereference.rs:99:15:99:33 | ... .is_positive() | | {EXTERNAL LOCATION} | bool | | dereference.rs:99:16:99:18 | * ... | | {EXTERNAL LOCATION} | i64 | | dereference.rs:99:17:99:18 | g3 | | {EXTERNAL LOCATION} | Box | @@ -7138,8 +7088,6 @@ inferType | dereference.rs:189:13:189:14 | 42 | | {EXTERNAL LOCATION} | i32 | | dereference.rs:193:19:200:5 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:194:13:194:13 | x | | dereference.rs:159:5:159:13 | S | -| dereference.rs:194:17:194:20 | (...) | | {EXTERNAL LOCATION} | & | -| dereference.rs:194:17:194:20 | (...) | TRef | dereference.rs:159:5:159:13 | S | | dereference.rs:194:17:194:26 | ... .foo() | | dereference.rs:159:5:159:13 | S | | dereference.rs:194:18:194:19 | &S | | {EXTERNAL LOCATION} | & | | dereference.rs:194:18:194:19 | &S | TRef | dereference.rs:159:5:159:13 | S | @@ -7148,8 +7096,6 @@ inferType | dereference.rs:195:17:195:17 | S | | dereference.rs:159:5:159:13 | S | | dereference.rs:195:17:195:23 | S.foo() | | dereference.rs:159:5:159:13 | S | | dereference.rs:196:13:196:13 | z | | {EXTERNAL LOCATION} | i64 | -| dereference.rs:196:17:196:24 | (...) | | {EXTERNAL LOCATION} | &mut | -| dereference.rs:196:17:196:24 | (...) | TRefMut | dereference.rs:159:5:159:13 | S | | dereference.rs:196:17:196:30 | ... .foo() | | {EXTERNAL LOCATION} | i64 | | dereference.rs:196:18:196:23 | &mut S | | {EXTERNAL LOCATION} | &mut | | dereference.rs:196:18:196:23 | &mut S | TRefMut | dereference.rs:159:5:159:13 | S | @@ -7265,7 +7211,6 @@ inferType | dyn_type.rs:64:25:64:27 | obj | TRef | dyn_type.rs:5:1:8:1 | dyn MyTrait1 | | dyn_type.rs:64:45:66:1 | { ... } | | {EXTERNAL LOCATION} | () | | dyn_type.rs:65:9:65:15 | _result | | {EXTERNAL LOCATION} | String | -| dyn_type.rs:65:19:65:24 | (...) | | dyn_type.rs:5:1:8:1 | dyn MyTrait1 | | dyn_type.rs:65:19:65:28 | ... .m() | | {EXTERNAL LOCATION} | String | | dyn_type.rs:65:20:65:23 | * ... | | dyn_type.rs:5:1:8:1 | dyn MyTrait1 | | dyn_type.rs:65:21:65:23 | obj | | {EXTERNAL LOCATION} | & | @@ -7275,8 +7220,6 @@ inferType | dyn_type.rs:68:27:68:29 | obj | TRef.dyn(A) | {EXTERNAL LOCATION} | String | | dyn_type.rs:68:57:71:1 | { ... } | | {EXTERNAL LOCATION} | () | | dyn_type.rs:69:9:69:16 | _result1 | | {EXTERNAL LOCATION} | String | -| dyn_type.rs:69:20:69:25 | (...) | | dyn_type.rs:10:1:13:1 | dyn GenericGet | -| dyn_type.rs:69:20:69:25 | (...) | dyn(A) | {EXTERNAL LOCATION} | String | | dyn_type.rs:69:20:69:31 | ... .get() | | {EXTERNAL LOCATION} | String | | dyn_type.rs:69:21:69:24 | * ... | | dyn_type.rs:10:1:13:1 | dyn GenericGet | | dyn_type.rs:69:21:69:24 | * ... | dyn(A) | {EXTERNAL LOCATION} | String | @@ -7299,8 +7242,6 @@ inferType | dyn_type.rs:74:15:74:33 | get_box_trait(...) | T.dyn(A) | {EXTERNAL LOCATION} | bool | | dyn_type.rs:74:29:74:32 | true | | {EXTERNAL LOCATION} | bool | | dyn_type.rs:75:9:75:15 | _result | | {EXTERNAL LOCATION} | bool | -| dyn_type.rs:75:19:75:24 | (...) | | dyn_type.rs:10:1:13:1 | dyn GenericGet | -| dyn_type.rs:75:19:75:24 | (...) | dyn(A) | {EXTERNAL LOCATION} | bool | | dyn_type.rs:75:19:75:30 | ... .get() | | {EXTERNAL LOCATION} | bool | | dyn_type.rs:75:20:75:23 | * ... | | dyn_type.rs:10:1:13:1 | dyn GenericGet | | dyn_type.rs:75:20:75:23 | * ... | dyn(A) | {EXTERNAL LOCATION} | bool | @@ -7342,9 +7283,6 @@ inferType | dyn_type.rs:87:9:90:5 | TuplePat | T1 | {EXTERNAL LOCATION} | bool | | dyn_type.rs:88:9:88:11 | _gp | | {EXTERNAL LOCATION} | i64 | | dyn_type.rs:89:9:89:11 | _ap | | {EXTERNAL LOCATION} | bool | -| dyn_type.rs:90:9:90:14 | (...) | | dyn_type.rs:15:1:19:1 | dyn AssocTrait | -| dyn_type.rs:90:9:90:14 | (...) | dyn(AP) | {EXTERNAL LOCATION} | bool | -| dyn_type.rs:90:9:90:14 | (...) | dyn(GP) | {EXTERNAL LOCATION} | i64 | | dyn_type.rs:90:9:90:20 | ... .get() | | {EXTERNAL LOCATION} | (T_2) | | dyn_type.rs:90:9:90:20 | ... .get() | T0 | {EXTERNAL LOCATION} | i64 | | dyn_type.rs:90:9:90:20 | ... .get() | T1 | {EXTERNAL LOCATION} | bool | @@ -9426,11 +9364,8 @@ inferType | main.rs:1170:29:1170:33 | SelfParam | TRef | {EXTERNAL LOCATION} | & | | main.rs:1170:29:1170:33 | SelfParam | TRef.TRef | main.rs:1143:5:1146:5 | MyInt | | main.rs:1170:43:1172:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1171:13:1171:22 | (...) | | main.rs:1143:5:1146:5 | MyInt | | main.rs:1171:13:1171:24 | ... .a | | {EXTERNAL LOCATION} | i64 | | main.rs:1171:14:1171:21 | * ... | | main.rs:1143:5:1146:5 | MyInt | -| main.rs:1171:15:1171:21 | (...) | | {EXTERNAL LOCATION} | & | -| main.rs:1171:15:1171:21 | (...) | TRef | main.rs:1143:5:1146:5 | MyInt | | main.rs:1171:16:1171:20 | * ... | | {EXTERNAL LOCATION} | & | | main.rs:1171:16:1171:20 | * ... | TRef | main.rs:1143:5:1146:5 | MyInt | | main.rs:1171:17:1171:20 | self | | {EXTERNAL LOCATION} | & | @@ -9439,7 +9374,6 @@ inferType | main.rs:1175:33:1175:36 | SelfParam | | {EXTERNAL LOCATION} | & | | main.rs:1175:33:1175:36 | SelfParam | TRef | main.rs:1143:5:1146:5 | MyInt | | main.rs:1175:46:1177:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1176:13:1176:19 | (...) | | main.rs:1143:5:1146:5 | MyInt | | main.rs:1176:13:1176:21 | ... .a | | {EXTERNAL LOCATION} | i64 | | main.rs:1176:14:1176:18 | * ... | | main.rs:1143:5:1146:5 | MyInt | | main.rs:1176:15:1176:18 | self | | {EXTERNAL LOCATION} | & | @@ -9590,8 +9524,6 @@ inferType | main.rs:1207:18:1207:35 | ...::_print(...) | | {EXTERNAL LOCATION} | () | | main.rs:1207:18:1207:35 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1207:18:1207:35 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:1207:26:1207:30 | (...) | | main.rs:1137:5:1138:19 | S | -| main.rs:1207:26:1207:30 | (...) | T | main.rs:1140:5:1141:14 | S2 | | main.rs:1207:26:1207:35 | ... .m1() | | main.rs:1140:5:1141:14 | S2 | | main.rs:1207:27:1207:29 | * ... | | main.rs:1137:5:1138:19 | S | | main.rs:1207:27:1207:29 | * ... | T | main.rs:1140:5:1141:14 | S2 | @@ -10275,7 +10207,6 @@ inferType | main.rs:1498:12:1498:15 | cond | | {EXTERNAL LOCATION} | bool | | main.rs:1498:17:1500:9 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1499:17:1499:17 | z | | {EXTERNAL LOCATION} | () | -| main.rs:1499:21:1499:27 | (...) | | {EXTERNAL LOCATION} | () | | main.rs:1499:22:1499:22 | a | | {EXTERNAL LOCATION} | i32 | | main.rs:1499:22:1499:26 | ... = ... | | {EXTERNAL LOCATION} | () | | main.rs:1499:26:1499:26 | 1 | | {EXTERNAL LOCATION} | i32 | @@ -10644,7 +10575,6 @@ inferType | main.rs:1726:31:1726:35 | other | TRef | main.rs:1510:5:1515:5 | Vec2 | | main.rs:1726:75:1728:9 | { ... } | | {EXTERNAL LOCATION} | Option | | main.rs:1726:75:1728:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | -| main.rs:1727:13:1727:29 | (...) | | {EXTERNAL LOCATION} | i64 | | main.rs:1727:13:1727:63 | ... .partial_cmp(...) | | {EXTERNAL LOCATION} | Option | | main.rs:1727:13:1727:63 | ... .partial_cmp(...) | T | {EXTERNAL LOCATION} | Ordering | | main.rs:1727:14:1727:17 | self | | {EXTERNAL LOCATION} | & | @@ -10656,7 +10586,6 @@ inferType | main.rs:1727:23:1727:28 | self.y | | {EXTERNAL LOCATION} | i64 | | main.rs:1727:43:1727:62 | &... | | {EXTERNAL LOCATION} | & | | main.rs:1727:43:1727:62 | &... | TRef | {EXTERNAL LOCATION} | i64 | -| main.rs:1727:44:1727:62 | (...) | | {EXTERNAL LOCATION} | i64 | | main.rs:1727:45:1727:49 | other | | {EXTERNAL LOCATION} | & | | main.rs:1727:45:1727:49 | other | TRef | main.rs:1510:5:1515:5 | Vec2 | | main.rs:1727:45:1727:51 | other.x | | {EXTERNAL LOCATION} | i64 | @@ -10752,32 +10681,26 @@ inferType | main.rs:1748:13:1748:13 | b | | main.rs:1747:18:1747:23 | T | | main.rs:1751:16:1882:5 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:1755:13:1755:18 | i64_eq | | {EXTERNAL LOCATION} | bool | -| main.rs:1755:22:1755:35 | (...) | | {EXTERNAL LOCATION} | bool | | main.rs:1755:23:1755:26 | 1i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:1755:23:1755:34 | ... == ... | | {EXTERNAL LOCATION} | bool | | main.rs:1755:31:1755:34 | 2i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:1756:13:1756:18 | i64_ne | | {EXTERNAL LOCATION} | bool | -| main.rs:1756:22:1756:35 | (...) | | {EXTERNAL LOCATION} | bool | | main.rs:1756:23:1756:26 | 3i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:1756:23:1756:34 | ... != ... | | {EXTERNAL LOCATION} | bool | | main.rs:1756:31:1756:34 | 4i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:1757:13:1757:18 | i64_lt | | {EXTERNAL LOCATION} | bool | -| main.rs:1757:22:1757:34 | (...) | | {EXTERNAL LOCATION} | bool | | main.rs:1757:23:1757:26 | 5i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:1757:23:1757:33 | ... < ... | | {EXTERNAL LOCATION} | bool | | main.rs:1757:30:1757:33 | 6i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:1758:13:1758:18 | i64_le | | {EXTERNAL LOCATION} | bool | -| main.rs:1758:22:1758:35 | (...) | | {EXTERNAL LOCATION} | bool | | main.rs:1758:23:1758:26 | 7i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:1758:23:1758:34 | ... <= ... | | {EXTERNAL LOCATION} | bool | | main.rs:1758:31:1758:34 | 8i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:1759:13:1759:18 | i64_gt | | {EXTERNAL LOCATION} | bool | -| main.rs:1759:22:1759:35 | (...) | | {EXTERNAL LOCATION} | bool | | main.rs:1759:23:1759:26 | 9i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:1759:23:1759:34 | ... > ... | | {EXTERNAL LOCATION} | bool | | main.rs:1759:30:1759:34 | 10i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:1760:13:1760:18 | i64_ge | | {EXTERNAL LOCATION} | bool | -| main.rs:1760:22:1760:37 | (...) | | {EXTERNAL LOCATION} | bool | | main.rs:1760:23:1760:27 | 11i64 | | {EXTERNAL LOCATION} | i64 | | main.rs:1760:23:1760:36 | ... >= ... | | {EXTERNAL LOCATION} | bool | | main.rs:1760:32:1760:36 | 12i64 | | {EXTERNAL LOCATION} | i64 | @@ -11326,7 +11249,6 @@ inferType | main.rs:2130:54:2132:9 | { ... } | T | main.rs:2126:10:2126:17 | T::Output[MyAdd] | | main.rs:2131:13:2131:39 | S(...) | | main.rs:2124:5:2124:19 | S | | main.rs:2131:13:2131:39 | S(...) | T | main.rs:2126:10:2126:17 | T::Output[MyAdd] | -| main.rs:2131:15:2131:22 | (...) | | main.rs:2126:10:2126:17 | T | | main.rs:2131:15:2131:38 | ... .my_add(...) | | main.rs:2126:10:2126:17 | T::Output[MyAdd] | | main.rs:2131:16:2131:19 | self | | main.rs:2124:5:2124:19 | S | | main.rs:2131:16:2131:19 | self | T | main.rs:2126:10:2126:17 | T | @@ -11341,7 +11263,6 @@ inferType | main.rs:2139:51:2141:9 | { ... } | T | main.rs:2135:10:2135:17 | T::Output[MyAdd] | | main.rs:2140:13:2140:37 | S(...) | | main.rs:2124:5:2124:19 | S | | main.rs:2140:13:2140:37 | S(...) | T | main.rs:2135:10:2135:17 | T::Output[MyAdd] | -| main.rs:2140:15:2140:22 | (...) | | main.rs:2135:10:2135:17 | T | | main.rs:2140:15:2140:36 | ... .my_add(...) | | main.rs:2135:10:2135:17 | T::Output[MyAdd] | | main.rs:2140:16:2140:19 | self | | main.rs:2124:5:2124:19 | S | | main.rs:2140:16:2140:19 | self | T | main.rs:2135:10:2135:17 | T | @@ -11355,7 +11276,6 @@ inferType | main.rs:2151:55:2153:9 | { ... } | T | main.rs:2144:14:2144:14 | T::Output[MyAdd] | | main.rs:2152:13:2152:37 | S(...) | | main.rs:2124:5:2124:19 | S | | main.rs:2152:13:2152:37 | S(...) | T | main.rs:2144:14:2144:14 | T::Output[MyAdd] | -| main.rs:2152:15:2152:22 | (...) | | main.rs:2144:14:2144:14 | T | | main.rs:2152:15:2152:36 | ... .my_add(...) | | main.rs:2144:14:2144:14 | T::Output[MyAdd] | | main.rs:2152:16:2152:19 | self | | main.rs:2124:5:2124:19 | S | | main.rs:2152:16:2152:19 | self | T | main.rs:2144:14:2144:14 | T | @@ -11861,17 +11781,11 @@ inferType | main.rs:2359:23:2359:50 | MacroExpr | T | {EXTERNAL LOCATION} | Vec | | main.rs:2359:23:2359:50 | MacroExpr | T.A | {EXTERNAL LOCATION} | Global | | main.rs:2359:23:2359:50 | MacroExpr | T.T | {EXTERNAL LOCATION} | i32 | -| main.rs:2359:28:2359:37 | (...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2359:28:2359:37 | (...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2359:28:2359:37 | (...) | T | {EXTERNAL LOCATION} | i32 | | main.rs:2359:28:2359:37 | MacroExpr | | {EXTERNAL LOCATION} | Vec | | main.rs:2359:28:2359:37 | MacroExpr | A | {EXTERNAL LOCATION} | Global | | main.rs:2359:28:2359:37 | MacroExpr | T | {EXTERNAL LOCATION} | i32 | | main.rs:2359:33:2359:33 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2359:36:2359:36 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2359:40:2359:49 | (...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2359:40:2359:49 | (...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2359:40:2359:49 | (...) | T | {EXTERNAL LOCATION} | i32 | | main.rs:2359:40:2359:49 | MacroExpr | | {EXTERNAL LOCATION} | Vec | | main.rs:2359:40:2359:49 | MacroExpr | A | {EXTERNAL LOCATION} | Global | | main.rs:2359:40:2359:49 | MacroExpr | T | {EXTERNAL LOCATION} | i32 | @@ -14666,7 +14580,6 @@ inferType | pattern_matching.rs:501:17:501:21 | 42i32 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:504:5:509:5 | match value { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:504:11:504:15 | value | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:505:9:505:11 | (...) | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:505:10:505:10 | x | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:505:16:508:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:506:17:506:27 | paren_bound | | {EXTERNAL LOCATION} | i32 | @@ -14694,7 +14607,6 @@ inferType | pattern_matching.rs:514:9:514:16 | TuplePat | T0 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:514:9:514:16 | TuplePat | T1 | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:514:10:514:10 | x | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:514:13:514:15 | (...) | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:514:14:514:14 | y | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:514:21:518:9 | { ... } | | {EXTERNAL LOCATION} | () | | pattern_matching.rs:515:17:515:23 | paren_x | | {EXTERNAL LOCATION} | i32 | @@ -15353,11 +15265,9 @@ inferType | pattern_matching.rs:794:18:794:65 | MacroExpr | | {EXTERNAL LOCATION} | Vec | | pattern_matching.rs:794:18:794:65 | MacroExpr | A | {EXTERNAL LOCATION} | Global | | pattern_matching.rs:794:18:794:65 | MacroExpr | T | pattern_matching.rs:135:1:140:1 | Point | -| pattern_matching.rs:794:23:794:42 | (...) | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:794:23:794:42 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:794:34:794:34 | 1 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:794:40:794:40 | 2 | | {EXTERNAL LOCATION} | i32 | -| pattern_matching.rs:794:45:794:64 | (...) | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:794:45:794:64 | Point {...} | | pattern_matching.rs:135:1:140:1 | Point | | pattern_matching.rs:794:56:794:56 | 3 | | {EXTERNAL LOCATION} | i32 | | pattern_matching.rs:794:62:794:62 | 4 | | {EXTERNAL LOCATION} | i32 | diff --git a/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected b/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected index ae90b8f0282c..a7f75c9779f8 100644 --- a/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected +++ b/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected @@ -16,7 +16,7 @@ | test_cipher.rs:131:27:131:35 | [0xff; 12] | test_cipher.rs:131:27:131:35 | [0xff; 12] | test_cipher.rs:133:29:133:42 | &... | This hard-coded value is used as $@. | test_cipher.rs:133:29:133:42 | &... | a nonce | | test_cookie.rs:17:28:17:34 | [0; 64] | test_cookie.rs:17:28:17:34 | [0; 64] | test_cookie.rs:18:26:18:32 | &array1 | This hard-coded value is used as $@. | test_cookie.rs:18:26:18:32 | &array1 | a key | | test_cookie.rs:21:28:21:34 | [0; 64] | test_cookie.rs:21:28:21:34 | [0; 64] | test_cookie.rs:22:26:22:32 | &array2 | This hard-coded value is used as $@. | test_cookie.rs:22:26:22:32 | &array2 | a key | -| test_cookie.rs:25:16:29:5 | match ... { ... } | test_cookie.rs:25:16:29:5 | match ... { ... } | test_cookie.rs:30:26:30:40 | str3.as_bytes() | This hard-coded value is used as $@. | test_cookie.rs:30:26:30:40 | str3.as_bytes() | a key | +| test_cookie.rs:25:16:29:5 | match val { ... } | test_cookie.rs:25:16:29:5 | match val { ... } | test_cookie.rs:30:26:30:40 | str3.as_bytes() | This hard-coded value is used as $@. | test_cookie.rs:30:26:30:40 | str3.as_bytes() | a key | | test_cookie.rs:33:27:37:5 | [...] | test_cookie.rs:33:27:37:5 | [...] | test_cookie.rs:38:26:38:32 | &array4 | This hard-coded value is used as $@. | test_cookie.rs:38:26:38:32 | &array4 | a key | | test_cookie.rs:54:28:54:36 | [0u8; 64] | test_cookie.rs:54:28:54:36 | [0u8; 64] | test_cookie.rs:58:34:58:39 | array2 | This hard-coded value is used as $@. | test_cookie.rs:58:34:58:39 | array2 | a key | | test_cookie.rs:65:23:65:25 | 0u8 | test_cookie.rs:65:23:65:25 | 0u8 | test_cookie.rs:69:34:69:39 | array3 | This hard-coded value is used as $@. | test_cookie.rs:69:34:69:39 | array3 | a key | @@ -122,7 +122,7 @@ edges | test_cookie.rs:22:26:22:32 | &array2 [&ref] | test_cookie.rs:22:26:22:32 | &array2 | provenance | Sink:MaD:6 | | test_cookie.rs:22:27:22:32 | array2 | test_cookie.rs:22:26:22:32 | &array2 [&ref] | provenance | | | test_cookie.rs:25:9:25:12 | str3 | test_cookie.rs:30:26:30:29 | str3 | provenance | | -| test_cookie.rs:25:16:29:5 | match ... { ... } | test_cookie.rs:25:9:25:12 | str3 | provenance | | +| test_cookie.rs:25:16:29:5 | match val { ... } | test_cookie.rs:25:9:25:12 | str3 | provenance | | | test_cookie.rs:30:26:30:29 | str3 | test_cookie.rs:30:26:30:40 | str3.as_bytes() [&ref] | provenance | MaD:19 | | test_cookie.rs:30:26:30:40 | str3.as_bytes() [&ref] | test_cookie.rs:30:26:30:40 | str3.as_bytes() | provenance | Sink:MaD:6 | | test_cookie.rs:33:9:33:14 | array4 | test_cookie.rs:38:27:38:32 | array4 | provenance | | @@ -275,7 +275,7 @@ nodes | test_cookie.rs:22:26:22:32 | &array2 [&ref] | semmle.label | &array2 [&ref] | | test_cookie.rs:22:27:22:32 | array2 | semmle.label | array2 | | test_cookie.rs:25:9:25:12 | str3 | semmle.label | str3 | -| test_cookie.rs:25:16:29:5 | match ... { ... } | semmle.label | match ... { ... } | +| test_cookie.rs:25:16:29:5 | match val { ... } | semmle.label | match val { ... } | | test_cookie.rs:30:26:30:29 | str3 | semmle.label | str3 | | test_cookie.rs:30:26:30:40 | str3.as_bytes() | semmle.label | str3.as_bytes() | | test_cookie.rs:30:26:30:40 | str3.as_bytes() [&ref] | semmle.label | str3.as_bytes() [&ref] | diff --git a/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected b/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected index a301fad6560a..f464e133e2a4 100644 --- a/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected +++ b/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected @@ -16,7 +16,10 @@ | lifetime.rs:317:13:317:18 | result | lifetime.rs:289:25:289:26 | &x | lifetime.rs:317:13:317:18 | result | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:289:17:289:17 | x | x | | lifetime.rs:411:16:411:17 | p1 | lifetime.rs:383:31:383:37 | &raw mut my_pair | lifetime.rs:411:16:411:17 | p1 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:382:11:382:17 | my_pair | my_pair | | lifetime.rs:416:16:416:17 | p1 | lifetime.rs:383:31:383:37 | &raw mut my_pair | lifetime.rs:416:16:416:17 | p1 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:382:11:382:17 | my_pair | my_pair | +| lifetime.rs:421:15:421:16 | p2 | lifetime.rs:384:27:384:35 | &raw const ... | lifetime.rs:421:15:421:16 | p2 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:382:11:382:17 | my_pair | my_pair | +| lifetime.rs:422:15:422:16 | p3 | lifetime.rs:385:31:385:39 | &raw mut ... | lifetime.rs:422:15:422:16 | p3 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:382:11:382:17 | my_pair | my_pair | | lifetime.rs:428:7:428:8 | p1 | lifetime.rs:383:31:383:37 | &raw mut my_pair | lifetime.rs:428:7:428:8 | p1 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:382:11:382:17 | my_pair | my_pair | +| lifetime.rs:429:6:429:7 | p3 | lifetime.rs:385:31:385:39 | &raw mut ... | lifetime.rs:429:6:429:7 | p3 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:382:11:382:17 | my_pair | my_pair | | lifetime.rs:433:7:433:8 | p1 | lifetime.rs:383:31:383:37 | &raw mut my_pair | lifetime.rs:433:7:433:8 | p1 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:382:11:382:17 | my_pair | my_pair | | lifetime.rs:459:13:459:14 | p1 | lifetime.rs:442:17:442:23 | &my_val | lifetime.rs:459:13:459:14 | p1 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:441:6:441:11 | my_val | my_val | | lifetime.rs:460:13:460:31 | get_ptr_from_ref(...) | lifetime.rs:442:17:442:23 | &my_val | lifetime.rs:460:13:460:31 | get_ptr_from_ref(...) | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:441:6:441:11 | my_val | my_val | @@ -117,6 +120,15 @@ edges | lifetime.rs:383:3:383:4 | p1 | lifetime.rs:428:7:428:8 | p1 | provenance | | | lifetime.rs:383:3:383:4 | p1 | lifetime.rs:433:7:433:8 | p1 | provenance | | | lifetime.rs:383:31:383:37 | &raw mut my_pair | lifetime.rs:383:3:383:4 | p1 | provenance | | +| lifetime.rs:384:3:384:4 | p2 | lifetime.rs:394:14:394:15 | p2 | provenance | | +| lifetime.rs:384:3:384:4 | p2 | lifetime.rs:421:15:421:16 | p2 | provenance | | +| lifetime.rs:384:27:384:35 | &raw const ... | lifetime.rs:384:3:384:4 | p2 | provenance | | +| lifetime.rs:385:3:385:4 | p3 | lifetime.rs:395:14:395:15 | p3 | provenance | | +| lifetime.rs:385:3:385:4 | p3 | lifetime.rs:400:5:400:6 | p3 | provenance | | +| lifetime.rs:385:3:385:4 | p3 | lifetime.rs:400:5:400:6 | p3 | provenance | | +| lifetime.rs:385:31:385:39 | &raw mut ... | lifetime.rs:385:3:385:4 | p3 | provenance | | +| lifetime.rs:400:5:400:6 | p3 | lifetime.rs:422:15:422:16 | p3 | provenance | | +| lifetime.rs:400:5:400:6 | p3 | lifetime.rs:429:6:429:7 | p3 | provenance | | | lifetime.rs:442:6:442:7 | r1 | lifetime.rs:443:42:443:43 | r1 | provenance | | | lifetime.rs:442:17:442:23 | &my_val | lifetime.rs:442:6:442:7 | r1 | provenance | | | lifetime.rs:443:6:443:7 | p1 | lifetime.rs:446:13:446:14 | p1 | provenance | | @@ -262,13 +274,24 @@ nodes | lifetime.rs:355:28:355:30 | ptr | semmle.label | ptr | | lifetime.rs:383:3:383:4 | p1 | semmle.label | p1 | | lifetime.rs:383:31:383:37 | &raw mut my_pair | semmle.label | &raw mut my_pair | +| lifetime.rs:384:3:384:4 | p2 | semmle.label | p2 | +| lifetime.rs:384:27:384:35 | &raw const ... | semmle.label | &raw const ... | +| lifetime.rs:385:3:385:4 | p3 | semmle.label | p3 | +| lifetime.rs:385:31:385:39 | &raw mut ... | semmle.label | &raw mut ... | | lifetime.rs:388:15:388:16 | p1 | semmle.label | p1 | | lifetime.rs:391:15:391:16 | p1 | semmle.label | p1 | +| lifetime.rs:394:14:394:15 | p2 | semmle.label | p2 | +| lifetime.rs:395:14:395:15 | p3 | semmle.label | p3 | | lifetime.rs:399:6:399:7 | p1 | semmle.label | p1 | +| lifetime.rs:400:5:400:6 | p3 | semmle.label | p3 | +| lifetime.rs:400:5:400:6 | p3 | semmle.label | p3 | | lifetime.rs:401:6:401:7 | p1 | semmle.label | p1 | | lifetime.rs:411:16:411:17 | p1 | semmle.label | p1 | | lifetime.rs:416:16:416:17 | p1 | semmle.label | p1 | +| lifetime.rs:421:15:421:16 | p2 | semmle.label | p2 | +| lifetime.rs:422:15:422:16 | p3 | semmle.label | p3 | | lifetime.rs:428:7:428:8 | p1 | semmle.label | p1 | +| lifetime.rs:429:6:429:7 | p3 | semmle.label | p3 | | lifetime.rs:433:7:433:8 | p1 | semmle.label | p1 | | lifetime.rs:442:6:442:7 | r1 | semmle.label | r1 | | lifetime.rs:442:17:442:23 | &my_val | semmle.label | &my_val | diff --git a/rust/ql/test/query-tests/security/CWE-825/lifetime.rs b/rust/ql/test/query-tests/security/CWE-825/lifetime.rs index 51042b56ecc0..c4af9c5d11e2 100644 --- a/rust/ql/test/query-tests/security/CWE-825/lifetime.rs +++ b/rust/ql/test/query-tests/security/CWE-825/lifetime.rs @@ -381,8 +381,8 @@ pub fn test_ptr_to_struct(mode: i32) { { let mut my_pair = MyPair { a: 1, b: 2}; p1 = std::ptr::addr_of_mut!(my_pair); // $ Source[rust/access-after-lifetime-ended]=my_pair - p2 = std::ptr::addr_of!(my_pair.a); // $ MISSING: Source[rust/access-after-lifetime-ended]=my_pair_a - p3 = std::ptr::addr_of_mut!(my_pair.b); // $ MISSING: Source[rust/access-after-lifetime-ended]=my_pair_b + p2 = std::ptr::addr_of!(my_pair.a); // $ Source[rust/access-after-lifetime-ended]=my_pair_a + p3 = std::ptr::addr_of_mut!(my_pair.b); // $ Source[rust/access-after-lifetime-ended]=my_pair_b unsafe { let v1 = (*p1).a; // GOOD @@ -418,15 +418,15 @@ pub fn test_ptr_to_struct(mode: i32) { }, 221 => { // more reads - let v7 = *p2; // $ MISSING: Alert - let v8 = *p3; // $ MISSING: Alert + let v7 = *p2; // $ Alert[rust/access-after-lifetime-ended]=my_pair_a + let v8 = *p3; // $ Alert[rust/access-after-lifetime-ended]=my_pair_b println!(" v7 = {v7} (!)"); // dropped in practice println!(" v8 = {v8} (!)"); // dropped in practice }, 222 => { // writes (*p1).a = 6; // $ Alert[rust/access-after-lifetime-ended]=my_pair - *p3 = 7; // $ MISSING: Alert + *p3 = 7; // $ Alert[rust/access-after-lifetime-ended]=my_pair_b }, 223 => { // another write diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index 84bae031b4f1..62749e724963 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -451,6 +451,7 @@ class _: ``` """ + attrs: qltest.skip path: drop @@ -1678,31 +1679,6 @@ class _: type_repr: drop -@annotate(ParenExpr) -class _: - """ - A parenthesized expression. - - For example: - ```rust - (x + y) - ``` - """ - - -@annotate(ParenPat) -class _: - """ - A parenthesized pattern. - - For example: - ```rust - let (x) = 1; - // ^^^ - ``` - """ - - @annotate(ParenTypeRepr) class _: """ @@ -2460,6 +2436,8 @@ class _: ``` """ + attrs: qltest.skip + @annotate(MacroPat, cfg=True) class _: diff --git a/rust/schema/ast.py b/rust/schema/ast.py index 2a154c79b02a..173b2fbbc17e 100644 --- a/rust/schema/ast.py +++ b/rust/schema/ast.py @@ -431,6 +431,7 @@ class MacroDef(Item, ): visibility: optional["Visibility"] | child class MacroExpr(Expr, ): + attrs: list["AnyAttr"] | child macro_call: optional["MacroCall"] | child class MacroItems(AstNode, ): @@ -512,13 +513,6 @@ class ParamList(AstNode, ): params: list["Param"] | child self_param: optional["SelfParam"] | child -class ParenExpr(Expr, ): - attrs: list["AnyAttr"] | child - expr: optional["Expr"] | child - -class ParenPat(Pat, ): - pat: optional["Pat"] | child - class ParenTypeRepr(TypeRepr, ): type_repr: optional["TypeRepr"] | child @@ -575,6 +569,7 @@ class RangePat(Pat, ): start: optional["Pat"] | child class StructExpr(Expr, ): + attrs: list["AnyAttr"] | child path: optional["Path"] | child struct_expr_field_list: optional["StructExprFieldList"] | child