diff --git a/java/downgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/old.dbscheme b/java/downgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/old.dbscheme
new file mode 100644
index 000000000000..1b8f5f4c747e
--- /dev/null
+++ b/java/downgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/old.dbscheme
@@ -0,0 +1,1236 @@
+/**
+ * An invocation of the compiler. Note that more than one file may be
+ * compiled per invocation. For example, this command compiles three
+ * source files:
+ *
+ * javac A.java B.java C.java
+ *
+ * The `id` simply identifies the invocation, while `cwd` is the working
+ * directory from which the compiler was invoked.
+ */
+compilations(
+ /**
+ * An invocation of the compiler. Note that more than one file may
+ * be compiled per invocation. For example, this command compiles
+ * three source files:
+ *
+ * javac A.java B.java C.java
+ */
+ unique int id : @compilation,
+ int kind: int ref,
+ string cwd : string ref,
+ string name : string ref
+);
+
+case @compilation.kind of
+ 1 = @javacompilation
+| 2 = @kotlincompilation
+;
+
+compilation_started(
+ int id : @compilation ref
+)
+
+compilation_info(
+ int id : @compilation ref,
+ string info_key: string ref,
+ string info_value: string ref
+)
+
+/**
+ * The arguments that were passed to the extractor for a compiler
+ * invocation. If `id` is for the compiler invocation
+ *
+ * javac A.java B.java C.java
+ *
+ * then typically there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | *path to extractor*
+ * 1 | `--javac-args`
+ * 2 | A.java
+ * 3 | B.java
+ * 4 | C.java
+ */
+#keyset[id, num]
+compilation_args(
+ int id : @compilation ref,
+ int num : int ref,
+ string arg : string ref
+);
+
+/**
+ * The expanded arguments that were passed to the extractor for a
+ * compiler invocation. This is similar to `compilation_args`, but
+ * for a `@@@someFile` argument, it includes the arguments from that
+ * file, rather than just taking the argument literally.
+ */
+#keyset[id, num]
+compilation_expanded_args(
+ int id : @compilation ref,
+ int num : int ref,
+ string arg : string ref
+);
+
+/**
+ * The source files that are compiled by a compiler invocation.
+ * If `id` is for the compiler invocation
+ *
+ * javac A.java B.java C.java
+ *
+ * then there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | A.java
+ * 1 | B.java
+ * 2 | C.java
+ */
+#keyset[id, num]
+compilation_compiling_files(
+ int id : @compilation ref,
+ int num : int ref,
+ int file : @file ref
+);
+
+/**
+ * For each file recorded in `compilation_compiling_files`,
+ * there will be a corresponding row in
+ * `compilation_compiling_files_completed` once extraction
+ * of that file is complete. The `result` will indicate the
+ * extraction result:
+ *
+ * 0: Successfully extracted
+ * 1: Errors were encountered, but extraction recovered
+ * 2: Errors were encountered, and extraction could not recover
+ */
+#keyset[id, num]
+compilation_compiling_files_completed(
+ int id : @compilation ref,
+ int num : int ref,
+ int result : int ref
+);
+
+/**
+ * The time taken by the extractor for a compiler invocation.
+ *
+ * For each file `num`, there will be rows for
+ *
+ * kind | seconds
+ * ---- | ---
+ * 1 | CPU seconds used by the extractor frontend
+ * 2 | Elapsed seconds during the extractor frontend
+ * 3 | CPU seconds used by the extractor backend
+ * 4 | Elapsed seconds during the extractor backend
+ */
+#keyset[id, num, kind]
+compilation_time(
+ int id : @compilation ref,
+ int num : int ref,
+ /* kind:
+ 1 = frontend_cpu_seconds
+ 2 = frontend_elapsed_seconds
+ 3 = extractor_cpu_seconds
+ 4 = extractor_elapsed_seconds
+ */
+ int kind : int ref,
+ float seconds : float ref
+);
+
+/**
+ * The `cpu_seconds` and `elapsed_seconds` are the CPU time and elapsed
+ * time (respectively) that the original compilation (not the extraction)
+ * took for compiler invocation `id`.
+ */
+compilation_compiler_times(
+ unique int id : @compilation ref,
+ float cpu_seconds : float ref,
+ float elapsed_seconds : float ref
+);
+
+/**
+ * If extraction was successful, then `cpu_seconds` and
+ * `elapsed_seconds` are the CPU time and elapsed time (respectively)
+ * that extraction took for compiler invocation `id`.
+ * The `result` will indicate the extraction result:
+ *
+ * 0: Successfully extracted
+ * 1: Errors were encountered, but extraction recovered
+ * 2: Errors were encountered, and extraction could not recover
+ */
+compilation_finished(
+ unique int id : @compilation ref,
+ float cpu_seconds : float ref,
+ float elapsed_seconds : float ref,
+ int result : int ref
+);
+
+diagnostics(
+ unique int id: @diagnostic,
+ string generated_by: string ref, // TODO: Sync this with the other languages?
+ 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
+);
+
+/**
+ * An error or warning generated by the extractor.
+ * The diagnostic message `diagnostic` was generated during compiler
+ * invocation `compilation`, and is the `file_number_diagnostic_number`th
+ * message generated while extracting the `file_number`th file of that
+ * invocation.
+ */
+#keyset[compilation, file_number, file_number_diagnostic_number]
+diagnostic_for(
+ unique int diagnostic : @diagnostic ref,
+ int compilation : @compilation ref,
+ int file_number : int ref,
+ int file_number_diagnostic_number : int ref
+);
+
+/*
+ * External artifacts
+ */
+
+externalData(
+ int id : @externalDataElement,
+ string path : string ref,
+ int column: int ref,
+ string value : string ref
+);
+
+sourceLocationPrefix(
+ string prefix : string ref
+);
+
+databaseMetadata(
+ string metadataKey : string ref,
+ string value : string ref
+);
+
+overlayChangedFiles(
+ string path: string ref
+);
+
+/*
+ * SMAP
+ */
+
+smap_header(
+ int outputFileId: @file ref,
+ string outputFilename: string ref,
+ string defaultStratum: string ref
+);
+
+smap_files(
+ int outputFileId: @file ref,
+ string stratum: string ref,
+ int inputFileNum: int ref,
+ string inputFileName: string ref,
+ int inputFileId: @file ref
+);
+
+smap_lines(
+ int outputFileId: @file ref,
+ string stratum: string ref,
+ int inputFileNum: int ref,
+ int inputStartLine: int ref,
+ int inputLineCount: int ref,
+ int outputStartLine: int ref,
+ int outputLineIncrement: int ref
+);
+
+/*
+ * Locations and files
+ */
+
+@location = @location_default ;
+
+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
+);
+
+hasLocation(
+ int locatableid: @locatable ref,
+ int id: @location ref
+);
+
+@sourceline = @locatable ;
+
+#keyset[element_id]
+numlines(
+ int element_id: @sourceline ref,
+ int num_lines: int ref,
+ int num_code: int ref,
+ int num_comment: int ref
+);
+
+files(
+ unique int id: @file,
+ string name: string ref
+);
+
+folders(
+ unique int id: @folder,
+ string name: string ref
+);
+
+@container = @folder | @file
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref
+);
+
+/*
+ * Java
+ */
+
+cupackage(
+ unique int id: @file ref,
+ int packageid: @package ref
+);
+
+#keyset[fileid,keyName]
+jarManifestMain(
+ int fileid: @file ref,
+ string keyName: string ref,
+ string value: string ref
+);
+
+#keyset[fileid,entryName,keyName]
+jarManifestEntries(
+ int fileid: @file ref,
+ string entryName: string ref,
+ string keyName: string ref,
+ string value: string ref
+);
+
+packages(
+ unique int id: @package,
+ string nodeName: string ref
+);
+
+primitives(
+ unique int id: @primitive,
+ string nodeName: string ref
+);
+
+modifiers(
+ unique int id: @modifier,
+ string nodeName: string ref
+);
+
+/**
+ * An errortype is used when the extractor is unable to extract a type
+ * correctly for some reason.
+ */
+error_type(
+ unique int id: @errortype
+);
+
+classes_or_interfaces(
+ unique int id: @classorinterface,
+ string nodeName: string ref,
+ int parentid: @package ref,
+ int sourceid: @classorinterface ref
+);
+
+file_class(
+ int id: @classorinterface ref
+);
+
+class_object(
+ unique int id: @classorinterface ref,
+ unique int instance: @field ref
+);
+
+type_companion_object(
+ unique int id: @classorinterface ref,
+ unique int instance: @field ref,
+ unique int companion_object: @classorinterface ref
+);
+
+kt_nullable_types(
+ unique int id: @kt_nullable_type,
+ int classid: @reftype ref
+)
+
+kt_notnull_types(
+ unique int id: @kt_notnull_type,
+ int classid: @reftype ref
+)
+
+kt_type_alias(
+ unique int id: @kt_type_alias,
+ string name: string ref,
+ int kttypeid: @kt_type ref
+)
+
+@kt_type = @kt_nullable_type | @kt_notnull_type
+
+isInterface(
+ unique int id: @classorinterface ref
+);
+
+isRecord(
+ unique int id: @classorinterface ref
+);
+
+fielddecls(
+ unique int id: @fielddecl,
+ int parentid: @reftype ref
+);
+
+#keyset[fieldId] #keyset[fieldDeclId,pos]
+fieldDeclaredIn(
+ int fieldId: @field ref,
+ int fieldDeclId: @fielddecl ref,
+ int pos: int ref
+);
+
+fields(
+ unique int id: @field,
+ string nodeName: string ref,
+ int typeid: @type ref,
+ int parentid: @reftype ref
+);
+
+fieldsKotlinType(
+ unique int id: @field ref,
+ int kttypeid: @kt_type ref
+);
+
+constrs(
+ unique int id: @constructor,
+ string nodeName: string ref,
+ string signature: string ref,
+ int typeid: @type ref,
+ int parentid: @reftype ref,
+ int sourceid: @constructor ref
+);
+
+constrsKotlinType(
+ unique int id: @constructor ref,
+ int kttypeid: @kt_type ref
+);
+
+methods(
+ unique int id: @method,
+ string nodeName: string ref,
+ string signature: string ref,
+ int typeid: @type ref,
+ int parentid: @reftype ref,
+ int sourceid: @method ref
+);
+
+methodsKotlinType(
+ unique int id: @method ref,
+ int kttypeid: @kt_type ref
+);
+
+#keyset[parentid,pos]
+params(
+ unique int id: @param,
+ int typeid: @type ref,
+ int pos: int ref,
+ int parentid: @callable ref,
+ int sourceid: @param ref
+);
+
+paramsKotlinType(
+ unique int id: @param ref,
+ int kttypeid: @kt_type ref
+);
+
+paramName(
+ unique int id: @param ref,
+ string nodeName: string ref
+);
+
+isVarargsParam(
+ int param: @param ref
+);
+
+exceptions(
+ unique int id: @exception,
+ int typeid: @type ref,
+ int parentid: @callable ref
+);
+
+isAnnotType(
+ int interfaceid: @classorinterface ref
+);
+
+isAnnotElem(
+ int methodid: @method ref
+);
+
+annotValue(
+ int parentid: @annotation ref,
+ int id2: @method ref,
+ unique int value: @expr ref
+);
+
+isEnumType(
+ int classid: @classorinterface ref
+);
+
+isEnumConst(
+ int fieldid: @field ref
+);
+
+#keyset[parentid,pos]
+typeVars(
+ unique int id: @typevariable,
+ string nodeName: string ref,
+ int pos: int ref,
+ int parentid: @classorinterfaceorcallable ref
+);
+
+wildcards(
+ unique int id: @wildcard,
+ string nodeName: string ref,
+ int kind: int ref
+);
+
+#keyset[parentid,pos]
+typeBounds(
+ unique int id: @typebound,
+ int typeid: @reftype ref,
+ int pos: int ref,
+ int parentid: @boundedtype ref
+);
+
+#keyset[parentid,pos]
+typeArgs(
+ int argumentid: @reftype ref,
+ int pos: int ref,
+ int parentid: @classorinterfaceorcallable ref
+);
+
+isParameterized(
+ int memberid: @member ref
+);
+
+isRaw(
+ int memberid: @member ref
+);
+
+#keyset[classid] #keyset[parent]
+isAnonymClass(
+ int classid: @classorinterface ref,
+ int parent: @classinstancexpr ref
+);
+
+#keyset[typeid] #keyset[parent]
+isLocalClassOrInterface(
+ int typeid: @classorinterface ref,
+ int parent: @localtypedeclstmt ref
+);
+
+isDefConstr(
+ int constructorid: @constructor ref
+);
+
+#keyset[exprId]
+lambdaKind(
+ int exprId: @lambdaexpr ref,
+ int bodyKind: int ref
+);
+
+isCanonicalConstr(
+ int constructorid: @constructor ref
+);
+
+arrays(
+ unique int id: @array,
+ string nodeName: string ref,
+ int elementtypeid: @type ref,
+ int dimension: int ref,
+ int componenttypeid: @type ref
+);
+
+enclInReftype(
+ unique int child: @reftype ref,
+ int parent: @reftype ref
+);
+
+extendsReftype(
+ int id1: @reftype ref,
+ int id2: @classorinterface ref
+);
+
+implInterface(
+ int id1: @classorarray ref,
+ int id2: @classorinterface ref
+);
+
+permits(
+ int id1: @classorinterface ref,
+ int id2: @classorinterface ref
+);
+
+hasModifier(
+ int id1: @modifiable ref,
+ int id2: @modifier ref
+);
+
+imports(
+ unique int id: @import,
+ int holder: @classorinterfaceorpackage ref,
+ string name: string ref,
+ int kind: int ref
+);
+
+#keyset[parent,idx]
+stmts(
+ unique int id: @stmt,
+ int kind: int ref,
+ int parent: @stmtparent ref,
+ int idx: int ref,
+ int bodydecl: @callable ref
+);
+
+@stmtparent = @callable | @stmt | @switchexpr | @whenexpr| @stmtexpr;
+
+case @stmt.kind of
+ 0 = @block
+| 1 = @ifstmt
+| 2 = @forstmt
+| 3 = @enhancedforstmt
+| 4 = @whilestmt
+| 5 = @dostmt
+| 6 = @trystmt
+| 7 = @switchstmt
+| 8 = @synchronizedstmt
+| 9 = @returnstmt
+| 10 = @throwstmt
+| 11 = @breakstmt
+| 12 = @continuestmt
+| 13 = @emptystmt
+| 14 = @exprstmt
+| 15 = @labeledstmt
+| 16 = @assertstmt
+| 17 = @localvariabledeclstmt
+| 18 = @localtypedeclstmt
+| 19 = @constructorinvocationstmt
+| 20 = @superconstructorinvocationstmt
+| 21 = @case
+| 22 = @catchclause
+| 23 = @yieldstmt
+| 24 = @errorstmt
+| 25 = @whenbranch
+;
+
+#keyset[parent,idx]
+exprs(
+ unique int id: @expr,
+ int kind: int ref,
+ int typeid: @type ref,
+ int parent: @exprparent ref,
+ int idx: int ref
+);
+
+exprsKotlinType(
+ unique int id: @expr ref,
+ int kttypeid: @kt_type ref
+);
+
+callableEnclosingExpr(
+ unique int id: @expr ref,
+ int callable_id: @callable ref
+);
+
+statementEnclosingExpr(
+ unique int id: @expr ref,
+ int statement_id: @stmt ref
+);
+
+isParenthesized(
+ unique int id: @expr ref,
+ int parentheses: int ref
+);
+
+case @expr.kind of
+ 1 = @arrayaccess
+| 2 = @arraycreationexpr
+| 3 = @arrayinit
+| 4 = @assignexpr
+| 5 = @assignaddexpr
+| 6 = @assignsubexpr
+| 7 = @assignmulexpr
+| 8 = @assigndivexpr
+| 9 = @assignremexpr
+| 10 = @assignandexpr
+| 11 = @assignorexpr
+| 12 = @assignxorexpr
+| 13 = @assignlshiftexpr
+| 14 = @assignrshiftexpr
+| 15 = @assignurshiftexpr
+| 16 = @booleanliteral
+| 17 = @integerliteral
+| 18 = @longliteral
+| 19 = @floatingpointliteral
+| 20 = @doubleliteral
+| 21 = @characterliteral
+| 22 = @stringliteral
+| 23 = @nullliteral
+| 24 = @mulexpr
+| 25 = @divexpr
+| 26 = @remexpr
+| 27 = @addexpr
+| 28 = @subexpr
+| 29 = @lshiftexpr
+| 30 = @rshiftexpr
+| 31 = @urshiftexpr
+| 32 = @andbitexpr
+| 33 = @orbitexpr
+| 34 = @xorbitexpr
+| 35 = @andlogicalexpr
+| 36 = @orlogicalexpr
+| 37 = @ltexpr
+| 38 = @gtexpr
+| 39 = @leexpr
+| 40 = @geexpr
+| 41 = @eqexpr
+| 42 = @neexpr
+| 43 = @postincexpr
+| 44 = @postdecexpr
+| 45 = @preincexpr
+| 46 = @predecexpr
+| 47 = @minusexpr
+| 48 = @plusexpr
+| 49 = @bitnotexpr
+| 50 = @lognotexpr
+| 51 = @castexpr
+| 52 = @newexpr
+| 53 = @conditionalexpr
+| 54 = @parexpr // deprecated
+| 55 = @instanceofexpr
+| 56 = @localvariabledeclexpr
+| 57 = @typeliteral
+| 58 = @thisaccess
+| 59 = @superaccess
+| 60 = @varaccess
+| 61 = @methodaccess
+| 62 = @unannotatedtypeaccess
+| 63 = @arraytypeaccess
+| 64 = @packageaccess
+| 65 = @wildcardtypeaccess
+| 66 = @declannotation
+| 67 = @uniontypeaccess
+| 68 = @lambdaexpr
+| 69 = @memberref
+| 70 = @annotatedtypeaccess
+| 71 = @typeannotation
+| 72 = @intersectiontypeaccess
+| 73 = @switchexpr
+| 74 = @errorexpr
+| 75 = @whenexpr
+| 76 = @getclassexpr
+| 77 = @safecastexpr
+| 78 = @implicitcastexpr
+| 79 = @implicitnotnullexpr
+| 80 = @implicitcoerciontounitexpr
+| 81 = @notinstanceofexpr
+| 82 = @stmtexpr
+| 83 = @stringtemplateexpr
+| 84 = @notnullexpr
+| 85 = @unsafecoerceexpr
+| 86 = @valueeqexpr
+| 87 = @valueneexpr
+| 88 = @propertyref
+| 89 = @recordpatternexpr
+;
+
+/** Holds if this `when` expression was written as an `if` expression. */
+when_if(unique int id: @whenexpr ref);
+
+/** Holds if this `when` branch was written as an `else` branch. */
+when_branch_else(unique int id: @whenbranch ref);
+
+@classinstancexpr = @newexpr | @lambdaexpr | @memberref | @propertyref
+
+@annotation = @declannotation | @typeannotation
+@typeaccess = @unannotatedtypeaccess | @annotatedtypeaccess
+
+@assignment = @assignexpr
+ | @assignop;
+
+@unaryassignment = @postincexpr
+ | @postdecexpr
+ | @preincexpr
+ | @predecexpr;
+
+@assignop = @assignaddexpr
+ | @assignsubexpr
+ | @assignmulexpr
+ | @assigndivexpr
+ | @assignremexpr
+ | @assignandexpr
+ | @assignorexpr
+ | @assignxorexpr
+ | @assignlshiftexpr
+ | @assignrshiftexpr
+ | @assignurshiftexpr;
+
+@literal = @booleanliteral
+ | @integerliteral
+ | @longliteral
+ | @floatingpointliteral
+ | @doubleliteral
+ | @characterliteral
+ | @stringliteral
+ | @nullliteral;
+
+@binaryexpr = @mulexpr
+ | @divexpr
+ | @remexpr
+ | @addexpr
+ | @subexpr
+ | @lshiftexpr
+ | @rshiftexpr
+ | @urshiftexpr
+ | @andbitexpr
+ | @orbitexpr
+ | @xorbitexpr
+ | @andlogicalexpr
+ | @orlogicalexpr
+ | @ltexpr
+ | @gtexpr
+ | @leexpr
+ | @geexpr
+ | @eqexpr
+ | @neexpr
+ | @valueeqexpr
+ | @valueneexpr;
+
+@unaryexpr = @postincexpr
+ | @postdecexpr
+ | @preincexpr
+ | @predecexpr
+ | @minusexpr
+ | @plusexpr
+ | @bitnotexpr
+ | @lognotexpr
+ | @notnullexpr;
+
+@caller = @classinstancexpr
+ | @methodaccess
+ | @constructorinvocationstmt
+ | @superconstructorinvocationstmt;
+
+callableBinding(
+ unique int callerid: @caller ref,
+ int callee: @callable ref
+);
+
+memberRefBinding(
+ unique int id: @expr ref,
+ int callable: @callable ref
+);
+
+propertyRefGetBinding(
+ unique int id: @expr ref,
+ int getter: @callable ref
+);
+
+propertyRefFieldBinding(
+ unique int id: @expr ref,
+ int field: @field ref
+);
+
+propertyRefSetBinding(
+ unique int id: @expr ref,
+ int setter: @callable ref
+);
+
+@exprparent = @stmt | @expr | @whenbranch | @callable | @field | @fielddecl | @classorinterface | @param | @localvar | @typevariable;
+
+variableBinding(
+ unique int expr: @varaccess ref,
+ int variable: @variable ref
+);
+
+@variable = @localscopevariable | @field;
+
+@localscopevariable = @localvar | @param;
+
+localvars(
+ unique int id: @localvar,
+ string nodeName: string ref,
+ int typeid: @type ref,
+ int parentid: @localvariabledeclexpr ref
+);
+
+localvarsKotlinType(
+ unique int id: @localvar ref,
+ int kttypeid: @kt_type ref
+);
+
+@namedexprorstmt = @breakstmt
+ | @continuestmt
+ | @labeledstmt
+ | @literal;
+
+namestrings(
+ string name: string ref,
+ string value: string ref,
+ unique int parent: @namedexprorstmt ref
+);
+
+/*
+ * Modules
+ */
+
+#keyset[name]
+modules(
+ unique int id: @module,
+ string name: string ref
+);
+
+isOpen(
+ int id: @module ref
+);
+
+#keyset[fileId]
+cumodule(
+ int fileId: @file ref,
+ int moduleId: @module ref
+);
+
+@directive = @requires
+ | @exports
+ | @opens
+ | @uses
+ | @provides
+
+#keyset[directive]
+directives(
+ int id: @module ref,
+ int directive: @directive ref
+);
+
+requires(
+ unique int id: @requires,
+ int target: @module ref
+);
+
+isTransitive(
+ int id: @requires ref
+);
+
+isStatic(
+ int id: @requires ref
+);
+
+exports(
+ unique int id: @exports,
+ int target: @package ref
+);
+
+exportsTo(
+ int id: @exports ref,
+ int target: @module ref
+);
+
+opens(
+ unique int id: @opens,
+ int target: @package ref
+);
+
+opensTo(
+ int id: @opens ref,
+ int target: @module ref
+);
+
+uses(
+ unique int id: @uses,
+ string serviceInterface: string ref
+);
+
+provides(
+ unique int id: @provides,
+ string serviceInterface: string ref
+);
+
+providesWith(
+ int id: @provides ref,
+ string serviceImpl: string ref
+);
+
+isNullDefaultCase(
+ int id: @case ref
+);
+
+/*
+ * Javadoc
+ */
+
+javadoc(
+ unique int id: @javadoc
+);
+
+isNormalComment(
+ int commentid : @javadoc ref
+);
+
+isEolComment(
+ int commentid : @javadoc ref
+);
+
+hasJavadoc(
+ int documentableid: @member ref,
+ int javadocid: @javadoc ref
+);
+
+#keyset[parentid,idx]
+javadocTag(
+ unique int id: @javadocTag,
+ string name: string ref,
+ int parentid: @javadocParent ref,
+ int idx: int ref
+);
+
+#keyset[parentid,idx]
+javadocText(
+ unique int id: @javadocText,
+ string text: string ref,
+ int parentid: @javadocParent ref,
+ int idx: int ref
+);
+
+@javadocParent = @javadoc | @javadocTag;
+@javadocElement = @javadocTag | @javadocText;
+
+@classorinterfaceorpackage = @classorinterface | @package;
+@classorinterfaceorcallable = @classorinterface | @callable;
+@boundedtype = @typevariable | @wildcard;
+@reftype = @classorinterface | @array | @boundedtype | @errortype;
+@classorarray = @classorinterface | @array;
+@type = @primitive | @reftype;
+@callable = @method | @constructor;
+
+/** A program element that has a name. */
+@element = @package | @modifier | @annotation | @errortype |
+ @locatableElement;
+
+@locatableElement = @file | @primitive | @classorinterface | @method | @constructor | @param | @exception | @field |
+ @boundedtype | @array | @localvar | @expr | @stmt | @import | @fielddecl | @kt_type | @kt_type_alias |
+ @kt_property;
+
+@modifiable = @member_modifiable| @param | @localvar | @typevariable;
+
+@member_modifiable = @classorinterface | @method | @constructor | @field | @kt_property;
+
+@member = @method | @constructor | @field | @reftype ;
+
+/** A program element that has a location. */
+@locatable = @typebound | @javadoc | @javadocTag | @javadocText | @xmllocatable | @ktcomment |
+ @locatableElement;
+
+@top = @element | @locatable | @folder;
+
+/*
+ * XML Files
+ */
+
+xmlEncoding(
+ unique int id: @file ref,
+ string encoding: string ref
+);
+
+xmlDTDs(
+ unique int id: @xmldtd,
+ string root: string ref,
+ string publicId: string ref,
+ string systemId: string ref,
+ int fileid: @file ref
+);
+
+xmlElements(
+ unique int id: @xmlelement,
+ string name: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int fileid: @file ref
+);
+
+xmlAttrs(
+ unique int id: @xmlattribute,
+ int elementid: @xmlelement ref,
+ string name: string ref,
+ string value: string ref,
+ int idx: int ref,
+ int fileid: @file ref
+);
+
+xmlNs(
+ int id: @xmlnamespace,
+ string prefixName: string ref,
+ string URI: string ref,
+ int fileid: @file ref
+);
+
+xmlHasNs(
+ int elementId: @xmlnamespaceable ref,
+ int nsId: @xmlnamespace ref,
+ int fileid: @file ref
+);
+
+xmlComments(
+ unique int id: @xmlcomment,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int fileid: @file ref
+);
+
+xmlChars(
+ unique int id: @xmlcharacters,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int isCDATA: int ref,
+ int fileid: @file ref
+);
+
+@xmlparent = @file | @xmlelement;
+@xmlnamespaceable = @xmlelement | @xmlattribute;
+
+xmllocations(
+ int xmlElement: @xmllocatable ref,
+ int location: @location_default ref
+);
+
+@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace;
+
+/*
+ * configuration files with key value pairs
+ */
+
+configs(
+ unique int id: @config
+);
+
+configNames(
+ unique int id: @configName,
+ int config: @config ref,
+ string name: string ref
+);
+
+configValues(
+ unique int id: @configValue,
+ int config: @config ref,
+ string value: string ref
+);
+
+configLocations(
+ int locatable: @configLocatable ref,
+ int location: @location_default ref
+);
+
+@configLocatable = @config | @configName | @configValue;
+
+ktComments(
+ unique int id: @ktcomment,
+ int kind: int ref,
+ string text : string ref
+)
+
+ktCommentSections(
+ unique int id: @ktcommentsection,
+ int comment: @ktcomment ref,
+ string content : string ref
+)
+
+ktCommentSectionNames(
+ unique int id: @ktcommentsection ref,
+ string name : string ref
+)
+
+ktCommentSectionSubjectNames(
+ unique int id: @ktcommentsection ref,
+ string subjectname : string ref
+)
+
+#keyset[id, owner]
+ktCommentOwners(
+ int id: @ktcomment ref,
+ int owner: @top ref
+)
+
+ktExtensionFunctions(
+ unique int id: @method ref,
+ int typeid: @type ref,
+ int kttypeid: @kt_type ref
+)
+
+ktProperties(
+ unique int id: @kt_property,
+ string nodeName: string ref
+)
+
+ktPropertyGetters(
+ unique int id: @kt_property ref,
+ int getter: @method ref
+)
+
+ktPropertySetters(
+ unique int id: @kt_property ref,
+ int setter: @method ref
+)
+
+ktPropertyBackingFields(
+ unique int id: @kt_property ref,
+ int backingField: @field ref
+)
+
+ktSyntheticBody(
+ unique int id: @callable ref,
+ int kind: int ref
+ // 1: ENUM_VALUES
+ // 2: ENUM_VALUEOF
+ // 3: ENUM_ENTRIES
+)
+
+ktLocalFunction(
+ unique int id: @method ref
+)
+
+ktInitializerAssignment(
+ unique int id: @assignexpr ref
+)
+
+ktPropertyDelegates(
+ unique int id: @kt_property ref,
+ unique int variableId: @variable ref
+)
+
+/**
+ * If `id` is a compiler generated element, then the kind indicates the
+ * reason that the compiler generated it.
+ * See `Element.compilerGeneratedReason()` for an explanation of what
+ * each `kind` means.
+ */
+compiler_generated(
+ unique int id: @element ref,
+ int kind: int ref
+)
+
+ktFunctionOriginalNames(
+ unique int id: @method ref,
+ string name: string ref
+)
+
+ktDataClasses(
+ unique int id: @classorinterface ref
+)
diff --git a/java/downgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/semmlecode.dbscheme b/java/downgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/semmlecode.dbscheme
new file mode 100644
index 000000000000..38d02c063878
--- /dev/null
+++ b/java/downgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/semmlecode.dbscheme
@@ -0,0 +1,1232 @@
+/**
+ * An invocation of the compiler. Note that more than one file may be
+ * compiled per invocation. For example, this command compiles three
+ * source files:
+ *
+ * javac A.java B.java C.java
+ *
+ * The `id` simply identifies the invocation, while `cwd` is the working
+ * directory from which the compiler was invoked.
+ */
+compilations(
+ /**
+ * An invocation of the compiler. Note that more than one file may
+ * be compiled per invocation. For example, this command compiles
+ * three source files:
+ *
+ * javac A.java B.java C.java
+ */
+ unique int id : @compilation,
+ int kind: int ref,
+ string cwd : string ref,
+ string name : string ref
+);
+
+case @compilation.kind of
+ 1 = @javacompilation
+| 2 = @kotlincompilation
+;
+
+compilation_started(
+ int id : @compilation ref
+)
+
+compilation_info(
+ int id : @compilation ref,
+ string info_key: string ref,
+ string info_value: string ref
+)
+
+/**
+ * The arguments that were passed to the extractor for a compiler
+ * invocation. If `id` is for the compiler invocation
+ *
+ * javac A.java B.java C.java
+ *
+ * then typically there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | *path to extractor*
+ * 1 | `--javac-args`
+ * 2 | A.java
+ * 3 | B.java
+ * 4 | C.java
+ */
+#keyset[id, num]
+compilation_args(
+ int id : @compilation ref,
+ int num : int ref,
+ string arg : string ref
+);
+
+/**
+ * The expanded arguments that were passed to the extractor for a
+ * compiler invocation. This is similar to `compilation_args`, but
+ * for a `@@@someFile` argument, it includes the arguments from that
+ * file, rather than just taking the argument literally.
+ */
+#keyset[id, num]
+compilation_expanded_args(
+ int id : @compilation ref,
+ int num : int ref,
+ string arg : string ref
+);
+
+/**
+ * The source files that are compiled by a compiler invocation.
+ * If `id` is for the compiler invocation
+ *
+ * javac A.java B.java C.java
+ *
+ * then there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | A.java
+ * 1 | B.java
+ * 2 | C.java
+ */
+#keyset[id, num]
+compilation_compiling_files(
+ int id : @compilation ref,
+ int num : int ref,
+ int file : @file ref
+);
+
+/**
+ * For each file recorded in `compilation_compiling_files`,
+ * there will be a corresponding row in
+ * `compilation_compiling_files_completed` once extraction
+ * of that file is complete. The `result` will indicate the
+ * extraction result:
+ *
+ * 0: Successfully extracted
+ * 1: Errors were encountered, but extraction recovered
+ * 2: Errors were encountered, and extraction could not recover
+ */
+#keyset[id, num]
+compilation_compiling_files_completed(
+ int id : @compilation ref,
+ int num : int ref,
+ int result : int ref
+);
+
+/**
+ * The time taken by the extractor for a compiler invocation.
+ *
+ * For each file `num`, there will be rows for
+ *
+ * kind | seconds
+ * ---- | ---
+ * 1 | CPU seconds used by the extractor frontend
+ * 2 | Elapsed seconds during the extractor frontend
+ * 3 | CPU seconds used by the extractor backend
+ * 4 | Elapsed seconds during the extractor backend
+ */
+#keyset[id, num, kind]
+compilation_time(
+ int id : @compilation ref,
+ int num : int ref,
+ /* kind:
+ 1 = frontend_cpu_seconds
+ 2 = frontend_elapsed_seconds
+ 3 = extractor_cpu_seconds
+ 4 = extractor_elapsed_seconds
+ */
+ int kind : int ref,
+ float seconds : float ref
+);
+
+/**
+ * The `cpu_seconds` and `elapsed_seconds` are the CPU time and elapsed
+ * time (respectively) that the original compilation (not the extraction)
+ * took for compiler invocation `id`.
+ */
+compilation_compiler_times(
+ unique int id : @compilation ref,
+ float cpu_seconds : float ref,
+ float elapsed_seconds : float ref
+);
+
+/**
+ * If extraction was successful, then `cpu_seconds` and
+ * `elapsed_seconds` are the CPU time and elapsed time (respectively)
+ * that extraction took for compiler invocation `id`.
+ * The `result` will indicate the extraction result:
+ *
+ * 0: Successfully extracted
+ * 1: Errors were encountered, but extraction recovered
+ * 2: Errors were encountered, and extraction could not recover
+ */
+compilation_finished(
+ unique int id : @compilation ref,
+ float cpu_seconds : float ref,
+ float elapsed_seconds : float ref,
+ int result : int ref
+);
+
+diagnostics(
+ unique int id: @diagnostic,
+ string generated_by: string ref, // TODO: Sync this with the other languages?
+ 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
+);
+
+/**
+ * An error or warning generated by the extractor.
+ * The diagnostic message `diagnostic` was generated during compiler
+ * invocation `compilation`, and is the `file_number_diagnostic_number`th
+ * message generated while extracting the `file_number`th file of that
+ * invocation.
+ */
+#keyset[compilation, file_number, file_number_diagnostic_number]
+diagnostic_for(
+ unique int diagnostic : @diagnostic ref,
+ int compilation : @compilation ref,
+ int file_number : int ref,
+ int file_number_diagnostic_number : int ref
+);
+
+/*
+ * External artifacts
+ */
+
+externalData(
+ int id : @externalDataElement,
+ string path : string ref,
+ int column: int ref,
+ string value : string ref
+);
+
+sourceLocationPrefix(
+ string prefix : string ref
+);
+
+databaseMetadata(
+ string metadataKey : string ref,
+ string value : string ref
+);
+
+/*
+ * SMAP
+ */
+
+smap_header(
+ int outputFileId: @file ref,
+ string outputFilename: string ref,
+ string defaultStratum: string ref
+);
+
+smap_files(
+ int outputFileId: @file ref,
+ string stratum: string ref,
+ int inputFileNum: int ref,
+ string inputFileName: string ref,
+ int inputFileId: @file ref
+);
+
+smap_lines(
+ int outputFileId: @file ref,
+ string stratum: string ref,
+ int inputFileNum: int ref,
+ int inputStartLine: int ref,
+ int inputLineCount: int ref,
+ int outputStartLine: int ref,
+ int outputLineIncrement: int ref
+);
+
+/*
+ * Locations and files
+ */
+
+@location = @location_default ;
+
+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
+);
+
+hasLocation(
+ int locatableid: @locatable ref,
+ int id: @location ref
+);
+
+@sourceline = @locatable ;
+
+#keyset[element_id]
+numlines(
+ int element_id: @sourceline ref,
+ int num_lines: int ref,
+ int num_code: int ref,
+ int num_comment: int ref
+);
+
+files(
+ unique int id: @file,
+ string name: string ref
+);
+
+folders(
+ unique int id: @folder,
+ string name: string ref
+);
+
+@container = @folder | @file
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref
+);
+
+/*
+ * Java
+ */
+
+cupackage(
+ unique int id: @file ref,
+ int packageid: @package ref
+);
+
+#keyset[fileid,keyName]
+jarManifestMain(
+ int fileid: @file ref,
+ string keyName: string ref,
+ string value: string ref
+);
+
+#keyset[fileid,entryName,keyName]
+jarManifestEntries(
+ int fileid: @file ref,
+ string entryName: string ref,
+ string keyName: string ref,
+ string value: string ref
+);
+
+packages(
+ unique int id: @package,
+ string nodeName: string ref
+);
+
+primitives(
+ unique int id: @primitive,
+ string nodeName: string ref
+);
+
+modifiers(
+ unique int id: @modifier,
+ string nodeName: string ref
+);
+
+/**
+ * An errortype is used when the extractor is unable to extract a type
+ * correctly for some reason.
+ */
+error_type(
+ unique int id: @errortype
+);
+
+classes_or_interfaces(
+ unique int id: @classorinterface,
+ string nodeName: string ref,
+ int parentid: @package ref,
+ int sourceid: @classorinterface ref
+);
+
+file_class(
+ int id: @classorinterface ref
+);
+
+class_object(
+ unique int id: @classorinterface ref,
+ unique int instance: @field ref
+);
+
+type_companion_object(
+ unique int id: @classorinterface ref,
+ unique int instance: @field ref,
+ unique int companion_object: @classorinterface ref
+);
+
+kt_nullable_types(
+ unique int id: @kt_nullable_type,
+ int classid: @reftype ref
+)
+
+kt_notnull_types(
+ unique int id: @kt_notnull_type,
+ int classid: @reftype ref
+)
+
+kt_type_alias(
+ unique int id: @kt_type_alias,
+ string name: string ref,
+ int kttypeid: @kt_type ref
+)
+
+@kt_type = @kt_nullable_type | @kt_notnull_type
+
+isInterface(
+ unique int id: @classorinterface ref
+);
+
+isRecord(
+ unique int id: @classorinterface ref
+);
+
+fielddecls(
+ unique int id: @fielddecl,
+ int parentid: @reftype ref
+);
+
+#keyset[fieldId] #keyset[fieldDeclId,pos]
+fieldDeclaredIn(
+ int fieldId: @field ref,
+ int fieldDeclId: @fielddecl ref,
+ int pos: int ref
+);
+
+fields(
+ unique int id: @field,
+ string nodeName: string ref,
+ int typeid: @type ref,
+ int parentid: @reftype ref
+);
+
+fieldsKotlinType(
+ unique int id: @field ref,
+ int kttypeid: @kt_type ref
+);
+
+constrs(
+ unique int id: @constructor,
+ string nodeName: string ref,
+ string signature: string ref,
+ int typeid: @type ref,
+ int parentid: @reftype ref,
+ int sourceid: @constructor ref
+);
+
+constrsKotlinType(
+ unique int id: @constructor ref,
+ int kttypeid: @kt_type ref
+);
+
+methods(
+ unique int id: @method,
+ string nodeName: string ref,
+ string signature: string ref,
+ int typeid: @type ref,
+ int parentid: @reftype ref,
+ int sourceid: @method ref
+);
+
+methodsKotlinType(
+ unique int id: @method ref,
+ int kttypeid: @kt_type ref
+);
+
+#keyset[parentid,pos]
+params(
+ unique int id: @param,
+ int typeid: @type ref,
+ int pos: int ref,
+ int parentid: @callable ref,
+ int sourceid: @param ref
+);
+
+paramsKotlinType(
+ unique int id: @param ref,
+ int kttypeid: @kt_type ref
+);
+
+paramName(
+ unique int id: @param ref,
+ string nodeName: string ref
+);
+
+isVarargsParam(
+ int param: @param ref
+);
+
+exceptions(
+ unique int id: @exception,
+ int typeid: @type ref,
+ int parentid: @callable ref
+);
+
+isAnnotType(
+ int interfaceid: @classorinterface ref
+);
+
+isAnnotElem(
+ int methodid: @method ref
+);
+
+annotValue(
+ int parentid: @annotation ref,
+ int id2: @method ref,
+ unique int value: @expr ref
+);
+
+isEnumType(
+ int classid: @classorinterface ref
+);
+
+isEnumConst(
+ int fieldid: @field ref
+);
+
+#keyset[parentid,pos]
+typeVars(
+ unique int id: @typevariable,
+ string nodeName: string ref,
+ int pos: int ref,
+ int parentid: @classorinterfaceorcallable ref
+);
+
+wildcards(
+ unique int id: @wildcard,
+ string nodeName: string ref,
+ int kind: int ref
+);
+
+#keyset[parentid,pos]
+typeBounds(
+ unique int id: @typebound,
+ int typeid: @reftype ref,
+ int pos: int ref,
+ int parentid: @boundedtype ref
+);
+
+#keyset[parentid,pos]
+typeArgs(
+ int argumentid: @reftype ref,
+ int pos: int ref,
+ int parentid: @classorinterfaceorcallable ref
+);
+
+isParameterized(
+ int memberid: @member ref
+);
+
+isRaw(
+ int memberid: @member ref
+);
+
+#keyset[classid] #keyset[parent]
+isAnonymClass(
+ int classid: @classorinterface ref,
+ int parent: @classinstancexpr ref
+);
+
+#keyset[typeid] #keyset[parent]
+isLocalClassOrInterface(
+ int typeid: @classorinterface ref,
+ int parent: @localtypedeclstmt ref
+);
+
+isDefConstr(
+ int constructorid: @constructor ref
+);
+
+#keyset[exprId]
+lambdaKind(
+ int exprId: @lambdaexpr ref,
+ int bodyKind: int ref
+);
+
+isCanonicalConstr(
+ int constructorid: @constructor ref
+);
+
+arrays(
+ unique int id: @array,
+ string nodeName: string ref,
+ int elementtypeid: @type ref,
+ int dimension: int ref,
+ int componenttypeid: @type ref
+);
+
+enclInReftype(
+ unique int child: @reftype ref,
+ int parent: @reftype ref
+);
+
+extendsReftype(
+ int id1: @reftype ref,
+ int id2: @classorinterface ref
+);
+
+implInterface(
+ int id1: @classorarray ref,
+ int id2: @classorinterface ref
+);
+
+permits(
+ int id1: @classorinterface ref,
+ int id2: @classorinterface ref
+);
+
+hasModifier(
+ int id1: @modifiable ref,
+ int id2: @modifier ref
+);
+
+imports(
+ unique int id: @import,
+ int holder: @classorinterfaceorpackage ref,
+ string name: string ref,
+ int kind: int ref
+);
+
+#keyset[parent,idx]
+stmts(
+ unique int id: @stmt,
+ int kind: int ref,
+ int parent: @stmtparent ref,
+ int idx: int ref,
+ int bodydecl: @callable ref
+);
+
+@stmtparent = @callable | @stmt | @switchexpr | @whenexpr| @stmtexpr;
+
+case @stmt.kind of
+ 0 = @block
+| 1 = @ifstmt
+| 2 = @forstmt
+| 3 = @enhancedforstmt
+| 4 = @whilestmt
+| 5 = @dostmt
+| 6 = @trystmt
+| 7 = @switchstmt
+| 8 = @synchronizedstmt
+| 9 = @returnstmt
+| 10 = @throwstmt
+| 11 = @breakstmt
+| 12 = @continuestmt
+| 13 = @emptystmt
+| 14 = @exprstmt
+| 15 = @labeledstmt
+| 16 = @assertstmt
+| 17 = @localvariabledeclstmt
+| 18 = @localtypedeclstmt
+| 19 = @constructorinvocationstmt
+| 20 = @superconstructorinvocationstmt
+| 21 = @case
+| 22 = @catchclause
+| 23 = @yieldstmt
+| 24 = @errorstmt
+| 25 = @whenbranch
+;
+
+#keyset[parent,idx]
+exprs(
+ unique int id: @expr,
+ int kind: int ref,
+ int typeid: @type ref,
+ int parent: @exprparent ref,
+ int idx: int ref
+);
+
+exprsKotlinType(
+ unique int id: @expr ref,
+ int kttypeid: @kt_type ref
+);
+
+callableEnclosingExpr(
+ unique int id: @expr ref,
+ int callable_id: @callable ref
+);
+
+statementEnclosingExpr(
+ unique int id: @expr ref,
+ int statement_id: @stmt ref
+);
+
+isParenthesized(
+ unique int id: @expr ref,
+ int parentheses: int ref
+);
+
+case @expr.kind of
+ 1 = @arrayaccess
+| 2 = @arraycreationexpr
+| 3 = @arrayinit
+| 4 = @assignexpr
+| 5 = @assignaddexpr
+| 6 = @assignsubexpr
+| 7 = @assignmulexpr
+| 8 = @assigndivexpr
+| 9 = @assignremexpr
+| 10 = @assignandexpr
+| 11 = @assignorexpr
+| 12 = @assignxorexpr
+| 13 = @assignlshiftexpr
+| 14 = @assignrshiftexpr
+| 15 = @assignurshiftexpr
+| 16 = @booleanliteral
+| 17 = @integerliteral
+| 18 = @longliteral
+| 19 = @floatingpointliteral
+| 20 = @doubleliteral
+| 21 = @characterliteral
+| 22 = @stringliteral
+| 23 = @nullliteral
+| 24 = @mulexpr
+| 25 = @divexpr
+| 26 = @remexpr
+| 27 = @addexpr
+| 28 = @subexpr
+| 29 = @lshiftexpr
+| 30 = @rshiftexpr
+| 31 = @urshiftexpr
+| 32 = @andbitexpr
+| 33 = @orbitexpr
+| 34 = @xorbitexpr
+| 35 = @andlogicalexpr
+| 36 = @orlogicalexpr
+| 37 = @ltexpr
+| 38 = @gtexpr
+| 39 = @leexpr
+| 40 = @geexpr
+| 41 = @eqexpr
+| 42 = @neexpr
+| 43 = @postincexpr
+| 44 = @postdecexpr
+| 45 = @preincexpr
+| 46 = @predecexpr
+| 47 = @minusexpr
+| 48 = @plusexpr
+| 49 = @bitnotexpr
+| 50 = @lognotexpr
+| 51 = @castexpr
+| 52 = @newexpr
+| 53 = @conditionalexpr
+| 54 = @parexpr // deprecated
+| 55 = @instanceofexpr
+| 56 = @localvariabledeclexpr
+| 57 = @typeliteral
+| 58 = @thisaccess
+| 59 = @superaccess
+| 60 = @varaccess
+| 61 = @methodaccess
+| 62 = @unannotatedtypeaccess
+| 63 = @arraytypeaccess
+| 64 = @packageaccess
+| 65 = @wildcardtypeaccess
+| 66 = @declannotation
+| 67 = @uniontypeaccess
+| 68 = @lambdaexpr
+| 69 = @memberref
+| 70 = @annotatedtypeaccess
+| 71 = @typeannotation
+| 72 = @intersectiontypeaccess
+| 73 = @switchexpr
+| 74 = @errorexpr
+| 75 = @whenexpr
+| 76 = @getclassexpr
+| 77 = @safecastexpr
+| 78 = @implicitcastexpr
+| 79 = @implicitnotnullexpr
+| 80 = @implicitcoerciontounitexpr
+| 81 = @notinstanceofexpr
+| 82 = @stmtexpr
+| 83 = @stringtemplateexpr
+| 84 = @notnullexpr
+| 85 = @unsafecoerceexpr
+| 86 = @valueeqexpr
+| 87 = @valueneexpr
+| 88 = @propertyref
+| 89 = @recordpatternexpr
+;
+
+/** Holds if this `when` expression was written as an `if` expression. */
+when_if(unique int id: @whenexpr ref);
+
+/** Holds if this `when` branch was written as an `else` branch. */
+when_branch_else(unique int id: @whenbranch ref);
+
+@classinstancexpr = @newexpr | @lambdaexpr | @memberref | @propertyref
+
+@annotation = @declannotation | @typeannotation
+@typeaccess = @unannotatedtypeaccess | @annotatedtypeaccess
+
+@assignment = @assignexpr
+ | @assignop;
+
+@unaryassignment = @postincexpr
+ | @postdecexpr
+ | @preincexpr
+ | @predecexpr;
+
+@assignop = @assignaddexpr
+ | @assignsubexpr
+ | @assignmulexpr
+ | @assigndivexpr
+ | @assignremexpr
+ | @assignandexpr
+ | @assignorexpr
+ | @assignxorexpr
+ | @assignlshiftexpr
+ | @assignrshiftexpr
+ | @assignurshiftexpr;
+
+@literal = @booleanliteral
+ | @integerliteral
+ | @longliteral
+ | @floatingpointliteral
+ | @doubleliteral
+ | @characterliteral
+ | @stringliteral
+ | @nullliteral;
+
+@binaryexpr = @mulexpr
+ | @divexpr
+ | @remexpr
+ | @addexpr
+ | @subexpr
+ | @lshiftexpr
+ | @rshiftexpr
+ | @urshiftexpr
+ | @andbitexpr
+ | @orbitexpr
+ | @xorbitexpr
+ | @andlogicalexpr
+ | @orlogicalexpr
+ | @ltexpr
+ | @gtexpr
+ | @leexpr
+ | @geexpr
+ | @eqexpr
+ | @neexpr
+ | @valueeqexpr
+ | @valueneexpr;
+
+@unaryexpr = @postincexpr
+ | @postdecexpr
+ | @preincexpr
+ | @predecexpr
+ | @minusexpr
+ | @plusexpr
+ | @bitnotexpr
+ | @lognotexpr
+ | @notnullexpr;
+
+@caller = @classinstancexpr
+ | @methodaccess
+ | @constructorinvocationstmt
+ | @superconstructorinvocationstmt;
+
+callableBinding(
+ unique int callerid: @caller ref,
+ int callee: @callable ref
+);
+
+memberRefBinding(
+ unique int id: @expr ref,
+ int callable: @callable ref
+);
+
+propertyRefGetBinding(
+ unique int id: @expr ref,
+ int getter: @callable ref
+);
+
+propertyRefFieldBinding(
+ unique int id: @expr ref,
+ int field: @field ref
+);
+
+propertyRefSetBinding(
+ unique int id: @expr ref,
+ int setter: @callable ref
+);
+
+@exprparent = @stmt | @expr | @whenbranch | @callable | @field | @fielddecl | @classorinterface | @param | @localvar | @typevariable;
+
+variableBinding(
+ unique int expr: @varaccess ref,
+ int variable: @variable ref
+);
+
+@variable = @localscopevariable | @field;
+
+@localscopevariable = @localvar | @param;
+
+localvars(
+ unique int id: @localvar,
+ string nodeName: string ref,
+ int typeid: @type ref,
+ int parentid: @localvariabledeclexpr ref
+);
+
+localvarsKotlinType(
+ unique int id: @localvar ref,
+ int kttypeid: @kt_type ref
+);
+
+@namedexprorstmt = @breakstmt
+ | @continuestmt
+ | @labeledstmt
+ | @literal;
+
+namestrings(
+ string name: string ref,
+ string value: string ref,
+ unique int parent: @namedexprorstmt ref
+);
+
+/*
+ * Modules
+ */
+
+#keyset[name]
+modules(
+ unique int id: @module,
+ string name: string ref
+);
+
+isOpen(
+ int id: @module ref
+);
+
+#keyset[fileId]
+cumodule(
+ int fileId: @file ref,
+ int moduleId: @module ref
+);
+
+@directive = @requires
+ | @exports
+ | @opens
+ | @uses
+ | @provides
+
+#keyset[directive]
+directives(
+ int id: @module ref,
+ int directive: @directive ref
+);
+
+requires(
+ unique int id: @requires,
+ int target: @module ref
+);
+
+isTransitive(
+ int id: @requires ref
+);
+
+isStatic(
+ int id: @requires ref
+);
+
+exports(
+ unique int id: @exports,
+ int target: @package ref
+);
+
+exportsTo(
+ int id: @exports ref,
+ int target: @module ref
+);
+
+opens(
+ unique int id: @opens,
+ int target: @package ref
+);
+
+opensTo(
+ int id: @opens ref,
+ int target: @module ref
+);
+
+uses(
+ unique int id: @uses,
+ string serviceInterface: string ref
+);
+
+provides(
+ unique int id: @provides,
+ string serviceInterface: string ref
+);
+
+providesWith(
+ int id: @provides ref,
+ string serviceImpl: string ref
+);
+
+isNullDefaultCase(
+ int id: @case ref
+);
+
+/*
+ * Javadoc
+ */
+
+javadoc(
+ unique int id: @javadoc
+);
+
+isNormalComment(
+ int commentid : @javadoc ref
+);
+
+isEolComment(
+ int commentid : @javadoc ref
+);
+
+hasJavadoc(
+ int documentableid: @member ref,
+ int javadocid: @javadoc ref
+);
+
+#keyset[parentid,idx]
+javadocTag(
+ unique int id: @javadocTag,
+ string name: string ref,
+ int parentid: @javadocParent ref,
+ int idx: int ref
+);
+
+#keyset[parentid,idx]
+javadocText(
+ unique int id: @javadocText,
+ string text: string ref,
+ int parentid: @javadocParent ref,
+ int idx: int ref
+);
+
+@javadocParent = @javadoc | @javadocTag;
+@javadocElement = @javadocTag | @javadocText;
+
+@classorinterfaceorpackage = @classorinterface | @package;
+@classorinterfaceorcallable = @classorinterface | @callable;
+@boundedtype = @typevariable | @wildcard;
+@reftype = @classorinterface | @array | @boundedtype | @errortype;
+@classorarray = @classorinterface | @array;
+@type = @primitive | @reftype;
+@callable = @method | @constructor;
+
+/** A program element that has a name. */
+@element = @package | @modifier | @annotation | @errortype |
+ @locatableElement;
+
+@locatableElement = @file | @primitive | @classorinterface | @method | @constructor | @param | @exception | @field |
+ @boundedtype | @array | @localvar | @expr | @stmt | @import | @fielddecl | @kt_type | @kt_type_alias |
+ @kt_property;
+
+@modifiable = @member_modifiable| @param | @localvar | @typevariable;
+
+@member_modifiable = @classorinterface | @method | @constructor | @field | @kt_property;
+
+@member = @method | @constructor | @field | @reftype ;
+
+/** A program element that has a location. */
+@locatable = @typebound | @javadoc | @javadocTag | @javadocText | @xmllocatable | @ktcomment |
+ @locatableElement;
+
+@top = @element | @locatable | @folder;
+
+/*
+ * XML Files
+ */
+
+xmlEncoding(
+ unique int id: @file ref,
+ string encoding: string ref
+);
+
+xmlDTDs(
+ unique int id: @xmldtd,
+ string root: string ref,
+ string publicId: string ref,
+ string systemId: string ref,
+ int fileid: @file ref
+);
+
+xmlElements(
+ unique int id: @xmlelement,
+ string name: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int fileid: @file ref
+);
+
+xmlAttrs(
+ unique int id: @xmlattribute,
+ int elementid: @xmlelement ref,
+ string name: string ref,
+ string value: string ref,
+ int idx: int ref,
+ int fileid: @file ref
+);
+
+xmlNs(
+ int id: @xmlnamespace,
+ string prefixName: string ref,
+ string URI: string ref,
+ int fileid: @file ref
+);
+
+xmlHasNs(
+ int elementId: @xmlnamespaceable ref,
+ int nsId: @xmlnamespace ref,
+ int fileid: @file ref
+);
+
+xmlComments(
+ unique int id: @xmlcomment,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int fileid: @file ref
+);
+
+xmlChars(
+ unique int id: @xmlcharacters,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int isCDATA: int ref,
+ int fileid: @file ref
+);
+
+@xmlparent = @file | @xmlelement;
+@xmlnamespaceable = @xmlelement | @xmlattribute;
+
+xmllocations(
+ int xmlElement: @xmllocatable ref,
+ int location: @location_default ref
+);
+
+@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace;
+
+/*
+ * configuration files with key value pairs
+ */
+
+configs(
+ unique int id: @config
+);
+
+configNames(
+ unique int id: @configName,
+ int config: @config ref,
+ string name: string ref
+);
+
+configValues(
+ unique int id: @configValue,
+ int config: @config ref,
+ string value: string ref
+);
+
+configLocations(
+ int locatable: @configLocatable ref,
+ int location: @location_default ref
+);
+
+@configLocatable = @config | @configName | @configValue;
+
+ktComments(
+ unique int id: @ktcomment,
+ int kind: int ref,
+ string text : string ref
+)
+
+ktCommentSections(
+ unique int id: @ktcommentsection,
+ int comment: @ktcomment ref,
+ string content : string ref
+)
+
+ktCommentSectionNames(
+ unique int id: @ktcommentsection ref,
+ string name : string ref
+)
+
+ktCommentSectionSubjectNames(
+ unique int id: @ktcommentsection ref,
+ string subjectname : string ref
+)
+
+#keyset[id, owner]
+ktCommentOwners(
+ int id: @ktcomment ref,
+ int owner: @top ref
+)
+
+ktExtensionFunctions(
+ unique int id: @method ref,
+ int typeid: @type ref,
+ int kttypeid: @kt_type ref
+)
+
+ktProperties(
+ unique int id: @kt_property,
+ string nodeName: string ref
+)
+
+ktPropertyGetters(
+ unique int id: @kt_property ref,
+ int getter: @method ref
+)
+
+ktPropertySetters(
+ unique int id: @kt_property ref,
+ int setter: @method ref
+)
+
+ktPropertyBackingFields(
+ unique int id: @kt_property ref,
+ int backingField: @field ref
+)
+
+ktSyntheticBody(
+ unique int id: @callable ref,
+ int kind: int ref
+ // 1: ENUM_VALUES
+ // 2: ENUM_VALUEOF
+ // 3: ENUM_ENTRIES
+)
+
+ktLocalFunction(
+ unique int id: @method ref
+)
+
+ktInitializerAssignment(
+ unique int id: @assignexpr ref
+)
+
+ktPropertyDelegates(
+ unique int id: @kt_property ref,
+ unique int variableId: @variable ref
+)
+
+/**
+ * If `id` is a compiler generated element, then the kind indicates the
+ * reason that the compiler generated it.
+ * See `Element.compilerGeneratedReason()` for an explanation of what
+ * each `kind` means.
+ */
+compiler_generated(
+ unique int id: @element ref,
+ int kind: int ref
+)
+
+ktFunctionOriginalNames(
+ unique int id: @method ref,
+ string name: string ref
+)
+
+ktDataClasses(
+ unique int id: @classorinterface ref
+)
diff --git a/java/downgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/upgrade.properties b/java/downgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/upgrade.properties
new file mode 100644
index 000000000000..9ff059c0f813
--- /dev/null
+++ b/java/downgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/upgrade.properties
@@ -0,0 +1,3 @@
+description: Add overlayChangedFiles relation
+compatibility: full
+overlayChangedFiles.rel: delete
diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme
index 38d02c063878..1b8f5f4c747e 100644
--- a/java/ql/lib/config/semmlecode.dbscheme
+++ b/java/ql/lib/config/semmlecode.dbscheme
@@ -211,6 +211,10 @@ databaseMetadata(
string value : string ref
);
+overlayChangedFiles(
+ string path: string ref
+);
+
/*
* SMAP
*/
diff --git a/java/ql/lib/config/semmlecode.dbscheme.stats b/java/ql/lib/config/semmlecode.dbscheme.stats
index f75c92b68268..650c4649439d 100644
--- a/java/ql/lib/config/semmlecode.dbscheme.stats
+++ b/java/ql/lib/config/semmlecode.dbscheme.stats
@@ -4004,6 +4004,17 @@
+
+ overlayChangedFiles
+ 50
+
+
+ path
+ 50
+
+
+
+
smap_header
1
diff --git a/java/ql/lib/upgrades/38d02c063878000356a3e5db49d5a6a8f38efe24/old.dbscheme b/java/ql/lib/upgrades/38d02c063878000356a3e5db49d5a6a8f38efe24/old.dbscheme
new file mode 100644
index 000000000000..38d02c063878
--- /dev/null
+++ b/java/ql/lib/upgrades/38d02c063878000356a3e5db49d5a6a8f38efe24/old.dbscheme
@@ -0,0 +1,1232 @@
+/**
+ * An invocation of the compiler. Note that more than one file may be
+ * compiled per invocation. For example, this command compiles three
+ * source files:
+ *
+ * javac A.java B.java C.java
+ *
+ * The `id` simply identifies the invocation, while `cwd` is the working
+ * directory from which the compiler was invoked.
+ */
+compilations(
+ /**
+ * An invocation of the compiler. Note that more than one file may
+ * be compiled per invocation. For example, this command compiles
+ * three source files:
+ *
+ * javac A.java B.java C.java
+ */
+ unique int id : @compilation,
+ int kind: int ref,
+ string cwd : string ref,
+ string name : string ref
+);
+
+case @compilation.kind of
+ 1 = @javacompilation
+| 2 = @kotlincompilation
+;
+
+compilation_started(
+ int id : @compilation ref
+)
+
+compilation_info(
+ int id : @compilation ref,
+ string info_key: string ref,
+ string info_value: string ref
+)
+
+/**
+ * The arguments that were passed to the extractor for a compiler
+ * invocation. If `id` is for the compiler invocation
+ *
+ * javac A.java B.java C.java
+ *
+ * then typically there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | *path to extractor*
+ * 1 | `--javac-args`
+ * 2 | A.java
+ * 3 | B.java
+ * 4 | C.java
+ */
+#keyset[id, num]
+compilation_args(
+ int id : @compilation ref,
+ int num : int ref,
+ string arg : string ref
+);
+
+/**
+ * The expanded arguments that were passed to the extractor for a
+ * compiler invocation. This is similar to `compilation_args`, but
+ * for a `@@@someFile` argument, it includes the arguments from that
+ * file, rather than just taking the argument literally.
+ */
+#keyset[id, num]
+compilation_expanded_args(
+ int id : @compilation ref,
+ int num : int ref,
+ string arg : string ref
+);
+
+/**
+ * The source files that are compiled by a compiler invocation.
+ * If `id` is for the compiler invocation
+ *
+ * javac A.java B.java C.java
+ *
+ * then there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | A.java
+ * 1 | B.java
+ * 2 | C.java
+ */
+#keyset[id, num]
+compilation_compiling_files(
+ int id : @compilation ref,
+ int num : int ref,
+ int file : @file ref
+);
+
+/**
+ * For each file recorded in `compilation_compiling_files`,
+ * there will be a corresponding row in
+ * `compilation_compiling_files_completed` once extraction
+ * of that file is complete. The `result` will indicate the
+ * extraction result:
+ *
+ * 0: Successfully extracted
+ * 1: Errors were encountered, but extraction recovered
+ * 2: Errors were encountered, and extraction could not recover
+ */
+#keyset[id, num]
+compilation_compiling_files_completed(
+ int id : @compilation ref,
+ int num : int ref,
+ int result : int ref
+);
+
+/**
+ * The time taken by the extractor for a compiler invocation.
+ *
+ * For each file `num`, there will be rows for
+ *
+ * kind | seconds
+ * ---- | ---
+ * 1 | CPU seconds used by the extractor frontend
+ * 2 | Elapsed seconds during the extractor frontend
+ * 3 | CPU seconds used by the extractor backend
+ * 4 | Elapsed seconds during the extractor backend
+ */
+#keyset[id, num, kind]
+compilation_time(
+ int id : @compilation ref,
+ int num : int ref,
+ /* kind:
+ 1 = frontend_cpu_seconds
+ 2 = frontend_elapsed_seconds
+ 3 = extractor_cpu_seconds
+ 4 = extractor_elapsed_seconds
+ */
+ int kind : int ref,
+ float seconds : float ref
+);
+
+/**
+ * The `cpu_seconds` and `elapsed_seconds` are the CPU time and elapsed
+ * time (respectively) that the original compilation (not the extraction)
+ * took for compiler invocation `id`.
+ */
+compilation_compiler_times(
+ unique int id : @compilation ref,
+ float cpu_seconds : float ref,
+ float elapsed_seconds : float ref
+);
+
+/**
+ * If extraction was successful, then `cpu_seconds` and
+ * `elapsed_seconds` are the CPU time and elapsed time (respectively)
+ * that extraction took for compiler invocation `id`.
+ * The `result` will indicate the extraction result:
+ *
+ * 0: Successfully extracted
+ * 1: Errors were encountered, but extraction recovered
+ * 2: Errors were encountered, and extraction could not recover
+ */
+compilation_finished(
+ unique int id : @compilation ref,
+ float cpu_seconds : float ref,
+ float elapsed_seconds : float ref,
+ int result : int ref
+);
+
+diagnostics(
+ unique int id: @diagnostic,
+ string generated_by: string ref, // TODO: Sync this with the other languages?
+ 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
+);
+
+/**
+ * An error or warning generated by the extractor.
+ * The diagnostic message `diagnostic` was generated during compiler
+ * invocation `compilation`, and is the `file_number_diagnostic_number`th
+ * message generated while extracting the `file_number`th file of that
+ * invocation.
+ */
+#keyset[compilation, file_number, file_number_diagnostic_number]
+diagnostic_for(
+ unique int diagnostic : @diagnostic ref,
+ int compilation : @compilation ref,
+ int file_number : int ref,
+ int file_number_diagnostic_number : int ref
+);
+
+/*
+ * External artifacts
+ */
+
+externalData(
+ int id : @externalDataElement,
+ string path : string ref,
+ int column: int ref,
+ string value : string ref
+);
+
+sourceLocationPrefix(
+ string prefix : string ref
+);
+
+databaseMetadata(
+ string metadataKey : string ref,
+ string value : string ref
+);
+
+/*
+ * SMAP
+ */
+
+smap_header(
+ int outputFileId: @file ref,
+ string outputFilename: string ref,
+ string defaultStratum: string ref
+);
+
+smap_files(
+ int outputFileId: @file ref,
+ string stratum: string ref,
+ int inputFileNum: int ref,
+ string inputFileName: string ref,
+ int inputFileId: @file ref
+);
+
+smap_lines(
+ int outputFileId: @file ref,
+ string stratum: string ref,
+ int inputFileNum: int ref,
+ int inputStartLine: int ref,
+ int inputLineCount: int ref,
+ int outputStartLine: int ref,
+ int outputLineIncrement: int ref
+);
+
+/*
+ * Locations and files
+ */
+
+@location = @location_default ;
+
+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
+);
+
+hasLocation(
+ int locatableid: @locatable ref,
+ int id: @location ref
+);
+
+@sourceline = @locatable ;
+
+#keyset[element_id]
+numlines(
+ int element_id: @sourceline ref,
+ int num_lines: int ref,
+ int num_code: int ref,
+ int num_comment: int ref
+);
+
+files(
+ unique int id: @file,
+ string name: string ref
+);
+
+folders(
+ unique int id: @folder,
+ string name: string ref
+);
+
+@container = @folder | @file
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref
+);
+
+/*
+ * Java
+ */
+
+cupackage(
+ unique int id: @file ref,
+ int packageid: @package ref
+);
+
+#keyset[fileid,keyName]
+jarManifestMain(
+ int fileid: @file ref,
+ string keyName: string ref,
+ string value: string ref
+);
+
+#keyset[fileid,entryName,keyName]
+jarManifestEntries(
+ int fileid: @file ref,
+ string entryName: string ref,
+ string keyName: string ref,
+ string value: string ref
+);
+
+packages(
+ unique int id: @package,
+ string nodeName: string ref
+);
+
+primitives(
+ unique int id: @primitive,
+ string nodeName: string ref
+);
+
+modifiers(
+ unique int id: @modifier,
+ string nodeName: string ref
+);
+
+/**
+ * An errortype is used when the extractor is unable to extract a type
+ * correctly for some reason.
+ */
+error_type(
+ unique int id: @errortype
+);
+
+classes_or_interfaces(
+ unique int id: @classorinterface,
+ string nodeName: string ref,
+ int parentid: @package ref,
+ int sourceid: @classorinterface ref
+);
+
+file_class(
+ int id: @classorinterface ref
+);
+
+class_object(
+ unique int id: @classorinterface ref,
+ unique int instance: @field ref
+);
+
+type_companion_object(
+ unique int id: @classorinterface ref,
+ unique int instance: @field ref,
+ unique int companion_object: @classorinterface ref
+);
+
+kt_nullable_types(
+ unique int id: @kt_nullable_type,
+ int classid: @reftype ref
+)
+
+kt_notnull_types(
+ unique int id: @kt_notnull_type,
+ int classid: @reftype ref
+)
+
+kt_type_alias(
+ unique int id: @kt_type_alias,
+ string name: string ref,
+ int kttypeid: @kt_type ref
+)
+
+@kt_type = @kt_nullable_type | @kt_notnull_type
+
+isInterface(
+ unique int id: @classorinterface ref
+);
+
+isRecord(
+ unique int id: @classorinterface ref
+);
+
+fielddecls(
+ unique int id: @fielddecl,
+ int parentid: @reftype ref
+);
+
+#keyset[fieldId] #keyset[fieldDeclId,pos]
+fieldDeclaredIn(
+ int fieldId: @field ref,
+ int fieldDeclId: @fielddecl ref,
+ int pos: int ref
+);
+
+fields(
+ unique int id: @field,
+ string nodeName: string ref,
+ int typeid: @type ref,
+ int parentid: @reftype ref
+);
+
+fieldsKotlinType(
+ unique int id: @field ref,
+ int kttypeid: @kt_type ref
+);
+
+constrs(
+ unique int id: @constructor,
+ string nodeName: string ref,
+ string signature: string ref,
+ int typeid: @type ref,
+ int parentid: @reftype ref,
+ int sourceid: @constructor ref
+);
+
+constrsKotlinType(
+ unique int id: @constructor ref,
+ int kttypeid: @kt_type ref
+);
+
+methods(
+ unique int id: @method,
+ string nodeName: string ref,
+ string signature: string ref,
+ int typeid: @type ref,
+ int parentid: @reftype ref,
+ int sourceid: @method ref
+);
+
+methodsKotlinType(
+ unique int id: @method ref,
+ int kttypeid: @kt_type ref
+);
+
+#keyset[parentid,pos]
+params(
+ unique int id: @param,
+ int typeid: @type ref,
+ int pos: int ref,
+ int parentid: @callable ref,
+ int sourceid: @param ref
+);
+
+paramsKotlinType(
+ unique int id: @param ref,
+ int kttypeid: @kt_type ref
+);
+
+paramName(
+ unique int id: @param ref,
+ string nodeName: string ref
+);
+
+isVarargsParam(
+ int param: @param ref
+);
+
+exceptions(
+ unique int id: @exception,
+ int typeid: @type ref,
+ int parentid: @callable ref
+);
+
+isAnnotType(
+ int interfaceid: @classorinterface ref
+);
+
+isAnnotElem(
+ int methodid: @method ref
+);
+
+annotValue(
+ int parentid: @annotation ref,
+ int id2: @method ref,
+ unique int value: @expr ref
+);
+
+isEnumType(
+ int classid: @classorinterface ref
+);
+
+isEnumConst(
+ int fieldid: @field ref
+);
+
+#keyset[parentid,pos]
+typeVars(
+ unique int id: @typevariable,
+ string nodeName: string ref,
+ int pos: int ref,
+ int parentid: @classorinterfaceorcallable ref
+);
+
+wildcards(
+ unique int id: @wildcard,
+ string nodeName: string ref,
+ int kind: int ref
+);
+
+#keyset[parentid,pos]
+typeBounds(
+ unique int id: @typebound,
+ int typeid: @reftype ref,
+ int pos: int ref,
+ int parentid: @boundedtype ref
+);
+
+#keyset[parentid,pos]
+typeArgs(
+ int argumentid: @reftype ref,
+ int pos: int ref,
+ int parentid: @classorinterfaceorcallable ref
+);
+
+isParameterized(
+ int memberid: @member ref
+);
+
+isRaw(
+ int memberid: @member ref
+);
+
+#keyset[classid] #keyset[parent]
+isAnonymClass(
+ int classid: @classorinterface ref,
+ int parent: @classinstancexpr ref
+);
+
+#keyset[typeid] #keyset[parent]
+isLocalClassOrInterface(
+ int typeid: @classorinterface ref,
+ int parent: @localtypedeclstmt ref
+);
+
+isDefConstr(
+ int constructorid: @constructor ref
+);
+
+#keyset[exprId]
+lambdaKind(
+ int exprId: @lambdaexpr ref,
+ int bodyKind: int ref
+);
+
+isCanonicalConstr(
+ int constructorid: @constructor ref
+);
+
+arrays(
+ unique int id: @array,
+ string nodeName: string ref,
+ int elementtypeid: @type ref,
+ int dimension: int ref,
+ int componenttypeid: @type ref
+);
+
+enclInReftype(
+ unique int child: @reftype ref,
+ int parent: @reftype ref
+);
+
+extendsReftype(
+ int id1: @reftype ref,
+ int id2: @classorinterface ref
+);
+
+implInterface(
+ int id1: @classorarray ref,
+ int id2: @classorinterface ref
+);
+
+permits(
+ int id1: @classorinterface ref,
+ int id2: @classorinterface ref
+);
+
+hasModifier(
+ int id1: @modifiable ref,
+ int id2: @modifier ref
+);
+
+imports(
+ unique int id: @import,
+ int holder: @classorinterfaceorpackage ref,
+ string name: string ref,
+ int kind: int ref
+);
+
+#keyset[parent,idx]
+stmts(
+ unique int id: @stmt,
+ int kind: int ref,
+ int parent: @stmtparent ref,
+ int idx: int ref,
+ int bodydecl: @callable ref
+);
+
+@stmtparent = @callable | @stmt | @switchexpr | @whenexpr| @stmtexpr;
+
+case @stmt.kind of
+ 0 = @block
+| 1 = @ifstmt
+| 2 = @forstmt
+| 3 = @enhancedforstmt
+| 4 = @whilestmt
+| 5 = @dostmt
+| 6 = @trystmt
+| 7 = @switchstmt
+| 8 = @synchronizedstmt
+| 9 = @returnstmt
+| 10 = @throwstmt
+| 11 = @breakstmt
+| 12 = @continuestmt
+| 13 = @emptystmt
+| 14 = @exprstmt
+| 15 = @labeledstmt
+| 16 = @assertstmt
+| 17 = @localvariabledeclstmt
+| 18 = @localtypedeclstmt
+| 19 = @constructorinvocationstmt
+| 20 = @superconstructorinvocationstmt
+| 21 = @case
+| 22 = @catchclause
+| 23 = @yieldstmt
+| 24 = @errorstmt
+| 25 = @whenbranch
+;
+
+#keyset[parent,idx]
+exprs(
+ unique int id: @expr,
+ int kind: int ref,
+ int typeid: @type ref,
+ int parent: @exprparent ref,
+ int idx: int ref
+);
+
+exprsKotlinType(
+ unique int id: @expr ref,
+ int kttypeid: @kt_type ref
+);
+
+callableEnclosingExpr(
+ unique int id: @expr ref,
+ int callable_id: @callable ref
+);
+
+statementEnclosingExpr(
+ unique int id: @expr ref,
+ int statement_id: @stmt ref
+);
+
+isParenthesized(
+ unique int id: @expr ref,
+ int parentheses: int ref
+);
+
+case @expr.kind of
+ 1 = @arrayaccess
+| 2 = @arraycreationexpr
+| 3 = @arrayinit
+| 4 = @assignexpr
+| 5 = @assignaddexpr
+| 6 = @assignsubexpr
+| 7 = @assignmulexpr
+| 8 = @assigndivexpr
+| 9 = @assignremexpr
+| 10 = @assignandexpr
+| 11 = @assignorexpr
+| 12 = @assignxorexpr
+| 13 = @assignlshiftexpr
+| 14 = @assignrshiftexpr
+| 15 = @assignurshiftexpr
+| 16 = @booleanliteral
+| 17 = @integerliteral
+| 18 = @longliteral
+| 19 = @floatingpointliteral
+| 20 = @doubleliteral
+| 21 = @characterliteral
+| 22 = @stringliteral
+| 23 = @nullliteral
+| 24 = @mulexpr
+| 25 = @divexpr
+| 26 = @remexpr
+| 27 = @addexpr
+| 28 = @subexpr
+| 29 = @lshiftexpr
+| 30 = @rshiftexpr
+| 31 = @urshiftexpr
+| 32 = @andbitexpr
+| 33 = @orbitexpr
+| 34 = @xorbitexpr
+| 35 = @andlogicalexpr
+| 36 = @orlogicalexpr
+| 37 = @ltexpr
+| 38 = @gtexpr
+| 39 = @leexpr
+| 40 = @geexpr
+| 41 = @eqexpr
+| 42 = @neexpr
+| 43 = @postincexpr
+| 44 = @postdecexpr
+| 45 = @preincexpr
+| 46 = @predecexpr
+| 47 = @minusexpr
+| 48 = @plusexpr
+| 49 = @bitnotexpr
+| 50 = @lognotexpr
+| 51 = @castexpr
+| 52 = @newexpr
+| 53 = @conditionalexpr
+| 54 = @parexpr // deprecated
+| 55 = @instanceofexpr
+| 56 = @localvariabledeclexpr
+| 57 = @typeliteral
+| 58 = @thisaccess
+| 59 = @superaccess
+| 60 = @varaccess
+| 61 = @methodaccess
+| 62 = @unannotatedtypeaccess
+| 63 = @arraytypeaccess
+| 64 = @packageaccess
+| 65 = @wildcardtypeaccess
+| 66 = @declannotation
+| 67 = @uniontypeaccess
+| 68 = @lambdaexpr
+| 69 = @memberref
+| 70 = @annotatedtypeaccess
+| 71 = @typeannotation
+| 72 = @intersectiontypeaccess
+| 73 = @switchexpr
+| 74 = @errorexpr
+| 75 = @whenexpr
+| 76 = @getclassexpr
+| 77 = @safecastexpr
+| 78 = @implicitcastexpr
+| 79 = @implicitnotnullexpr
+| 80 = @implicitcoerciontounitexpr
+| 81 = @notinstanceofexpr
+| 82 = @stmtexpr
+| 83 = @stringtemplateexpr
+| 84 = @notnullexpr
+| 85 = @unsafecoerceexpr
+| 86 = @valueeqexpr
+| 87 = @valueneexpr
+| 88 = @propertyref
+| 89 = @recordpatternexpr
+;
+
+/** Holds if this `when` expression was written as an `if` expression. */
+when_if(unique int id: @whenexpr ref);
+
+/** Holds if this `when` branch was written as an `else` branch. */
+when_branch_else(unique int id: @whenbranch ref);
+
+@classinstancexpr = @newexpr | @lambdaexpr | @memberref | @propertyref
+
+@annotation = @declannotation | @typeannotation
+@typeaccess = @unannotatedtypeaccess | @annotatedtypeaccess
+
+@assignment = @assignexpr
+ | @assignop;
+
+@unaryassignment = @postincexpr
+ | @postdecexpr
+ | @preincexpr
+ | @predecexpr;
+
+@assignop = @assignaddexpr
+ | @assignsubexpr
+ | @assignmulexpr
+ | @assigndivexpr
+ | @assignremexpr
+ | @assignandexpr
+ | @assignorexpr
+ | @assignxorexpr
+ | @assignlshiftexpr
+ | @assignrshiftexpr
+ | @assignurshiftexpr;
+
+@literal = @booleanliteral
+ | @integerliteral
+ | @longliteral
+ | @floatingpointliteral
+ | @doubleliteral
+ | @characterliteral
+ | @stringliteral
+ | @nullliteral;
+
+@binaryexpr = @mulexpr
+ | @divexpr
+ | @remexpr
+ | @addexpr
+ | @subexpr
+ | @lshiftexpr
+ | @rshiftexpr
+ | @urshiftexpr
+ | @andbitexpr
+ | @orbitexpr
+ | @xorbitexpr
+ | @andlogicalexpr
+ | @orlogicalexpr
+ | @ltexpr
+ | @gtexpr
+ | @leexpr
+ | @geexpr
+ | @eqexpr
+ | @neexpr
+ | @valueeqexpr
+ | @valueneexpr;
+
+@unaryexpr = @postincexpr
+ | @postdecexpr
+ | @preincexpr
+ | @predecexpr
+ | @minusexpr
+ | @plusexpr
+ | @bitnotexpr
+ | @lognotexpr
+ | @notnullexpr;
+
+@caller = @classinstancexpr
+ | @methodaccess
+ | @constructorinvocationstmt
+ | @superconstructorinvocationstmt;
+
+callableBinding(
+ unique int callerid: @caller ref,
+ int callee: @callable ref
+);
+
+memberRefBinding(
+ unique int id: @expr ref,
+ int callable: @callable ref
+);
+
+propertyRefGetBinding(
+ unique int id: @expr ref,
+ int getter: @callable ref
+);
+
+propertyRefFieldBinding(
+ unique int id: @expr ref,
+ int field: @field ref
+);
+
+propertyRefSetBinding(
+ unique int id: @expr ref,
+ int setter: @callable ref
+);
+
+@exprparent = @stmt | @expr | @whenbranch | @callable | @field | @fielddecl | @classorinterface | @param | @localvar | @typevariable;
+
+variableBinding(
+ unique int expr: @varaccess ref,
+ int variable: @variable ref
+);
+
+@variable = @localscopevariable | @field;
+
+@localscopevariable = @localvar | @param;
+
+localvars(
+ unique int id: @localvar,
+ string nodeName: string ref,
+ int typeid: @type ref,
+ int parentid: @localvariabledeclexpr ref
+);
+
+localvarsKotlinType(
+ unique int id: @localvar ref,
+ int kttypeid: @kt_type ref
+);
+
+@namedexprorstmt = @breakstmt
+ | @continuestmt
+ | @labeledstmt
+ | @literal;
+
+namestrings(
+ string name: string ref,
+ string value: string ref,
+ unique int parent: @namedexprorstmt ref
+);
+
+/*
+ * Modules
+ */
+
+#keyset[name]
+modules(
+ unique int id: @module,
+ string name: string ref
+);
+
+isOpen(
+ int id: @module ref
+);
+
+#keyset[fileId]
+cumodule(
+ int fileId: @file ref,
+ int moduleId: @module ref
+);
+
+@directive = @requires
+ | @exports
+ | @opens
+ | @uses
+ | @provides
+
+#keyset[directive]
+directives(
+ int id: @module ref,
+ int directive: @directive ref
+);
+
+requires(
+ unique int id: @requires,
+ int target: @module ref
+);
+
+isTransitive(
+ int id: @requires ref
+);
+
+isStatic(
+ int id: @requires ref
+);
+
+exports(
+ unique int id: @exports,
+ int target: @package ref
+);
+
+exportsTo(
+ int id: @exports ref,
+ int target: @module ref
+);
+
+opens(
+ unique int id: @opens,
+ int target: @package ref
+);
+
+opensTo(
+ int id: @opens ref,
+ int target: @module ref
+);
+
+uses(
+ unique int id: @uses,
+ string serviceInterface: string ref
+);
+
+provides(
+ unique int id: @provides,
+ string serviceInterface: string ref
+);
+
+providesWith(
+ int id: @provides ref,
+ string serviceImpl: string ref
+);
+
+isNullDefaultCase(
+ int id: @case ref
+);
+
+/*
+ * Javadoc
+ */
+
+javadoc(
+ unique int id: @javadoc
+);
+
+isNormalComment(
+ int commentid : @javadoc ref
+);
+
+isEolComment(
+ int commentid : @javadoc ref
+);
+
+hasJavadoc(
+ int documentableid: @member ref,
+ int javadocid: @javadoc ref
+);
+
+#keyset[parentid,idx]
+javadocTag(
+ unique int id: @javadocTag,
+ string name: string ref,
+ int parentid: @javadocParent ref,
+ int idx: int ref
+);
+
+#keyset[parentid,idx]
+javadocText(
+ unique int id: @javadocText,
+ string text: string ref,
+ int parentid: @javadocParent ref,
+ int idx: int ref
+);
+
+@javadocParent = @javadoc | @javadocTag;
+@javadocElement = @javadocTag | @javadocText;
+
+@classorinterfaceorpackage = @classorinterface | @package;
+@classorinterfaceorcallable = @classorinterface | @callable;
+@boundedtype = @typevariable | @wildcard;
+@reftype = @classorinterface | @array | @boundedtype | @errortype;
+@classorarray = @classorinterface | @array;
+@type = @primitive | @reftype;
+@callable = @method | @constructor;
+
+/** A program element that has a name. */
+@element = @package | @modifier | @annotation | @errortype |
+ @locatableElement;
+
+@locatableElement = @file | @primitive | @classorinterface | @method | @constructor | @param | @exception | @field |
+ @boundedtype | @array | @localvar | @expr | @stmt | @import | @fielddecl | @kt_type | @kt_type_alias |
+ @kt_property;
+
+@modifiable = @member_modifiable| @param | @localvar | @typevariable;
+
+@member_modifiable = @classorinterface | @method | @constructor | @field | @kt_property;
+
+@member = @method | @constructor | @field | @reftype ;
+
+/** A program element that has a location. */
+@locatable = @typebound | @javadoc | @javadocTag | @javadocText | @xmllocatable | @ktcomment |
+ @locatableElement;
+
+@top = @element | @locatable | @folder;
+
+/*
+ * XML Files
+ */
+
+xmlEncoding(
+ unique int id: @file ref,
+ string encoding: string ref
+);
+
+xmlDTDs(
+ unique int id: @xmldtd,
+ string root: string ref,
+ string publicId: string ref,
+ string systemId: string ref,
+ int fileid: @file ref
+);
+
+xmlElements(
+ unique int id: @xmlelement,
+ string name: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int fileid: @file ref
+);
+
+xmlAttrs(
+ unique int id: @xmlattribute,
+ int elementid: @xmlelement ref,
+ string name: string ref,
+ string value: string ref,
+ int idx: int ref,
+ int fileid: @file ref
+);
+
+xmlNs(
+ int id: @xmlnamespace,
+ string prefixName: string ref,
+ string URI: string ref,
+ int fileid: @file ref
+);
+
+xmlHasNs(
+ int elementId: @xmlnamespaceable ref,
+ int nsId: @xmlnamespace ref,
+ int fileid: @file ref
+);
+
+xmlComments(
+ unique int id: @xmlcomment,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int fileid: @file ref
+);
+
+xmlChars(
+ unique int id: @xmlcharacters,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int isCDATA: int ref,
+ int fileid: @file ref
+);
+
+@xmlparent = @file | @xmlelement;
+@xmlnamespaceable = @xmlelement | @xmlattribute;
+
+xmllocations(
+ int xmlElement: @xmllocatable ref,
+ int location: @location_default ref
+);
+
+@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace;
+
+/*
+ * configuration files with key value pairs
+ */
+
+configs(
+ unique int id: @config
+);
+
+configNames(
+ unique int id: @configName,
+ int config: @config ref,
+ string name: string ref
+);
+
+configValues(
+ unique int id: @configValue,
+ int config: @config ref,
+ string value: string ref
+);
+
+configLocations(
+ int locatable: @configLocatable ref,
+ int location: @location_default ref
+);
+
+@configLocatable = @config | @configName | @configValue;
+
+ktComments(
+ unique int id: @ktcomment,
+ int kind: int ref,
+ string text : string ref
+)
+
+ktCommentSections(
+ unique int id: @ktcommentsection,
+ int comment: @ktcomment ref,
+ string content : string ref
+)
+
+ktCommentSectionNames(
+ unique int id: @ktcommentsection ref,
+ string name : string ref
+)
+
+ktCommentSectionSubjectNames(
+ unique int id: @ktcommentsection ref,
+ string subjectname : string ref
+)
+
+#keyset[id, owner]
+ktCommentOwners(
+ int id: @ktcomment ref,
+ int owner: @top ref
+)
+
+ktExtensionFunctions(
+ unique int id: @method ref,
+ int typeid: @type ref,
+ int kttypeid: @kt_type ref
+)
+
+ktProperties(
+ unique int id: @kt_property,
+ string nodeName: string ref
+)
+
+ktPropertyGetters(
+ unique int id: @kt_property ref,
+ int getter: @method ref
+)
+
+ktPropertySetters(
+ unique int id: @kt_property ref,
+ int setter: @method ref
+)
+
+ktPropertyBackingFields(
+ unique int id: @kt_property ref,
+ int backingField: @field ref
+)
+
+ktSyntheticBody(
+ unique int id: @callable ref,
+ int kind: int ref
+ // 1: ENUM_VALUES
+ // 2: ENUM_VALUEOF
+ // 3: ENUM_ENTRIES
+)
+
+ktLocalFunction(
+ unique int id: @method ref
+)
+
+ktInitializerAssignment(
+ unique int id: @assignexpr ref
+)
+
+ktPropertyDelegates(
+ unique int id: @kt_property ref,
+ unique int variableId: @variable ref
+)
+
+/**
+ * If `id` is a compiler generated element, then the kind indicates the
+ * reason that the compiler generated it.
+ * See `Element.compilerGeneratedReason()` for an explanation of what
+ * each `kind` means.
+ */
+compiler_generated(
+ unique int id: @element ref,
+ int kind: int ref
+)
+
+ktFunctionOriginalNames(
+ unique int id: @method ref,
+ string name: string ref
+)
+
+ktDataClasses(
+ unique int id: @classorinterface ref
+)
diff --git a/java/ql/lib/upgrades/38d02c063878000356a3e5db49d5a6a8f38efe24/semmlecode.dbscheme b/java/ql/lib/upgrades/38d02c063878000356a3e5db49d5a6a8f38efe24/semmlecode.dbscheme
new file mode 100644
index 000000000000..1b8f5f4c747e
--- /dev/null
+++ b/java/ql/lib/upgrades/38d02c063878000356a3e5db49d5a6a8f38efe24/semmlecode.dbscheme
@@ -0,0 +1,1236 @@
+/**
+ * An invocation of the compiler. Note that more than one file may be
+ * compiled per invocation. For example, this command compiles three
+ * source files:
+ *
+ * javac A.java B.java C.java
+ *
+ * The `id` simply identifies the invocation, while `cwd` is the working
+ * directory from which the compiler was invoked.
+ */
+compilations(
+ /**
+ * An invocation of the compiler. Note that more than one file may
+ * be compiled per invocation. For example, this command compiles
+ * three source files:
+ *
+ * javac A.java B.java C.java
+ */
+ unique int id : @compilation,
+ int kind: int ref,
+ string cwd : string ref,
+ string name : string ref
+);
+
+case @compilation.kind of
+ 1 = @javacompilation
+| 2 = @kotlincompilation
+;
+
+compilation_started(
+ int id : @compilation ref
+)
+
+compilation_info(
+ int id : @compilation ref,
+ string info_key: string ref,
+ string info_value: string ref
+)
+
+/**
+ * The arguments that were passed to the extractor for a compiler
+ * invocation. If `id` is for the compiler invocation
+ *
+ * javac A.java B.java C.java
+ *
+ * then typically there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | *path to extractor*
+ * 1 | `--javac-args`
+ * 2 | A.java
+ * 3 | B.java
+ * 4 | C.java
+ */
+#keyset[id, num]
+compilation_args(
+ int id : @compilation ref,
+ int num : int ref,
+ string arg : string ref
+);
+
+/**
+ * The expanded arguments that were passed to the extractor for a
+ * compiler invocation. This is similar to `compilation_args`, but
+ * for a `@@@someFile` argument, it includes the arguments from that
+ * file, rather than just taking the argument literally.
+ */
+#keyset[id, num]
+compilation_expanded_args(
+ int id : @compilation ref,
+ int num : int ref,
+ string arg : string ref
+);
+
+/**
+ * The source files that are compiled by a compiler invocation.
+ * If `id` is for the compiler invocation
+ *
+ * javac A.java B.java C.java
+ *
+ * then there will be rows for
+ *
+ * num | arg
+ * --- | ---
+ * 0 | A.java
+ * 1 | B.java
+ * 2 | C.java
+ */
+#keyset[id, num]
+compilation_compiling_files(
+ int id : @compilation ref,
+ int num : int ref,
+ int file : @file ref
+);
+
+/**
+ * For each file recorded in `compilation_compiling_files`,
+ * there will be a corresponding row in
+ * `compilation_compiling_files_completed` once extraction
+ * of that file is complete. The `result` will indicate the
+ * extraction result:
+ *
+ * 0: Successfully extracted
+ * 1: Errors were encountered, but extraction recovered
+ * 2: Errors were encountered, and extraction could not recover
+ */
+#keyset[id, num]
+compilation_compiling_files_completed(
+ int id : @compilation ref,
+ int num : int ref,
+ int result : int ref
+);
+
+/**
+ * The time taken by the extractor for a compiler invocation.
+ *
+ * For each file `num`, there will be rows for
+ *
+ * kind | seconds
+ * ---- | ---
+ * 1 | CPU seconds used by the extractor frontend
+ * 2 | Elapsed seconds during the extractor frontend
+ * 3 | CPU seconds used by the extractor backend
+ * 4 | Elapsed seconds during the extractor backend
+ */
+#keyset[id, num, kind]
+compilation_time(
+ int id : @compilation ref,
+ int num : int ref,
+ /* kind:
+ 1 = frontend_cpu_seconds
+ 2 = frontend_elapsed_seconds
+ 3 = extractor_cpu_seconds
+ 4 = extractor_elapsed_seconds
+ */
+ int kind : int ref,
+ float seconds : float ref
+);
+
+/**
+ * The `cpu_seconds` and `elapsed_seconds` are the CPU time and elapsed
+ * time (respectively) that the original compilation (not the extraction)
+ * took for compiler invocation `id`.
+ */
+compilation_compiler_times(
+ unique int id : @compilation ref,
+ float cpu_seconds : float ref,
+ float elapsed_seconds : float ref
+);
+
+/**
+ * If extraction was successful, then `cpu_seconds` and
+ * `elapsed_seconds` are the CPU time and elapsed time (respectively)
+ * that extraction took for compiler invocation `id`.
+ * The `result` will indicate the extraction result:
+ *
+ * 0: Successfully extracted
+ * 1: Errors were encountered, but extraction recovered
+ * 2: Errors were encountered, and extraction could not recover
+ */
+compilation_finished(
+ unique int id : @compilation ref,
+ float cpu_seconds : float ref,
+ float elapsed_seconds : float ref,
+ int result : int ref
+);
+
+diagnostics(
+ unique int id: @diagnostic,
+ string generated_by: string ref, // TODO: Sync this with the other languages?
+ 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
+);
+
+/**
+ * An error or warning generated by the extractor.
+ * The diagnostic message `diagnostic` was generated during compiler
+ * invocation `compilation`, and is the `file_number_diagnostic_number`th
+ * message generated while extracting the `file_number`th file of that
+ * invocation.
+ */
+#keyset[compilation, file_number, file_number_diagnostic_number]
+diagnostic_for(
+ unique int diagnostic : @diagnostic ref,
+ int compilation : @compilation ref,
+ int file_number : int ref,
+ int file_number_diagnostic_number : int ref
+);
+
+/*
+ * External artifacts
+ */
+
+externalData(
+ int id : @externalDataElement,
+ string path : string ref,
+ int column: int ref,
+ string value : string ref
+);
+
+sourceLocationPrefix(
+ string prefix : string ref
+);
+
+databaseMetadata(
+ string metadataKey : string ref,
+ string value : string ref
+);
+
+overlayChangedFiles(
+ string path: string ref
+);
+
+/*
+ * SMAP
+ */
+
+smap_header(
+ int outputFileId: @file ref,
+ string outputFilename: string ref,
+ string defaultStratum: string ref
+);
+
+smap_files(
+ int outputFileId: @file ref,
+ string stratum: string ref,
+ int inputFileNum: int ref,
+ string inputFileName: string ref,
+ int inputFileId: @file ref
+);
+
+smap_lines(
+ int outputFileId: @file ref,
+ string stratum: string ref,
+ int inputFileNum: int ref,
+ int inputStartLine: int ref,
+ int inputLineCount: int ref,
+ int outputStartLine: int ref,
+ int outputLineIncrement: int ref
+);
+
+/*
+ * Locations and files
+ */
+
+@location = @location_default ;
+
+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
+);
+
+hasLocation(
+ int locatableid: @locatable ref,
+ int id: @location ref
+);
+
+@sourceline = @locatable ;
+
+#keyset[element_id]
+numlines(
+ int element_id: @sourceline ref,
+ int num_lines: int ref,
+ int num_code: int ref,
+ int num_comment: int ref
+);
+
+files(
+ unique int id: @file,
+ string name: string ref
+);
+
+folders(
+ unique int id: @folder,
+ string name: string ref
+);
+
+@container = @folder | @file
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref
+);
+
+/*
+ * Java
+ */
+
+cupackage(
+ unique int id: @file ref,
+ int packageid: @package ref
+);
+
+#keyset[fileid,keyName]
+jarManifestMain(
+ int fileid: @file ref,
+ string keyName: string ref,
+ string value: string ref
+);
+
+#keyset[fileid,entryName,keyName]
+jarManifestEntries(
+ int fileid: @file ref,
+ string entryName: string ref,
+ string keyName: string ref,
+ string value: string ref
+);
+
+packages(
+ unique int id: @package,
+ string nodeName: string ref
+);
+
+primitives(
+ unique int id: @primitive,
+ string nodeName: string ref
+);
+
+modifiers(
+ unique int id: @modifier,
+ string nodeName: string ref
+);
+
+/**
+ * An errortype is used when the extractor is unable to extract a type
+ * correctly for some reason.
+ */
+error_type(
+ unique int id: @errortype
+);
+
+classes_or_interfaces(
+ unique int id: @classorinterface,
+ string nodeName: string ref,
+ int parentid: @package ref,
+ int sourceid: @classorinterface ref
+);
+
+file_class(
+ int id: @classorinterface ref
+);
+
+class_object(
+ unique int id: @classorinterface ref,
+ unique int instance: @field ref
+);
+
+type_companion_object(
+ unique int id: @classorinterface ref,
+ unique int instance: @field ref,
+ unique int companion_object: @classorinterface ref
+);
+
+kt_nullable_types(
+ unique int id: @kt_nullable_type,
+ int classid: @reftype ref
+)
+
+kt_notnull_types(
+ unique int id: @kt_notnull_type,
+ int classid: @reftype ref
+)
+
+kt_type_alias(
+ unique int id: @kt_type_alias,
+ string name: string ref,
+ int kttypeid: @kt_type ref
+)
+
+@kt_type = @kt_nullable_type | @kt_notnull_type
+
+isInterface(
+ unique int id: @classorinterface ref
+);
+
+isRecord(
+ unique int id: @classorinterface ref
+);
+
+fielddecls(
+ unique int id: @fielddecl,
+ int parentid: @reftype ref
+);
+
+#keyset[fieldId] #keyset[fieldDeclId,pos]
+fieldDeclaredIn(
+ int fieldId: @field ref,
+ int fieldDeclId: @fielddecl ref,
+ int pos: int ref
+);
+
+fields(
+ unique int id: @field,
+ string nodeName: string ref,
+ int typeid: @type ref,
+ int parentid: @reftype ref
+);
+
+fieldsKotlinType(
+ unique int id: @field ref,
+ int kttypeid: @kt_type ref
+);
+
+constrs(
+ unique int id: @constructor,
+ string nodeName: string ref,
+ string signature: string ref,
+ int typeid: @type ref,
+ int parentid: @reftype ref,
+ int sourceid: @constructor ref
+);
+
+constrsKotlinType(
+ unique int id: @constructor ref,
+ int kttypeid: @kt_type ref
+);
+
+methods(
+ unique int id: @method,
+ string nodeName: string ref,
+ string signature: string ref,
+ int typeid: @type ref,
+ int parentid: @reftype ref,
+ int sourceid: @method ref
+);
+
+methodsKotlinType(
+ unique int id: @method ref,
+ int kttypeid: @kt_type ref
+);
+
+#keyset[parentid,pos]
+params(
+ unique int id: @param,
+ int typeid: @type ref,
+ int pos: int ref,
+ int parentid: @callable ref,
+ int sourceid: @param ref
+);
+
+paramsKotlinType(
+ unique int id: @param ref,
+ int kttypeid: @kt_type ref
+);
+
+paramName(
+ unique int id: @param ref,
+ string nodeName: string ref
+);
+
+isVarargsParam(
+ int param: @param ref
+);
+
+exceptions(
+ unique int id: @exception,
+ int typeid: @type ref,
+ int parentid: @callable ref
+);
+
+isAnnotType(
+ int interfaceid: @classorinterface ref
+);
+
+isAnnotElem(
+ int methodid: @method ref
+);
+
+annotValue(
+ int parentid: @annotation ref,
+ int id2: @method ref,
+ unique int value: @expr ref
+);
+
+isEnumType(
+ int classid: @classorinterface ref
+);
+
+isEnumConst(
+ int fieldid: @field ref
+);
+
+#keyset[parentid,pos]
+typeVars(
+ unique int id: @typevariable,
+ string nodeName: string ref,
+ int pos: int ref,
+ int parentid: @classorinterfaceorcallable ref
+);
+
+wildcards(
+ unique int id: @wildcard,
+ string nodeName: string ref,
+ int kind: int ref
+);
+
+#keyset[parentid,pos]
+typeBounds(
+ unique int id: @typebound,
+ int typeid: @reftype ref,
+ int pos: int ref,
+ int parentid: @boundedtype ref
+);
+
+#keyset[parentid,pos]
+typeArgs(
+ int argumentid: @reftype ref,
+ int pos: int ref,
+ int parentid: @classorinterfaceorcallable ref
+);
+
+isParameterized(
+ int memberid: @member ref
+);
+
+isRaw(
+ int memberid: @member ref
+);
+
+#keyset[classid] #keyset[parent]
+isAnonymClass(
+ int classid: @classorinterface ref,
+ int parent: @classinstancexpr ref
+);
+
+#keyset[typeid] #keyset[parent]
+isLocalClassOrInterface(
+ int typeid: @classorinterface ref,
+ int parent: @localtypedeclstmt ref
+);
+
+isDefConstr(
+ int constructorid: @constructor ref
+);
+
+#keyset[exprId]
+lambdaKind(
+ int exprId: @lambdaexpr ref,
+ int bodyKind: int ref
+);
+
+isCanonicalConstr(
+ int constructorid: @constructor ref
+);
+
+arrays(
+ unique int id: @array,
+ string nodeName: string ref,
+ int elementtypeid: @type ref,
+ int dimension: int ref,
+ int componenttypeid: @type ref
+);
+
+enclInReftype(
+ unique int child: @reftype ref,
+ int parent: @reftype ref
+);
+
+extendsReftype(
+ int id1: @reftype ref,
+ int id2: @classorinterface ref
+);
+
+implInterface(
+ int id1: @classorarray ref,
+ int id2: @classorinterface ref
+);
+
+permits(
+ int id1: @classorinterface ref,
+ int id2: @classorinterface ref
+);
+
+hasModifier(
+ int id1: @modifiable ref,
+ int id2: @modifier ref
+);
+
+imports(
+ unique int id: @import,
+ int holder: @classorinterfaceorpackage ref,
+ string name: string ref,
+ int kind: int ref
+);
+
+#keyset[parent,idx]
+stmts(
+ unique int id: @stmt,
+ int kind: int ref,
+ int parent: @stmtparent ref,
+ int idx: int ref,
+ int bodydecl: @callable ref
+);
+
+@stmtparent = @callable | @stmt | @switchexpr | @whenexpr| @stmtexpr;
+
+case @stmt.kind of
+ 0 = @block
+| 1 = @ifstmt
+| 2 = @forstmt
+| 3 = @enhancedforstmt
+| 4 = @whilestmt
+| 5 = @dostmt
+| 6 = @trystmt
+| 7 = @switchstmt
+| 8 = @synchronizedstmt
+| 9 = @returnstmt
+| 10 = @throwstmt
+| 11 = @breakstmt
+| 12 = @continuestmt
+| 13 = @emptystmt
+| 14 = @exprstmt
+| 15 = @labeledstmt
+| 16 = @assertstmt
+| 17 = @localvariabledeclstmt
+| 18 = @localtypedeclstmt
+| 19 = @constructorinvocationstmt
+| 20 = @superconstructorinvocationstmt
+| 21 = @case
+| 22 = @catchclause
+| 23 = @yieldstmt
+| 24 = @errorstmt
+| 25 = @whenbranch
+;
+
+#keyset[parent,idx]
+exprs(
+ unique int id: @expr,
+ int kind: int ref,
+ int typeid: @type ref,
+ int parent: @exprparent ref,
+ int idx: int ref
+);
+
+exprsKotlinType(
+ unique int id: @expr ref,
+ int kttypeid: @kt_type ref
+);
+
+callableEnclosingExpr(
+ unique int id: @expr ref,
+ int callable_id: @callable ref
+);
+
+statementEnclosingExpr(
+ unique int id: @expr ref,
+ int statement_id: @stmt ref
+);
+
+isParenthesized(
+ unique int id: @expr ref,
+ int parentheses: int ref
+);
+
+case @expr.kind of
+ 1 = @arrayaccess
+| 2 = @arraycreationexpr
+| 3 = @arrayinit
+| 4 = @assignexpr
+| 5 = @assignaddexpr
+| 6 = @assignsubexpr
+| 7 = @assignmulexpr
+| 8 = @assigndivexpr
+| 9 = @assignremexpr
+| 10 = @assignandexpr
+| 11 = @assignorexpr
+| 12 = @assignxorexpr
+| 13 = @assignlshiftexpr
+| 14 = @assignrshiftexpr
+| 15 = @assignurshiftexpr
+| 16 = @booleanliteral
+| 17 = @integerliteral
+| 18 = @longliteral
+| 19 = @floatingpointliteral
+| 20 = @doubleliteral
+| 21 = @characterliteral
+| 22 = @stringliteral
+| 23 = @nullliteral
+| 24 = @mulexpr
+| 25 = @divexpr
+| 26 = @remexpr
+| 27 = @addexpr
+| 28 = @subexpr
+| 29 = @lshiftexpr
+| 30 = @rshiftexpr
+| 31 = @urshiftexpr
+| 32 = @andbitexpr
+| 33 = @orbitexpr
+| 34 = @xorbitexpr
+| 35 = @andlogicalexpr
+| 36 = @orlogicalexpr
+| 37 = @ltexpr
+| 38 = @gtexpr
+| 39 = @leexpr
+| 40 = @geexpr
+| 41 = @eqexpr
+| 42 = @neexpr
+| 43 = @postincexpr
+| 44 = @postdecexpr
+| 45 = @preincexpr
+| 46 = @predecexpr
+| 47 = @minusexpr
+| 48 = @plusexpr
+| 49 = @bitnotexpr
+| 50 = @lognotexpr
+| 51 = @castexpr
+| 52 = @newexpr
+| 53 = @conditionalexpr
+| 54 = @parexpr // deprecated
+| 55 = @instanceofexpr
+| 56 = @localvariabledeclexpr
+| 57 = @typeliteral
+| 58 = @thisaccess
+| 59 = @superaccess
+| 60 = @varaccess
+| 61 = @methodaccess
+| 62 = @unannotatedtypeaccess
+| 63 = @arraytypeaccess
+| 64 = @packageaccess
+| 65 = @wildcardtypeaccess
+| 66 = @declannotation
+| 67 = @uniontypeaccess
+| 68 = @lambdaexpr
+| 69 = @memberref
+| 70 = @annotatedtypeaccess
+| 71 = @typeannotation
+| 72 = @intersectiontypeaccess
+| 73 = @switchexpr
+| 74 = @errorexpr
+| 75 = @whenexpr
+| 76 = @getclassexpr
+| 77 = @safecastexpr
+| 78 = @implicitcastexpr
+| 79 = @implicitnotnullexpr
+| 80 = @implicitcoerciontounitexpr
+| 81 = @notinstanceofexpr
+| 82 = @stmtexpr
+| 83 = @stringtemplateexpr
+| 84 = @notnullexpr
+| 85 = @unsafecoerceexpr
+| 86 = @valueeqexpr
+| 87 = @valueneexpr
+| 88 = @propertyref
+| 89 = @recordpatternexpr
+;
+
+/** Holds if this `when` expression was written as an `if` expression. */
+when_if(unique int id: @whenexpr ref);
+
+/** Holds if this `when` branch was written as an `else` branch. */
+when_branch_else(unique int id: @whenbranch ref);
+
+@classinstancexpr = @newexpr | @lambdaexpr | @memberref | @propertyref
+
+@annotation = @declannotation | @typeannotation
+@typeaccess = @unannotatedtypeaccess | @annotatedtypeaccess
+
+@assignment = @assignexpr
+ | @assignop;
+
+@unaryassignment = @postincexpr
+ | @postdecexpr
+ | @preincexpr
+ | @predecexpr;
+
+@assignop = @assignaddexpr
+ | @assignsubexpr
+ | @assignmulexpr
+ | @assigndivexpr
+ | @assignremexpr
+ | @assignandexpr
+ | @assignorexpr
+ | @assignxorexpr
+ | @assignlshiftexpr
+ | @assignrshiftexpr
+ | @assignurshiftexpr;
+
+@literal = @booleanliteral
+ | @integerliteral
+ | @longliteral
+ | @floatingpointliteral
+ | @doubleliteral
+ | @characterliteral
+ | @stringliteral
+ | @nullliteral;
+
+@binaryexpr = @mulexpr
+ | @divexpr
+ | @remexpr
+ | @addexpr
+ | @subexpr
+ | @lshiftexpr
+ | @rshiftexpr
+ | @urshiftexpr
+ | @andbitexpr
+ | @orbitexpr
+ | @xorbitexpr
+ | @andlogicalexpr
+ | @orlogicalexpr
+ | @ltexpr
+ | @gtexpr
+ | @leexpr
+ | @geexpr
+ | @eqexpr
+ | @neexpr
+ | @valueeqexpr
+ | @valueneexpr;
+
+@unaryexpr = @postincexpr
+ | @postdecexpr
+ | @preincexpr
+ | @predecexpr
+ | @minusexpr
+ | @plusexpr
+ | @bitnotexpr
+ | @lognotexpr
+ | @notnullexpr;
+
+@caller = @classinstancexpr
+ | @methodaccess
+ | @constructorinvocationstmt
+ | @superconstructorinvocationstmt;
+
+callableBinding(
+ unique int callerid: @caller ref,
+ int callee: @callable ref
+);
+
+memberRefBinding(
+ unique int id: @expr ref,
+ int callable: @callable ref
+);
+
+propertyRefGetBinding(
+ unique int id: @expr ref,
+ int getter: @callable ref
+);
+
+propertyRefFieldBinding(
+ unique int id: @expr ref,
+ int field: @field ref
+);
+
+propertyRefSetBinding(
+ unique int id: @expr ref,
+ int setter: @callable ref
+);
+
+@exprparent = @stmt | @expr | @whenbranch | @callable | @field | @fielddecl | @classorinterface | @param | @localvar | @typevariable;
+
+variableBinding(
+ unique int expr: @varaccess ref,
+ int variable: @variable ref
+);
+
+@variable = @localscopevariable | @field;
+
+@localscopevariable = @localvar | @param;
+
+localvars(
+ unique int id: @localvar,
+ string nodeName: string ref,
+ int typeid: @type ref,
+ int parentid: @localvariabledeclexpr ref
+);
+
+localvarsKotlinType(
+ unique int id: @localvar ref,
+ int kttypeid: @kt_type ref
+);
+
+@namedexprorstmt = @breakstmt
+ | @continuestmt
+ | @labeledstmt
+ | @literal;
+
+namestrings(
+ string name: string ref,
+ string value: string ref,
+ unique int parent: @namedexprorstmt ref
+);
+
+/*
+ * Modules
+ */
+
+#keyset[name]
+modules(
+ unique int id: @module,
+ string name: string ref
+);
+
+isOpen(
+ int id: @module ref
+);
+
+#keyset[fileId]
+cumodule(
+ int fileId: @file ref,
+ int moduleId: @module ref
+);
+
+@directive = @requires
+ | @exports
+ | @opens
+ | @uses
+ | @provides
+
+#keyset[directive]
+directives(
+ int id: @module ref,
+ int directive: @directive ref
+);
+
+requires(
+ unique int id: @requires,
+ int target: @module ref
+);
+
+isTransitive(
+ int id: @requires ref
+);
+
+isStatic(
+ int id: @requires ref
+);
+
+exports(
+ unique int id: @exports,
+ int target: @package ref
+);
+
+exportsTo(
+ int id: @exports ref,
+ int target: @module ref
+);
+
+opens(
+ unique int id: @opens,
+ int target: @package ref
+);
+
+opensTo(
+ int id: @opens ref,
+ int target: @module ref
+);
+
+uses(
+ unique int id: @uses,
+ string serviceInterface: string ref
+);
+
+provides(
+ unique int id: @provides,
+ string serviceInterface: string ref
+);
+
+providesWith(
+ int id: @provides ref,
+ string serviceImpl: string ref
+);
+
+isNullDefaultCase(
+ int id: @case ref
+);
+
+/*
+ * Javadoc
+ */
+
+javadoc(
+ unique int id: @javadoc
+);
+
+isNormalComment(
+ int commentid : @javadoc ref
+);
+
+isEolComment(
+ int commentid : @javadoc ref
+);
+
+hasJavadoc(
+ int documentableid: @member ref,
+ int javadocid: @javadoc ref
+);
+
+#keyset[parentid,idx]
+javadocTag(
+ unique int id: @javadocTag,
+ string name: string ref,
+ int parentid: @javadocParent ref,
+ int idx: int ref
+);
+
+#keyset[parentid,idx]
+javadocText(
+ unique int id: @javadocText,
+ string text: string ref,
+ int parentid: @javadocParent ref,
+ int idx: int ref
+);
+
+@javadocParent = @javadoc | @javadocTag;
+@javadocElement = @javadocTag | @javadocText;
+
+@classorinterfaceorpackage = @classorinterface | @package;
+@classorinterfaceorcallable = @classorinterface | @callable;
+@boundedtype = @typevariable | @wildcard;
+@reftype = @classorinterface | @array | @boundedtype | @errortype;
+@classorarray = @classorinterface | @array;
+@type = @primitive | @reftype;
+@callable = @method | @constructor;
+
+/** A program element that has a name. */
+@element = @package | @modifier | @annotation | @errortype |
+ @locatableElement;
+
+@locatableElement = @file | @primitive | @classorinterface | @method | @constructor | @param | @exception | @field |
+ @boundedtype | @array | @localvar | @expr | @stmt | @import | @fielddecl | @kt_type | @kt_type_alias |
+ @kt_property;
+
+@modifiable = @member_modifiable| @param | @localvar | @typevariable;
+
+@member_modifiable = @classorinterface | @method | @constructor | @field | @kt_property;
+
+@member = @method | @constructor | @field | @reftype ;
+
+/** A program element that has a location. */
+@locatable = @typebound | @javadoc | @javadocTag | @javadocText | @xmllocatable | @ktcomment |
+ @locatableElement;
+
+@top = @element | @locatable | @folder;
+
+/*
+ * XML Files
+ */
+
+xmlEncoding(
+ unique int id: @file ref,
+ string encoding: string ref
+);
+
+xmlDTDs(
+ unique int id: @xmldtd,
+ string root: string ref,
+ string publicId: string ref,
+ string systemId: string ref,
+ int fileid: @file ref
+);
+
+xmlElements(
+ unique int id: @xmlelement,
+ string name: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int fileid: @file ref
+);
+
+xmlAttrs(
+ unique int id: @xmlattribute,
+ int elementid: @xmlelement ref,
+ string name: string ref,
+ string value: string ref,
+ int idx: int ref,
+ int fileid: @file ref
+);
+
+xmlNs(
+ int id: @xmlnamespace,
+ string prefixName: string ref,
+ string URI: string ref,
+ int fileid: @file ref
+);
+
+xmlHasNs(
+ int elementId: @xmlnamespaceable ref,
+ int nsId: @xmlnamespace ref,
+ int fileid: @file ref
+);
+
+xmlComments(
+ unique int id: @xmlcomment,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int fileid: @file ref
+);
+
+xmlChars(
+ unique int id: @xmlcharacters,
+ string text: string ref,
+ int parentid: @xmlparent ref,
+ int idx: int ref,
+ int isCDATA: int ref,
+ int fileid: @file ref
+);
+
+@xmlparent = @file | @xmlelement;
+@xmlnamespaceable = @xmlelement | @xmlattribute;
+
+xmllocations(
+ int xmlElement: @xmllocatable ref,
+ int location: @location_default ref
+);
+
+@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace;
+
+/*
+ * configuration files with key value pairs
+ */
+
+configs(
+ unique int id: @config
+);
+
+configNames(
+ unique int id: @configName,
+ int config: @config ref,
+ string name: string ref
+);
+
+configValues(
+ unique int id: @configValue,
+ int config: @config ref,
+ string value: string ref
+);
+
+configLocations(
+ int locatable: @configLocatable ref,
+ int location: @location_default ref
+);
+
+@configLocatable = @config | @configName | @configValue;
+
+ktComments(
+ unique int id: @ktcomment,
+ int kind: int ref,
+ string text : string ref
+)
+
+ktCommentSections(
+ unique int id: @ktcommentsection,
+ int comment: @ktcomment ref,
+ string content : string ref
+)
+
+ktCommentSectionNames(
+ unique int id: @ktcommentsection ref,
+ string name : string ref
+)
+
+ktCommentSectionSubjectNames(
+ unique int id: @ktcommentsection ref,
+ string subjectname : string ref
+)
+
+#keyset[id, owner]
+ktCommentOwners(
+ int id: @ktcomment ref,
+ int owner: @top ref
+)
+
+ktExtensionFunctions(
+ unique int id: @method ref,
+ int typeid: @type ref,
+ int kttypeid: @kt_type ref
+)
+
+ktProperties(
+ unique int id: @kt_property,
+ string nodeName: string ref
+)
+
+ktPropertyGetters(
+ unique int id: @kt_property ref,
+ int getter: @method ref
+)
+
+ktPropertySetters(
+ unique int id: @kt_property ref,
+ int setter: @method ref
+)
+
+ktPropertyBackingFields(
+ unique int id: @kt_property ref,
+ int backingField: @field ref
+)
+
+ktSyntheticBody(
+ unique int id: @callable ref,
+ int kind: int ref
+ // 1: ENUM_VALUES
+ // 2: ENUM_VALUEOF
+ // 3: ENUM_ENTRIES
+)
+
+ktLocalFunction(
+ unique int id: @method ref
+)
+
+ktInitializerAssignment(
+ unique int id: @assignexpr ref
+)
+
+ktPropertyDelegates(
+ unique int id: @kt_property ref,
+ unique int variableId: @variable ref
+)
+
+/**
+ * If `id` is a compiler generated element, then the kind indicates the
+ * reason that the compiler generated it.
+ * See `Element.compilerGeneratedReason()` for an explanation of what
+ * each `kind` means.
+ */
+compiler_generated(
+ unique int id: @element ref,
+ int kind: int ref
+)
+
+ktFunctionOriginalNames(
+ unique int id: @method ref,
+ string name: string ref
+)
+
+ktDataClasses(
+ unique int id: @classorinterface ref
+)
diff --git a/java/ql/lib/upgrades/38d02c063878000356a3e5db49d5a6a8f38efe24/upgrade.properties b/java/ql/lib/upgrades/38d02c063878000356a3e5db49d5a6a8f38efe24/upgrade.properties
new file mode 100644
index 000000000000..3199458aa6b3
--- /dev/null
+++ b/java/ql/lib/upgrades/38d02c063878000356a3e5db49d5a6a8f38efe24/upgrade.properties
@@ -0,0 +1,2 @@
+description: Add overlayChangedFiles relation
+compatibility: full
diff --git a/ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll b/ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll
index a83095629ab5..4eb2c86defd0 100644
--- a/ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll
+++ b/ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll
@@ -60,10 +60,6 @@ module QL {
)
}
- /** Holds if `file` was extracted as part of the overlay database. */
- overlay[local]
- private predicate discardFile(@file file) { isOverlay() and file = getNodeFile(_) }
-
/** Holds if `node` is in the `file` and is part of the overlay base database. */
overlay[local]
private predicate discardableAstNode(@file file, @ql_ast_node node) {
@@ -73,7 +69,9 @@ module QL {
/** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */
overlay[discard_entity]
private predicate discardAstNode(@ql_ast_node node) {
- exists(@file file | discardableAstNode(file, node) and discardFile(file))
+ exists(@file file, string path | files(file, path) |
+ discardableAstNode(file, node) and overlayChangedFiles(path)
+ )
}
/** A class representing `add_expr` nodes. */
@@ -1354,10 +1352,6 @@ module Dbscheme {
)
}
- /** Holds if `file` was extracted as part of the overlay database. */
- overlay[local]
- private predicate discardFile(@file file) { isOverlay() and file = getNodeFile(_) }
-
/** Holds if `node` is in the `file` and is part of the overlay base database. */
overlay[local]
private predicate discardableAstNode(@file file, @dbscheme_ast_node node) {
@@ -1367,7 +1361,9 @@ module Dbscheme {
/** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */
overlay[discard_entity]
private predicate discardAstNode(@dbscheme_ast_node node) {
- exists(@file file | discardableAstNode(file, node) and discardFile(file))
+ exists(@file file, string path | files(file, path) |
+ discardableAstNode(file, node) and overlayChangedFiles(path)
+ )
}
/** A class representing `annotName` tokens. */
@@ -1714,10 +1710,6 @@ module Blame {
)
}
- /** Holds if `file` was extracted as part of the overlay database. */
- overlay[local]
- private predicate discardFile(@file file) { isOverlay() and file = getNodeFile(_) }
-
/** Holds if `node` is in the `file` and is part of the overlay base database. */
overlay[local]
private predicate discardableAstNode(@file file, @blame_ast_node node) {
@@ -1727,7 +1719,9 @@ module Blame {
/** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */
overlay[discard_entity]
private predicate discardAstNode(@blame_ast_node node) {
- exists(@file file | discardableAstNode(file, node) and discardFile(file))
+ exists(@file file, string path | files(file, path) |
+ discardableAstNode(file, node) and overlayChangedFiles(path)
+ )
}
/** A class representing `blame_entry` nodes. */
@@ -1851,10 +1845,6 @@ module JSON {
)
}
- /** Holds if `file` was extracted as part of the overlay database. */
- overlay[local]
- private predicate discardFile(@file file) { isOverlay() and file = getNodeFile(_) }
-
/** Holds if `node` is in the `file` and is part of the overlay base database. */
overlay[local]
private predicate discardableAstNode(@file file, @json_ast_node node) {
@@ -1864,7 +1854,9 @@ module JSON {
/** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */
overlay[discard_entity]
private predicate discardAstNode(@json_ast_node node) {
- exists(@file file | discardableAstNode(file, node) and discardFile(file))
+ exists(@file file, string path | files(file, path) |
+ discardableAstNode(file, node) and overlayChangedFiles(path)
+ )
}
class UnderscoreValue extends @json_underscore_value, AstNode { }
diff --git a/ql/ql/src/ql.dbscheme b/ql/ql/src/ql.dbscheme
index d2a002084695..98faa40569ea 100644
--- a/ql/ql/src/ql.dbscheme
+++ b/ql/ql/src/ql.dbscheme
@@ -114,6 +114,10 @@ databaseMetadata(
string value: string ref
);
+overlayChangedFiles(
+ string path: string ref
+);
+
/*- QL dbscheme -*/
@ql_add_expr_left_type = @ql_add_expr | @ql_aggregate | @ql_call_or_unqual_agg_expr | @ql_comp_term | @ql_conjunction | @ql_disjunction | @ql_expr_annotation | @ql_if_term | @ql_implication | @ql_in_expr | @ql_instance_of | @ql_literal | @ql_mul_expr | @ql_negation | @ql_par_expr | @ql_prefix_cast | @ql_qualified_expr | @ql_quantified | @ql_range | @ql_set_literal | @ql_special_call | @ql_super_ref | @ql_unary_expr | @ql_variable
diff --git a/ql/ql/src/ql.dbscheme.stats b/ql/ql/src/ql.dbscheme.stats
index 8a5866812634..9d7f44eaa4b1 100644
--- a/ql/ql/src/ql.dbscheme.stats
+++ b/ql/ql/src/ql.dbscheme.stats
@@ -22472,5 +22472,16 @@
+
+ overlayChangedFiles
+ 50
+
+
+ path
+ 50
+
+
+
+
diff --git a/ruby/codeql-extractor.yml b/ruby/codeql-extractor.yml
index a832b0c10654..b1eee384133b 100644
--- a/ruby/codeql-extractor.yml
+++ b/ruby/codeql-extractor.yml
@@ -3,7 +3,7 @@ display_name: "Ruby"
version: 0.1.0
column_kind: "utf8"
legacy_qltest_extraction: true
-overlay_support_version: 20250108
+overlay_support_version: 20250626
build_modes:
- none
github_api_languages:
diff --git a/ruby/downgrades/eae6926f5000373d5eb1d82131e1ff6152b67b2c/old.dbscheme b/ruby/downgrades/eae6926f5000373d5eb1d82131e1ff6152b67b2c/old.dbscheme
new file mode 100644
index 000000000000..eae6926f5000
--- /dev/null
+++ b/ruby/downgrades/eae6926f5000373d5eb1d82131e1ff6152b67b2c/old.dbscheme
@@ -0,0 +1,1536 @@
+// CodeQL database schema for Ruby
+// Automatically generated from the tree-sitter grammar; do not edit
+
+/*- Files and folders -*/
+
+/**
+ * The location of an element.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_default(
+ unique int id: @location_default,
+ int file: @file ref,
+ int beginLine: int ref,
+ int beginColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+files(
+ unique int id: @file,
+ string name: string ref
+);
+
+folders(
+ unique int id: @folder,
+ string name: string ref
+);
+
+@container = @file | @folder
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref
+);
+
+/*- Empty location -*/
+
+empty_location(
+ int location: @location_default ref
+);
+
+/*- Source location prefix -*/
+
+/**
+ * The source location of the snapshot.
+ */
+sourceLocationPrefix(string prefix : string ref);
+
+/*- Diagnostic messages -*/
+
+diagnostics(
+ unique int id: @diagnostic,
+ int severity: int ref,
+ string error_tag: string ref,
+ string error_message: string ref,
+ string full_error_message: string ref,
+ int location: @location_default ref
+);
+
+/*- Diagnostic messages: severity -*/
+
+case @diagnostic.severity of
+ 10 = @diagnostic_debug
+| 20 = @diagnostic_info
+| 30 = @diagnostic_warning
+| 40 = @diagnostic_error
+;
+
+/*- YAML -*/
+
+#keyset[parent, idx]
+yaml (unique int id: @yaml_node,
+ int kind: int ref,
+ int parent: @yaml_node_parent ref,
+ int idx: int ref,
+ string tag: string ref,
+ string tostring: string ref);
+
+case @yaml_node.kind of
+ 0 = @yaml_scalar_node
+| 1 = @yaml_mapping_node
+| 2 = @yaml_sequence_node
+| 3 = @yaml_alias_node
+;
+
+@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node;
+
+@yaml_node_parent = @yaml_collection_node | @file;
+
+yaml_anchors (unique int node: @yaml_node ref,
+ string anchor: string ref);
+
+yaml_aliases (unique int alias: @yaml_alias_node ref,
+ string target: string ref);
+
+yaml_scalars (unique int scalar: @yaml_scalar_node ref,
+ int style: int ref,
+ string value: string ref);
+
+yaml_errors (unique int id: @yaml_error,
+ string message: string ref);
+
+yaml_locations(unique int locatable: @yaml_locatable ref,
+ int location: @location_default ref);
+
+@yaml_locatable = @yaml_node | @yaml_error;
+
+/*- Database metadata -*/
+databaseMetadata(
+ string metadataKey: string ref,
+ string value: string ref
+);
+
+overlayChangedFiles(
+ string path: string ref
+);
+
+/*- Ruby dbscheme -*/
+@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary
+
+@ruby_underscore_call_operator = @ruby_reserved_word
+
+@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_match_pattern | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_test_pattern | @ruby_unary | @ruby_underscore_arg | @ruby_yield
+
+@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable
+
+@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable
+
+@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable
+
+@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant
+
+@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic
+
+@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern
+
+@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric
+
+@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr
+
+@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield
+
+@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer
+
+@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier
+
+@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable
+
+ruby_alias_def(
+ unique int id: @ruby_alias,
+ int alias: @ruby_underscore_method_name ref,
+ int name: @ruby_underscore_method_name ref
+);
+
+#keyset[ruby_alternative_pattern, index]
+ruby_alternative_pattern_alternatives(
+ int ruby_alternative_pattern: @ruby_alternative_pattern ref,
+ int index: int ref,
+ unique int alternatives: @ruby_underscore_pattern_expr_basic ref
+);
+
+ruby_alternative_pattern_def(
+ unique int id: @ruby_alternative_pattern
+);
+
+@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression
+
+#keyset[ruby_argument_list, index]
+ruby_argument_list_child(
+ int ruby_argument_list: @ruby_argument_list ref,
+ int index: int ref,
+ unique int child: @ruby_argument_list_child_type ref
+);
+
+ruby_argument_list_def(
+ unique int id: @ruby_argument_list
+);
+
+@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression
+
+#keyset[ruby_array, index]
+ruby_array_child(
+ int ruby_array: @ruby_array ref,
+ int index: int ref,
+ unique int child: @ruby_array_child_type ref
+);
+
+ruby_array_def(
+ unique int id: @ruby_array
+);
+
+ruby_array_pattern_class(
+ unique int ruby_array_pattern: @ruby_array_pattern ref,
+ unique int class: @ruby_underscore_pattern_constant ref
+);
+
+@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr
+
+#keyset[ruby_array_pattern, index]
+ruby_array_pattern_child(
+ int ruby_array_pattern: @ruby_array_pattern ref,
+ int index: int ref,
+ unique int child: @ruby_array_pattern_child_type ref
+);
+
+ruby_array_pattern_def(
+ unique int id: @ruby_array_pattern
+);
+
+ruby_as_pattern_def(
+ unique int id: @ruby_as_pattern,
+ int name: @ruby_token_identifier ref,
+ int value: @ruby_underscore_pattern_expr ref
+);
+
+@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs
+
+@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression
+
+ruby_assignment_def(
+ unique int id: @ruby_assignment,
+ int left: @ruby_assignment_left_type ref,
+ int right: @ruby_assignment_right_type ref
+);
+
+@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_bare_string, index]
+ruby_bare_string_child(
+ int ruby_bare_string: @ruby_bare_string ref,
+ int index: int ref,
+ unique int child: @ruby_bare_string_child_type ref
+);
+
+ruby_bare_string_def(
+ unique int id: @ruby_bare_string
+);
+
+@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_bare_symbol, index]
+ruby_bare_symbol_child(
+ int ruby_bare_symbol: @ruby_bare_symbol ref,
+ int index: int ref,
+ unique int child: @ruby_bare_symbol_child_type ref
+);
+
+ruby_bare_symbol_def(
+ unique int id: @ruby_bare_symbol
+);
+
+@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_begin, index]
+ruby_begin_child(
+ int ruby_begin: @ruby_begin ref,
+ int index: int ref,
+ unique int child: @ruby_begin_child_type ref
+);
+
+ruby_begin_def(
+ unique int id: @ruby_begin
+);
+
+@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_begin_block, index]
+ruby_begin_block_child(
+ int ruby_begin_block: @ruby_begin_block ref,
+ int index: int ref,
+ unique int child: @ruby_begin_block_child_type ref
+);
+
+ruby_begin_block_def(
+ unique int id: @ruby_begin_block
+);
+
+@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric
+
+case @ruby_binary.operator of
+ 0 = @ruby_binary_bangequal
+| 1 = @ruby_binary_bangtilde
+| 2 = @ruby_binary_percent
+| 3 = @ruby_binary_ampersand
+| 4 = @ruby_binary_ampersandampersand
+| 5 = @ruby_binary_star
+| 6 = @ruby_binary_starstar
+| 7 = @ruby_binary_plus
+| 8 = @ruby_binary_minus
+| 9 = @ruby_binary_slash
+| 10 = @ruby_binary_langle
+| 11 = @ruby_binary_langlelangle
+| 12 = @ruby_binary_langleequal
+| 13 = @ruby_binary_langleequalrangle
+| 14 = @ruby_binary_equalequal
+| 15 = @ruby_binary_equalequalequal
+| 16 = @ruby_binary_equaltilde
+| 17 = @ruby_binary_rangle
+| 18 = @ruby_binary_rangleequal
+| 19 = @ruby_binary_ranglerangle
+| 20 = @ruby_binary_caret
+| 21 = @ruby_binary_and
+| 22 = @ruby_binary_or
+| 23 = @ruby_binary_pipe
+| 24 = @ruby_binary_pipepipe
+;
+
+
+ruby_binary_def(
+ unique int id: @ruby_binary,
+ int left: @ruby_binary_left_type ref,
+ int operator: int ref,
+ int right: @ruby_underscore_expression ref
+);
+
+ruby_block_body(
+ unique int ruby_block: @ruby_block ref,
+ unique int body: @ruby_block_body ref
+);
+
+ruby_block_parameters(
+ unique int ruby_block: @ruby_block ref,
+ unique int parameters: @ruby_block_parameters ref
+);
+
+ruby_block_def(
+ unique int id: @ruby_block
+);
+
+ruby_block_argument_child(
+ unique int ruby_block_argument: @ruby_block_argument ref,
+ unique int child: @ruby_underscore_arg ref
+);
+
+ruby_block_argument_def(
+ unique int id: @ruby_block_argument
+);
+
+@ruby_block_body_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_block_body, index]
+ruby_block_body_child(
+ int ruby_block_body: @ruby_block_body ref,
+ int index: int ref,
+ unique int child: @ruby_block_body_child_type ref
+);
+
+ruby_block_body_def(
+ unique int id: @ruby_block_body
+);
+
+ruby_block_parameter_name(
+ unique int ruby_block_parameter: @ruby_block_parameter ref,
+ unique int name: @ruby_token_identifier ref
+);
+
+ruby_block_parameter_def(
+ unique int id: @ruby_block_parameter
+);
+
+#keyset[ruby_block_parameters, index]
+ruby_block_parameters_locals(
+ int ruby_block_parameters: @ruby_block_parameters ref,
+ int index: int ref,
+ unique int locals: @ruby_token_identifier ref
+);
+
+@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier
+
+#keyset[ruby_block_parameters, index]
+ruby_block_parameters_child(
+ int ruby_block_parameters: @ruby_block_parameters ref,
+ int index: int ref,
+ unique int child: @ruby_block_parameters_child_type ref
+);
+
+ruby_block_parameters_def(
+ unique int id: @ruby_block_parameters
+);
+
+@ruby_body_statement_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_body_statement, index]
+ruby_body_statement_child(
+ int ruby_body_statement: @ruby_body_statement ref,
+ int index: int ref,
+ unique int child: @ruby_body_statement_child_type ref
+);
+
+ruby_body_statement_def(
+ unique int id: @ruby_body_statement
+);
+
+ruby_break_child(
+ unique int ruby_break: @ruby_break ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_break_def(
+ unique int id: @ruby_break
+);
+
+ruby_call_arguments(
+ unique int ruby_call: @ruby_call ref,
+ unique int arguments: @ruby_argument_list ref
+);
+
+@ruby_call_block_type = @ruby_block | @ruby_do_block
+
+ruby_call_block(
+ unique int ruby_call: @ruby_call ref,
+ unique int block: @ruby_call_block_type ref
+);
+
+@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable
+
+ruby_call_method(
+ unique int ruby_call: @ruby_call ref,
+ unique int method: @ruby_call_method_type ref
+);
+
+ruby_call_operator(
+ unique int ruby_call: @ruby_call ref,
+ unique int operator: @ruby_underscore_call_operator ref
+);
+
+ruby_call_receiver(
+ unique int ruby_call: @ruby_call ref,
+ unique int receiver: @ruby_underscore_primary ref
+);
+
+ruby_call_def(
+ unique int id: @ruby_call
+);
+
+ruby_case_value(
+ unique int ruby_case__: @ruby_case__ ref,
+ unique int value: @ruby_underscore_statement ref
+);
+
+@ruby_case_child_type = @ruby_else | @ruby_when
+
+#keyset[ruby_case__, index]
+ruby_case_child(
+ int ruby_case__: @ruby_case__ ref,
+ int index: int ref,
+ unique int child: @ruby_case_child_type ref
+);
+
+ruby_case_def(
+ unique int id: @ruby_case__
+);
+
+#keyset[ruby_case_match, index]
+ruby_case_match_clauses(
+ int ruby_case_match: @ruby_case_match ref,
+ int index: int ref,
+ unique int clauses: @ruby_in_clause ref
+);
+
+ruby_case_match_else(
+ unique int ruby_case_match: @ruby_case_match ref,
+ unique int else: @ruby_else ref
+);
+
+ruby_case_match_def(
+ unique int id: @ruby_case_match,
+ int value: @ruby_underscore_statement ref
+);
+
+#keyset[ruby_chained_string, index]
+ruby_chained_string_child(
+ int ruby_chained_string: @ruby_chained_string ref,
+ int index: int ref,
+ unique int child: @ruby_string__ ref
+);
+
+ruby_chained_string_def(
+ unique int id: @ruby_chained_string
+);
+
+ruby_class_body(
+ unique int ruby_class: @ruby_class ref,
+ unique int body: @ruby_body_statement ref
+);
+
+@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant
+
+ruby_class_superclass(
+ unique int ruby_class: @ruby_class ref,
+ unique int superclass: @ruby_superclass ref
+);
+
+ruby_class_def(
+ unique int id: @ruby_class,
+ int name: @ruby_class_name_type ref
+);
+
+@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer
+
+ruby_complex_def(
+ unique int id: @ruby_complex,
+ int child: @ruby_complex_child_type ref
+);
+
+ruby_conditional_def(
+ unique int id: @ruby_conditional,
+ int alternative: @ruby_underscore_arg ref,
+ int condition: @ruby_underscore_arg ref,
+ int consequence: @ruby_underscore_arg ref
+);
+
+@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_delimited_symbol, index]
+ruby_delimited_symbol_child(
+ int ruby_delimited_symbol: @ruby_delimited_symbol ref,
+ int index: int ref,
+ unique int child: @ruby_delimited_symbol_child_type ref
+);
+
+ruby_delimited_symbol_def(
+ unique int id: @ruby_delimited_symbol
+);
+
+@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs
+
+#keyset[ruby_destructured_left_assignment, index]
+ruby_destructured_left_assignment_child(
+ int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref,
+ int index: int ref,
+ unique int child: @ruby_destructured_left_assignment_child_type ref
+);
+
+ruby_destructured_left_assignment_def(
+ unique int id: @ruby_destructured_left_assignment
+);
+
+@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier
+
+#keyset[ruby_destructured_parameter, index]
+ruby_destructured_parameter_child(
+ int ruby_destructured_parameter: @ruby_destructured_parameter ref,
+ int index: int ref,
+ unique int child: @ruby_destructured_parameter_child_type ref
+);
+
+ruby_destructured_parameter_def(
+ unique int id: @ruby_destructured_parameter
+);
+
+@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_do, index]
+ruby_do_child(
+ int ruby_do: @ruby_do ref,
+ int index: int ref,
+ unique int child: @ruby_do_child_type ref
+);
+
+ruby_do_def(
+ unique int id: @ruby_do
+);
+
+ruby_do_block_body(
+ unique int ruby_do_block: @ruby_do_block ref,
+ unique int body: @ruby_body_statement ref
+);
+
+ruby_do_block_parameters(
+ unique int ruby_do_block: @ruby_do_block ref,
+ unique int parameters: @ruby_block_parameters ref
+);
+
+ruby_do_block_def(
+ unique int id: @ruby_do_block
+);
+
+@ruby_element_reference_block_type = @ruby_block | @ruby_do_block
+
+ruby_element_reference_block(
+ unique int ruby_element_reference: @ruby_element_reference ref,
+ unique int block: @ruby_element_reference_block_type ref
+);
+
+@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression
+
+#keyset[ruby_element_reference, index]
+ruby_element_reference_child(
+ int ruby_element_reference: @ruby_element_reference ref,
+ int index: int ref,
+ unique int child: @ruby_element_reference_child_type ref
+);
+
+ruby_element_reference_def(
+ unique int id: @ruby_element_reference,
+ int object: @ruby_underscore_primary ref
+);
+
+@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_else, index]
+ruby_else_child(
+ int ruby_else: @ruby_else ref,
+ int index: int ref,
+ unique int child: @ruby_else_child_type ref
+);
+
+ruby_else_def(
+ unique int id: @ruby_else
+);
+
+@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif
+
+ruby_elsif_alternative(
+ unique int ruby_elsif: @ruby_elsif ref,
+ unique int alternative: @ruby_elsif_alternative_type ref
+);
+
+ruby_elsif_consequence(
+ unique int ruby_elsif: @ruby_elsif ref,
+ unique int consequence: @ruby_then ref
+);
+
+ruby_elsif_def(
+ unique int id: @ruby_elsif,
+ int condition: @ruby_underscore_statement ref
+);
+
+@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_end_block, index]
+ruby_end_block_child(
+ int ruby_end_block: @ruby_end_block ref,
+ int index: int ref,
+ unique int child: @ruby_end_block_child_type ref
+);
+
+ruby_end_block_def(
+ unique int id: @ruby_end_block
+);
+
+@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_ensure, index]
+ruby_ensure_child(
+ int ruby_ensure: @ruby_ensure ref,
+ int index: int ref,
+ unique int child: @ruby_ensure_child_type ref
+);
+
+ruby_ensure_def(
+ unique int id: @ruby_ensure
+);
+
+ruby_exception_variable_def(
+ unique int id: @ruby_exception_variable,
+ int child: @ruby_underscore_lhs ref
+);
+
+@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg
+
+#keyset[ruby_exceptions, index]
+ruby_exceptions_child(
+ int ruby_exceptions: @ruby_exceptions ref,
+ int index: int ref,
+ unique int child: @ruby_exceptions_child_type ref
+);
+
+ruby_exceptions_def(
+ unique int id: @ruby_exceptions
+);
+
+ruby_expression_reference_pattern_def(
+ unique int id: @ruby_expression_reference_pattern,
+ int value: @ruby_underscore_expression ref
+);
+
+ruby_find_pattern_class(
+ unique int ruby_find_pattern: @ruby_find_pattern ref,
+ unique int class: @ruby_underscore_pattern_constant ref
+);
+
+@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr
+
+#keyset[ruby_find_pattern, index]
+ruby_find_pattern_child(
+ int ruby_find_pattern: @ruby_find_pattern ref,
+ int index: int ref,
+ unique int child: @ruby_find_pattern_child_type ref
+);
+
+ruby_find_pattern_def(
+ unique int id: @ruby_find_pattern
+);
+
+@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs
+
+ruby_for_def(
+ unique int id: @ruby_for,
+ int body: @ruby_do ref,
+ int pattern: @ruby_for_pattern_type ref,
+ int value: @ruby_in ref
+);
+
+@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair
+
+#keyset[ruby_hash, index]
+ruby_hash_child(
+ int ruby_hash: @ruby_hash ref,
+ int index: int ref,
+ unique int child: @ruby_hash_child_type ref
+);
+
+ruby_hash_def(
+ unique int id: @ruby_hash
+);
+
+ruby_hash_pattern_class(
+ unique int ruby_hash_pattern: @ruby_hash_pattern ref,
+ unique int class: @ruby_underscore_pattern_constant ref
+);
+
+@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil
+
+#keyset[ruby_hash_pattern, index]
+ruby_hash_pattern_child(
+ int ruby_hash_pattern: @ruby_hash_pattern ref,
+ int index: int ref,
+ unique int child: @ruby_hash_pattern_child_type ref
+);
+
+ruby_hash_pattern_def(
+ unique int id: @ruby_hash_pattern
+);
+
+ruby_hash_splat_argument_child(
+ unique int ruby_hash_splat_argument: @ruby_hash_splat_argument ref,
+ unique int child: @ruby_underscore_arg ref
+);
+
+ruby_hash_splat_argument_def(
+ unique int id: @ruby_hash_splat_argument
+);
+
+ruby_hash_splat_parameter_name(
+ unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref,
+ unique int name: @ruby_token_identifier ref
+);
+
+ruby_hash_splat_parameter_def(
+ unique int id: @ruby_hash_splat_parameter
+);
+
+@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end
+
+#keyset[ruby_heredoc_body, index]
+ruby_heredoc_body_child(
+ int ruby_heredoc_body: @ruby_heredoc_body ref,
+ int index: int ref,
+ unique int child: @ruby_heredoc_body_child_type ref
+);
+
+ruby_heredoc_body_def(
+ unique int id: @ruby_heredoc_body
+);
+
+@ruby_if_alternative_type = @ruby_else | @ruby_elsif
+
+ruby_if_alternative(
+ unique int ruby_if: @ruby_if ref,
+ unique int alternative: @ruby_if_alternative_type ref
+);
+
+ruby_if_consequence(
+ unique int ruby_if: @ruby_if ref,
+ unique int consequence: @ruby_then ref
+);
+
+ruby_if_def(
+ unique int id: @ruby_if,
+ int condition: @ruby_underscore_statement ref
+);
+
+ruby_if_guard_def(
+ unique int id: @ruby_if_guard,
+ int condition: @ruby_underscore_expression ref
+);
+
+ruby_if_modifier_def(
+ unique int id: @ruby_if_modifier,
+ int body: @ruby_underscore_statement ref,
+ int condition: @ruby_underscore_expression ref
+);
+
+ruby_in_def(
+ unique int id: @ruby_in,
+ int child: @ruby_underscore_arg ref
+);
+
+ruby_in_clause_body(
+ unique int ruby_in_clause: @ruby_in_clause ref,
+ unique int body: @ruby_then ref
+);
+
+@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard
+
+ruby_in_clause_guard(
+ unique int ruby_in_clause: @ruby_in_clause ref,
+ unique int guard: @ruby_in_clause_guard_type ref
+);
+
+ruby_in_clause_def(
+ unique int id: @ruby_in_clause,
+ int pattern: @ruby_underscore_pattern_top_expr_body ref
+);
+
+@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_nonlocal_variable | @ruby_underscore_statement
+
+#keyset[ruby_interpolation, index]
+ruby_interpolation_child(
+ int ruby_interpolation: @ruby_interpolation ref,
+ int index: int ref,
+ unique int child: @ruby_interpolation_child_type ref
+);
+
+ruby_interpolation_def(
+ unique int id: @ruby_interpolation
+);
+
+ruby_keyword_parameter_value(
+ unique int ruby_keyword_parameter: @ruby_keyword_parameter ref,
+ unique int value: @ruby_underscore_arg ref
+);
+
+ruby_keyword_parameter_def(
+ unique int id: @ruby_keyword_parameter,
+ int name: @ruby_token_identifier ref
+);
+
+@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol
+
+ruby_keyword_pattern_value(
+ unique int ruby_keyword_pattern: @ruby_keyword_pattern ref,
+ unique int value: @ruby_underscore_pattern_expr ref
+);
+
+ruby_keyword_pattern_def(
+ unique int id: @ruby_keyword_pattern,
+ int key__: @ruby_keyword_pattern_key_type ref
+);
+
+@ruby_lambda_body_type = @ruby_block | @ruby_do_block
+
+ruby_lambda_parameters(
+ unique int ruby_lambda: @ruby_lambda ref,
+ unique int parameters: @ruby_lambda_parameters ref
+);
+
+ruby_lambda_def(
+ unique int id: @ruby_lambda,
+ int body: @ruby_lambda_body_type ref
+);
+
+@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier
+
+#keyset[ruby_lambda_parameters, index]
+ruby_lambda_parameters_child(
+ int ruby_lambda_parameters: @ruby_lambda_parameters ref,
+ int index: int ref,
+ unique int child: @ruby_lambda_parameters_child_type ref
+);
+
+ruby_lambda_parameters_def(
+ unique int id: @ruby_lambda_parameters
+);
+
+@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs
+
+#keyset[ruby_left_assignment_list, index]
+ruby_left_assignment_list_child(
+ int ruby_left_assignment_list: @ruby_left_assignment_list ref,
+ int index: int ref,
+ unique int child: @ruby_left_assignment_list_child_type ref
+);
+
+ruby_left_assignment_list_def(
+ unique int id: @ruby_left_assignment_list
+);
+
+ruby_match_pattern_def(
+ unique int id: @ruby_match_pattern,
+ int pattern: @ruby_underscore_pattern_top_expr_body ref,
+ int value: @ruby_underscore_arg ref
+);
+
+@ruby_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg
+
+ruby_method_body(
+ unique int ruby_method: @ruby_method ref,
+ unique int body: @ruby_method_body_type ref
+);
+
+ruby_method_parameters(
+ unique int ruby_method: @ruby_method ref,
+ unique int parameters: @ruby_method_parameters ref
+);
+
+ruby_method_def(
+ unique int id: @ruby_method,
+ int name: @ruby_underscore_method_name ref
+);
+
+@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier
+
+#keyset[ruby_method_parameters, index]
+ruby_method_parameters_child(
+ int ruby_method_parameters: @ruby_method_parameters ref,
+ int index: int ref,
+ unique int child: @ruby_method_parameters_child_type ref
+);
+
+ruby_method_parameters_def(
+ unique int id: @ruby_method_parameters
+);
+
+ruby_module_body(
+ unique int ruby_module: @ruby_module ref,
+ unique int body: @ruby_body_statement ref
+);
+
+@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant
+
+ruby_module_def(
+ unique int id: @ruby_module,
+ int name: @ruby_module_name_type ref
+);
+
+ruby_next_child(
+ unique int ruby_next: @ruby_next ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_next_def(
+ unique int id: @ruby_next
+);
+
+case @ruby_operator_assignment.operator of
+ 0 = @ruby_operator_assignment_percentequal
+| 1 = @ruby_operator_assignment_ampersandampersandequal
+| 2 = @ruby_operator_assignment_ampersandequal
+| 3 = @ruby_operator_assignment_starstarequal
+| 4 = @ruby_operator_assignment_starequal
+| 5 = @ruby_operator_assignment_plusequal
+| 6 = @ruby_operator_assignment_minusequal
+| 7 = @ruby_operator_assignment_slashequal
+| 8 = @ruby_operator_assignment_langlelangleequal
+| 9 = @ruby_operator_assignment_ranglerangleequal
+| 10 = @ruby_operator_assignment_caretequal
+| 11 = @ruby_operator_assignment_pipeequal
+| 12 = @ruby_operator_assignment_pipepipeequal
+;
+
+
+@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression
+
+ruby_operator_assignment_def(
+ unique int id: @ruby_operator_assignment,
+ int left: @ruby_underscore_lhs ref,
+ int operator: int ref,
+ int right: @ruby_operator_assignment_right_type ref
+);
+
+ruby_optional_parameter_def(
+ unique int id: @ruby_optional_parameter,
+ int name: @ruby_token_identifier ref,
+ int value: @ruby_underscore_arg ref
+);
+
+@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg
+
+ruby_pair_value(
+ unique int ruby_pair: @ruby_pair ref,
+ unique int value: @ruby_underscore_arg ref
+);
+
+ruby_pair_def(
+ unique int id: @ruby_pair,
+ int key__: @ruby_pair_key_type ref
+);
+
+ruby_parenthesized_pattern_def(
+ unique int id: @ruby_parenthesized_pattern,
+ int child: @ruby_underscore_pattern_expr ref
+);
+
+@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_parenthesized_statements, index]
+ruby_parenthesized_statements_child(
+ int ruby_parenthesized_statements: @ruby_parenthesized_statements ref,
+ int index: int ref,
+ unique int child: @ruby_parenthesized_statements_child_type ref
+);
+
+ruby_parenthesized_statements_def(
+ unique int id: @ruby_parenthesized_statements
+);
+
+@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg
+
+ruby_pattern_def(
+ unique int id: @ruby_pattern,
+ int child: @ruby_pattern_child_type ref
+);
+
+@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement
+
+#keyset[ruby_program, index]
+ruby_program_child(
+ int ruby_program: @ruby_program ref,
+ int index: int ref,
+ unique int child: @ruby_program_child_type ref
+);
+
+ruby_program_def(
+ unique int id: @ruby_program
+);
+
+@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive
+
+ruby_range_begin(
+ unique int ruby_range: @ruby_range ref,
+ unique int begin: @ruby_range_begin_type ref
+);
+
+@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive
+
+ruby_range_end(
+ unique int ruby_range: @ruby_range ref,
+ unique int end: @ruby_range_end_type ref
+);
+
+case @ruby_range.operator of
+ 0 = @ruby_range_dotdot
+| 1 = @ruby_range_dotdotdot
+;
+
+
+ruby_range_def(
+ unique int id: @ruby_range,
+ int operator: int ref
+);
+
+@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer
+
+ruby_rational_def(
+ unique int id: @ruby_rational,
+ int child: @ruby_rational_child_type ref
+);
+
+ruby_redo_child(
+ unique int ruby_redo: @ruby_redo ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_redo_def(
+ unique int id: @ruby_redo
+);
+
+@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_regex, index]
+ruby_regex_child(
+ int ruby_regex: @ruby_regex ref,
+ int index: int ref,
+ unique int child: @ruby_regex_child_type ref
+);
+
+ruby_regex_def(
+ unique int id: @ruby_regex
+);
+
+ruby_rescue_body(
+ unique int ruby_rescue: @ruby_rescue ref,
+ unique int body: @ruby_then ref
+);
+
+ruby_rescue_exceptions(
+ unique int ruby_rescue: @ruby_rescue ref,
+ unique int exceptions: @ruby_exceptions ref
+);
+
+ruby_rescue_variable(
+ unique int ruby_rescue: @ruby_rescue ref,
+ unique int variable: @ruby_exception_variable ref
+);
+
+ruby_rescue_def(
+ unique int id: @ruby_rescue
+);
+
+@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement
+
+ruby_rescue_modifier_def(
+ unique int id: @ruby_rescue_modifier,
+ int body: @ruby_rescue_modifier_body_type ref,
+ int handler: @ruby_underscore_expression ref
+);
+
+ruby_rest_assignment_child(
+ unique int ruby_rest_assignment: @ruby_rest_assignment ref,
+ unique int child: @ruby_underscore_lhs ref
+);
+
+ruby_rest_assignment_def(
+ unique int id: @ruby_rest_assignment
+);
+
+ruby_retry_child(
+ unique int ruby_retry: @ruby_retry ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_retry_def(
+ unique int id: @ruby_retry
+);
+
+ruby_return_child(
+ unique int ruby_return: @ruby_return ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_return_def(
+ unique int id: @ruby_return
+);
+
+@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg
+
+#keyset[ruby_right_assignment_list, index]
+ruby_right_assignment_list_child(
+ int ruby_right_assignment_list: @ruby_right_assignment_list ref,
+ int index: int ref,
+ unique int child: @ruby_right_assignment_list_child_type ref
+);
+
+ruby_right_assignment_list_def(
+ unique int id: @ruby_right_assignment_list
+);
+
+@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary
+
+ruby_scope_resolution_scope(
+ unique int ruby_scope_resolution: @ruby_scope_resolution ref,
+ unique int scope: @ruby_scope_resolution_scope_type ref
+);
+
+ruby_scope_resolution_def(
+ unique int id: @ruby_scope_resolution,
+ int name: @ruby_token_constant ref
+);
+
+ruby_setter_def(
+ unique int id: @ruby_setter,
+ int name: @ruby_token_identifier ref
+);
+
+ruby_singleton_class_body(
+ unique int ruby_singleton_class: @ruby_singleton_class ref,
+ unique int body: @ruby_body_statement ref
+);
+
+ruby_singleton_class_def(
+ unique int id: @ruby_singleton_class,
+ int value: @ruby_underscore_arg ref
+);
+
+@ruby_singleton_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg
+
+ruby_singleton_method_body(
+ unique int ruby_singleton_method: @ruby_singleton_method ref,
+ unique int body: @ruby_singleton_method_body_type ref
+);
+
+@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable
+
+ruby_singleton_method_parameters(
+ unique int ruby_singleton_method: @ruby_singleton_method ref,
+ unique int parameters: @ruby_method_parameters ref
+);
+
+ruby_singleton_method_def(
+ unique int id: @ruby_singleton_method,
+ int name: @ruby_underscore_method_name ref,
+ int object: @ruby_singleton_method_object_type ref
+);
+
+ruby_splat_argument_child(
+ unique int ruby_splat_argument: @ruby_splat_argument ref,
+ unique int child: @ruby_underscore_arg ref
+);
+
+ruby_splat_argument_def(
+ unique int id: @ruby_splat_argument
+);
+
+ruby_splat_parameter_name(
+ unique int ruby_splat_parameter: @ruby_splat_parameter ref,
+ unique int name: @ruby_token_identifier ref
+);
+
+ruby_splat_parameter_def(
+ unique int id: @ruby_splat_parameter
+);
+
+@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_string__, index]
+ruby_string_child(
+ int ruby_string__: @ruby_string__ ref,
+ int index: int ref,
+ unique int child: @ruby_string_child_type ref
+);
+
+ruby_string_def(
+ unique int id: @ruby_string__
+);
+
+#keyset[ruby_string_array, index]
+ruby_string_array_child(
+ int ruby_string_array: @ruby_string_array ref,
+ int index: int ref,
+ unique int child: @ruby_bare_string ref
+);
+
+ruby_string_array_def(
+ unique int id: @ruby_string_array
+);
+
+@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_subshell, index]
+ruby_subshell_child(
+ int ruby_subshell: @ruby_subshell ref,
+ int index: int ref,
+ unique int child: @ruby_subshell_child_type ref
+);
+
+ruby_subshell_def(
+ unique int id: @ruby_subshell
+);
+
+ruby_superclass_def(
+ unique int id: @ruby_superclass,
+ int child: @ruby_underscore_expression ref
+);
+
+#keyset[ruby_symbol_array, index]
+ruby_symbol_array_child(
+ int ruby_symbol_array: @ruby_symbol_array ref,
+ int index: int ref,
+ unique int child: @ruby_bare_symbol ref
+);
+
+ruby_symbol_array_def(
+ unique int id: @ruby_symbol_array
+);
+
+ruby_test_pattern_def(
+ unique int id: @ruby_test_pattern,
+ int pattern: @ruby_underscore_pattern_top_expr_body ref,
+ int value: @ruby_underscore_arg ref
+);
+
+@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_then, index]
+ruby_then_child(
+ int ruby_then: @ruby_then ref,
+ int index: int ref,
+ unique int child: @ruby_then_child_type ref
+);
+
+ruby_then_def(
+ unique int id: @ruby_then
+);
+
+@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric
+
+case @ruby_unary.operator of
+ 0 = @ruby_unary_bang
+| 1 = @ruby_unary_plus
+| 2 = @ruby_unary_minus
+| 3 = @ruby_unary_definedquestion
+| 4 = @ruby_unary_not
+| 5 = @ruby_unary_tilde
+;
+
+
+ruby_unary_def(
+ unique int id: @ruby_unary,
+ int operand: @ruby_unary_operand_type ref,
+ int operator: int ref
+);
+
+#keyset[ruby_undef, index]
+ruby_undef_child(
+ int ruby_undef: @ruby_undef ref,
+ int index: int ref,
+ unique int child: @ruby_underscore_method_name ref
+);
+
+ruby_undef_def(
+ unique int id: @ruby_undef
+);
+
+@ruby_unless_alternative_type = @ruby_else | @ruby_elsif
+
+ruby_unless_alternative(
+ unique int ruby_unless: @ruby_unless ref,
+ unique int alternative: @ruby_unless_alternative_type ref
+);
+
+ruby_unless_consequence(
+ unique int ruby_unless: @ruby_unless ref,
+ unique int consequence: @ruby_then ref
+);
+
+ruby_unless_def(
+ unique int id: @ruby_unless,
+ int condition: @ruby_underscore_statement ref
+);
+
+ruby_unless_guard_def(
+ unique int id: @ruby_unless_guard,
+ int condition: @ruby_underscore_expression ref
+);
+
+ruby_unless_modifier_def(
+ unique int id: @ruby_unless_modifier,
+ int body: @ruby_underscore_statement ref,
+ int condition: @ruby_underscore_expression ref
+);
+
+ruby_until_def(
+ unique int id: @ruby_until,
+ int body: @ruby_do ref,
+ int condition: @ruby_underscore_statement ref
+);
+
+ruby_until_modifier_def(
+ unique int id: @ruby_until_modifier,
+ int body: @ruby_underscore_statement ref,
+ int condition: @ruby_underscore_expression ref
+);
+
+@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable
+
+ruby_variable_reference_pattern_def(
+ unique int id: @ruby_variable_reference_pattern,
+ int name: @ruby_variable_reference_pattern_name_type ref
+);
+
+ruby_when_body(
+ unique int ruby_when: @ruby_when ref,
+ unique int body: @ruby_then ref
+);
+
+#keyset[ruby_when, index]
+ruby_when_pattern(
+ int ruby_when: @ruby_when ref,
+ int index: int ref,
+ unique int pattern: @ruby_pattern ref
+);
+
+ruby_when_def(
+ unique int id: @ruby_when
+);
+
+ruby_while_def(
+ unique int id: @ruby_while,
+ int body: @ruby_do ref,
+ int condition: @ruby_underscore_statement ref
+);
+
+ruby_while_modifier_def(
+ unique int id: @ruby_while_modifier,
+ int body: @ruby_underscore_statement ref,
+ int condition: @ruby_underscore_expression ref
+);
+
+ruby_yield_child(
+ unique int ruby_yield: @ruby_yield ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_yield_def(
+ unique int id: @ruby_yield
+);
+
+ruby_tokeninfo(
+ unique int id: @ruby_token,
+ int kind: int ref,
+ string value: string ref
+);
+
+case @ruby_token.kind of
+ 0 = @ruby_reserved_word
+| 1 = @ruby_token_character
+| 2 = @ruby_token_class_variable
+| 3 = @ruby_token_comment
+| 4 = @ruby_token_constant
+| 5 = @ruby_token_empty_statement
+| 6 = @ruby_token_encoding
+| 7 = @ruby_token_escape_sequence
+| 8 = @ruby_token_false
+| 9 = @ruby_token_file
+| 10 = @ruby_token_float
+| 11 = @ruby_token_forward_argument
+| 12 = @ruby_token_forward_parameter
+| 13 = @ruby_token_global_variable
+| 14 = @ruby_token_hash_key_symbol
+| 15 = @ruby_token_hash_splat_nil
+| 16 = @ruby_token_heredoc_beginning
+| 17 = @ruby_token_heredoc_content
+| 18 = @ruby_token_heredoc_end
+| 19 = @ruby_token_identifier
+| 20 = @ruby_token_instance_variable
+| 21 = @ruby_token_integer
+| 22 = @ruby_token_line
+| 23 = @ruby_token_nil
+| 24 = @ruby_token_operator
+| 25 = @ruby_token_self
+| 26 = @ruby_token_simple_symbol
+| 27 = @ruby_token_string_content
+| 28 = @ruby_token_super
+| 29 = @ruby_token_true
+| 30 = @ruby_token_uninterpreted
+;
+
+
+@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_body | @ruby_block_parameter | @ruby_block_parameters | @ruby_body_statement | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_match_pattern | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_test_pattern | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield
+
+ruby_ast_node_location(
+ unique int node: @ruby_ast_node ref,
+ int loc: @location_default ref
+);
+
+#keyset[parent, parent_index]
+ruby_ast_node_parent(
+ unique int node: @ruby_ast_node ref,
+ int parent: @ruby_ast_node ref,
+ int parent_index: int ref
+);
+
+/*- Erb dbscheme -*/
+erb_comment_directive_child(
+ unique int erb_comment_directive: @erb_comment_directive ref,
+ unique int child: @erb_token_comment ref
+);
+
+erb_comment_directive_def(
+ unique int id: @erb_comment_directive
+);
+
+erb_directive_child(
+ unique int erb_directive: @erb_directive ref,
+ unique int child: @erb_token_code ref
+);
+
+erb_directive_def(
+ unique int id: @erb_directive
+);
+
+erb_graphql_directive_child(
+ unique int erb_graphql_directive: @erb_graphql_directive ref,
+ unique int child: @erb_token_code ref
+);
+
+erb_graphql_directive_def(
+ unique int id: @erb_graphql_directive
+);
+
+erb_output_directive_child(
+ unique int erb_output_directive: @erb_output_directive ref,
+ unique int child: @erb_token_code ref
+);
+
+erb_output_directive_def(
+ unique int id: @erb_output_directive
+);
+
+@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content
+
+#keyset[erb_template, index]
+erb_template_child(
+ int erb_template: @erb_template ref,
+ int index: int ref,
+ unique int child: @erb_template_child_type ref
+);
+
+erb_template_def(
+ unique int id: @erb_template
+);
+
+erb_tokeninfo(
+ unique int id: @erb_token,
+ int kind: int ref,
+ string value: string ref
+);
+
+case @erb_token.kind of
+ 0 = @erb_reserved_word
+| 1 = @erb_token_code
+| 2 = @erb_token_comment
+| 3 = @erb_token_content
+;
+
+
+@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token
+
+erb_ast_node_location(
+ unique int node: @erb_ast_node ref,
+ int loc: @location_default ref
+);
+
+#keyset[parent, parent_index]
+erb_ast_node_parent(
+ unique int node: @erb_ast_node ref,
+ int parent: @erb_ast_node ref,
+ int parent_index: int ref
+);
+
diff --git a/ruby/downgrades/eae6926f5000373d5eb1d82131e1ff6152b67b2c/ruby.dbscheme b/ruby/downgrades/eae6926f5000373d5eb1d82131e1ff6152b67b2c/ruby.dbscheme
new file mode 100644
index 000000000000..dc51d416301d
--- /dev/null
+++ b/ruby/downgrades/eae6926f5000373d5eb1d82131e1ff6152b67b2c/ruby.dbscheme
@@ -0,0 +1,1532 @@
+// CodeQL database schema for Ruby
+// Automatically generated from the tree-sitter grammar; do not edit
+
+/*- Files and folders -*/
+
+/**
+ * The location of an element.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_default(
+ unique int id: @location_default,
+ int file: @file ref,
+ int beginLine: int ref,
+ int beginColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+files(
+ unique int id: @file,
+ string name: string ref
+);
+
+folders(
+ unique int id: @folder,
+ string name: string ref
+);
+
+@container = @file | @folder
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref
+);
+
+/*- Empty location -*/
+
+empty_location(
+ int location: @location_default ref
+);
+
+/*- Source location prefix -*/
+
+/**
+ * The source location of the snapshot.
+ */
+sourceLocationPrefix(string prefix : string ref);
+
+/*- Diagnostic messages -*/
+
+diagnostics(
+ unique int id: @diagnostic,
+ int severity: int ref,
+ string error_tag: string ref,
+ string error_message: string ref,
+ string full_error_message: string ref,
+ int location: @location_default ref
+);
+
+/*- Diagnostic messages: severity -*/
+
+case @diagnostic.severity of
+ 10 = @diagnostic_debug
+| 20 = @diagnostic_info
+| 30 = @diagnostic_warning
+| 40 = @diagnostic_error
+;
+
+/*- YAML -*/
+
+#keyset[parent, idx]
+yaml (unique int id: @yaml_node,
+ int kind: int ref,
+ int parent: @yaml_node_parent ref,
+ int idx: int ref,
+ string tag: string ref,
+ string tostring: string ref);
+
+case @yaml_node.kind of
+ 0 = @yaml_scalar_node
+| 1 = @yaml_mapping_node
+| 2 = @yaml_sequence_node
+| 3 = @yaml_alias_node
+;
+
+@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node;
+
+@yaml_node_parent = @yaml_collection_node | @file;
+
+yaml_anchors (unique int node: @yaml_node ref,
+ string anchor: string ref);
+
+yaml_aliases (unique int alias: @yaml_alias_node ref,
+ string target: string ref);
+
+yaml_scalars (unique int scalar: @yaml_scalar_node ref,
+ int style: int ref,
+ string value: string ref);
+
+yaml_errors (unique int id: @yaml_error,
+ string message: string ref);
+
+yaml_locations(unique int locatable: @yaml_locatable ref,
+ int location: @location_default ref);
+
+@yaml_locatable = @yaml_node | @yaml_error;
+
+/*- Database metadata -*/
+databaseMetadata(
+ string metadataKey: string ref,
+ string value: string ref
+);
+
+/*- Ruby dbscheme -*/
+@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary
+
+@ruby_underscore_call_operator = @ruby_reserved_word
+
+@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_match_pattern | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_test_pattern | @ruby_unary | @ruby_underscore_arg | @ruby_yield
+
+@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable
+
+@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable
+
+@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable
+
+@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant
+
+@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic
+
+@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern
+
+@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric
+
+@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr
+
+@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield
+
+@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer
+
+@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier
+
+@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable
+
+ruby_alias_def(
+ unique int id: @ruby_alias,
+ int alias: @ruby_underscore_method_name ref,
+ int name: @ruby_underscore_method_name ref
+);
+
+#keyset[ruby_alternative_pattern, index]
+ruby_alternative_pattern_alternatives(
+ int ruby_alternative_pattern: @ruby_alternative_pattern ref,
+ int index: int ref,
+ unique int alternatives: @ruby_underscore_pattern_expr_basic ref
+);
+
+ruby_alternative_pattern_def(
+ unique int id: @ruby_alternative_pattern
+);
+
+@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression
+
+#keyset[ruby_argument_list, index]
+ruby_argument_list_child(
+ int ruby_argument_list: @ruby_argument_list ref,
+ int index: int ref,
+ unique int child: @ruby_argument_list_child_type ref
+);
+
+ruby_argument_list_def(
+ unique int id: @ruby_argument_list
+);
+
+@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression
+
+#keyset[ruby_array, index]
+ruby_array_child(
+ int ruby_array: @ruby_array ref,
+ int index: int ref,
+ unique int child: @ruby_array_child_type ref
+);
+
+ruby_array_def(
+ unique int id: @ruby_array
+);
+
+ruby_array_pattern_class(
+ unique int ruby_array_pattern: @ruby_array_pattern ref,
+ unique int class: @ruby_underscore_pattern_constant ref
+);
+
+@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr
+
+#keyset[ruby_array_pattern, index]
+ruby_array_pattern_child(
+ int ruby_array_pattern: @ruby_array_pattern ref,
+ int index: int ref,
+ unique int child: @ruby_array_pattern_child_type ref
+);
+
+ruby_array_pattern_def(
+ unique int id: @ruby_array_pattern
+);
+
+ruby_as_pattern_def(
+ unique int id: @ruby_as_pattern,
+ int name: @ruby_token_identifier ref,
+ int value: @ruby_underscore_pattern_expr ref
+);
+
+@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs
+
+@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression
+
+ruby_assignment_def(
+ unique int id: @ruby_assignment,
+ int left: @ruby_assignment_left_type ref,
+ int right: @ruby_assignment_right_type ref
+);
+
+@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_bare_string, index]
+ruby_bare_string_child(
+ int ruby_bare_string: @ruby_bare_string ref,
+ int index: int ref,
+ unique int child: @ruby_bare_string_child_type ref
+);
+
+ruby_bare_string_def(
+ unique int id: @ruby_bare_string
+);
+
+@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_bare_symbol, index]
+ruby_bare_symbol_child(
+ int ruby_bare_symbol: @ruby_bare_symbol ref,
+ int index: int ref,
+ unique int child: @ruby_bare_symbol_child_type ref
+);
+
+ruby_bare_symbol_def(
+ unique int id: @ruby_bare_symbol
+);
+
+@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_begin, index]
+ruby_begin_child(
+ int ruby_begin: @ruby_begin ref,
+ int index: int ref,
+ unique int child: @ruby_begin_child_type ref
+);
+
+ruby_begin_def(
+ unique int id: @ruby_begin
+);
+
+@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_begin_block, index]
+ruby_begin_block_child(
+ int ruby_begin_block: @ruby_begin_block ref,
+ int index: int ref,
+ unique int child: @ruby_begin_block_child_type ref
+);
+
+ruby_begin_block_def(
+ unique int id: @ruby_begin_block
+);
+
+@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric
+
+case @ruby_binary.operator of
+ 0 = @ruby_binary_bangequal
+| 1 = @ruby_binary_bangtilde
+| 2 = @ruby_binary_percent
+| 3 = @ruby_binary_ampersand
+| 4 = @ruby_binary_ampersandampersand
+| 5 = @ruby_binary_star
+| 6 = @ruby_binary_starstar
+| 7 = @ruby_binary_plus
+| 8 = @ruby_binary_minus
+| 9 = @ruby_binary_slash
+| 10 = @ruby_binary_langle
+| 11 = @ruby_binary_langlelangle
+| 12 = @ruby_binary_langleequal
+| 13 = @ruby_binary_langleequalrangle
+| 14 = @ruby_binary_equalequal
+| 15 = @ruby_binary_equalequalequal
+| 16 = @ruby_binary_equaltilde
+| 17 = @ruby_binary_rangle
+| 18 = @ruby_binary_rangleequal
+| 19 = @ruby_binary_ranglerangle
+| 20 = @ruby_binary_caret
+| 21 = @ruby_binary_and
+| 22 = @ruby_binary_or
+| 23 = @ruby_binary_pipe
+| 24 = @ruby_binary_pipepipe
+;
+
+
+ruby_binary_def(
+ unique int id: @ruby_binary,
+ int left: @ruby_binary_left_type ref,
+ int operator: int ref,
+ int right: @ruby_underscore_expression ref
+);
+
+ruby_block_body(
+ unique int ruby_block: @ruby_block ref,
+ unique int body: @ruby_block_body ref
+);
+
+ruby_block_parameters(
+ unique int ruby_block: @ruby_block ref,
+ unique int parameters: @ruby_block_parameters ref
+);
+
+ruby_block_def(
+ unique int id: @ruby_block
+);
+
+ruby_block_argument_child(
+ unique int ruby_block_argument: @ruby_block_argument ref,
+ unique int child: @ruby_underscore_arg ref
+);
+
+ruby_block_argument_def(
+ unique int id: @ruby_block_argument
+);
+
+@ruby_block_body_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_block_body, index]
+ruby_block_body_child(
+ int ruby_block_body: @ruby_block_body ref,
+ int index: int ref,
+ unique int child: @ruby_block_body_child_type ref
+);
+
+ruby_block_body_def(
+ unique int id: @ruby_block_body
+);
+
+ruby_block_parameter_name(
+ unique int ruby_block_parameter: @ruby_block_parameter ref,
+ unique int name: @ruby_token_identifier ref
+);
+
+ruby_block_parameter_def(
+ unique int id: @ruby_block_parameter
+);
+
+#keyset[ruby_block_parameters, index]
+ruby_block_parameters_locals(
+ int ruby_block_parameters: @ruby_block_parameters ref,
+ int index: int ref,
+ unique int locals: @ruby_token_identifier ref
+);
+
+@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier
+
+#keyset[ruby_block_parameters, index]
+ruby_block_parameters_child(
+ int ruby_block_parameters: @ruby_block_parameters ref,
+ int index: int ref,
+ unique int child: @ruby_block_parameters_child_type ref
+);
+
+ruby_block_parameters_def(
+ unique int id: @ruby_block_parameters
+);
+
+@ruby_body_statement_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_body_statement, index]
+ruby_body_statement_child(
+ int ruby_body_statement: @ruby_body_statement ref,
+ int index: int ref,
+ unique int child: @ruby_body_statement_child_type ref
+);
+
+ruby_body_statement_def(
+ unique int id: @ruby_body_statement
+);
+
+ruby_break_child(
+ unique int ruby_break: @ruby_break ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_break_def(
+ unique int id: @ruby_break
+);
+
+ruby_call_arguments(
+ unique int ruby_call: @ruby_call ref,
+ unique int arguments: @ruby_argument_list ref
+);
+
+@ruby_call_block_type = @ruby_block | @ruby_do_block
+
+ruby_call_block(
+ unique int ruby_call: @ruby_call ref,
+ unique int block: @ruby_call_block_type ref
+);
+
+@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable
+
+ruby_call_method(
+ unique int ruby_call: @ruby_call ref,
+ unique int method: @ruby_call_method_type ref
+);
+
+ruby_call_operator(
+ unique int ruby_call: @ruby_call ref,
+ unique int operator: @ruby_underscore_call_operator ref
+);
+
+ruby_call_receiver(
+ unique int ruby_call: @ruby_call ref,
+ unique int receiver: @ruby_underscore_primary ref
+);
+
+ruby_call_def(
+ unique int id: @ruby_call
+);
+
+ruby_case_value(
+ unique int ruby_case__: @ruby_case__ ref,
+ unique int value: @ruby_underscore_statement ref
+);
+
+@ruby_case_child_type = @ruby_else | @ruby_when
+
+#keyset[ruby_case__, index]
+ruby_case_child(
+ int ruby_case__: @ruby_case__ ref,
+ int index: int ref,
+ unique int child: @ruby_case_child_type ref
+);
+
+ruby_case_def(
+ unique int id: @ruby_case__
+);
+
+#keyset[ruby_case_match, index]
+ruby_case_match_clauses(
+ int ruby_case_match: @ruby_case_match ref,
+ int index: int ref,
+ unique int clauses: @ruby_in_clause ref
+);
+
+ruby_case_match_else(
+ unique int ruby_case_match: @ruby_case_match ref,
+ unique int else: @ruby_else ref
+);
+
+ruby_case_match_def(
+ unique int id: @ruby_case_match,
+ int value: @ruby_underscore_statement ref
+);
+
+#keyset[ruby_chained_string, index]
+ruby_chained_string_child(
+ int ruby_chained_string: @ruby_chained_string ref,
+ int index: int ref,
+ unique int child: @ruby_string__ ref
+);
+
+ruby_chained_string_def(
+ unique int id: @ruby_chained_string
+);
+
+ruby_class_body(
+ unique int ruby_class: @ruby_class ref,
+ unique int body: @ruby_body_statement ref
+);
+
+@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant
+
+ruby_class_superclass(
+ unique int ruby_class: @ruby_class ref,
+ unique int superclass: @ruby_superclass ref
+);
+
+ruby_class_def(
+ unique int id: @ruby_class,
+ int name: @ruby_class_name_type ref
+);
+
+@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer
+
+ruby_complex_def(
+ unique int id: @ruby_complex,
+ int child: @ruby_complex_child_type ref
+);
+
+ruby_conditional_def(
+ unique int id: @ruby_conditional,
+ int alternative: @ruby_underscore_arg ref,
+ int condition: @ruby_underscore_arg ref,
+ int consequence: @ruby_underscore_arg ref
+);
+
+@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_delimited_symbol, index]
+ruby_delimited_symbol_child(
+ int ruby_delimited_symbol: @ruby_delimited_symbol ref,
+ int index: int ref,
+ unique int child: @ruby_delimited_symbol_child_type ref
+);
+
+ruby_delimited_symbol_def(
+ unique int id: @ruby_delimited_symbol
+);
+
+@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs
+
+#keyset[ruby_destructured_left_assignment, index]
+ruby_destructured_left_assignment_child(
+ int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref,
+ int index: int ref,
+ unique int child: @ruby_destructured_left_assignment_child_type ref
+);
+
+ruby_destructured_left_assignment_def(
+ unique int id: @ruby_destructured_left_assignment
+);
+
+@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier
+
+#keyset[ruby_destructured_parameter, index]
+ruby_destructured_parameter_child(
+ int ruby_destructured_parameter: @ruby_destructured_parameter ref,
+ int index: int ref,
+ unique int child: @ruby_destructured_parameter_child_type ref
+);
+
+ruby_destructured_parameter_def(
+ unique int id: @ruby_destructured_parameter
+);
+
+@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_do, index]
+ruby_do_child(
+ int ruby_do: @ruby_do ref,
+ int index: int ref,
+ unique int child: @ruby_do_child_type ref
+);
+
+ruby_do_def(
+ unique int id: @ruby_do
+);
+
+ruby_do_block_body(
+ unique int ruby_do_block: @ruby_do_block ref,
+ unique int body: @ruby_body_statement ref
+);
+
+ruby_do_block_parameters(
+ unique int ruby_do_block: @ruby_do_block ref,
+ unique int parameters: @ruby_block_parameters ref
+);
+
+ruby_do_block_def(
+ unique int id: @ruby_do_block
+);
+
+@ruby_element_reference_block_type = @ruby_block | @ruby_do_block
+
+ruby_element_reference_block(
+ unique int ruby_element_reference: @ruby_element_reference ref,
+ unique int block: @ruby_element_reference_block_type ref
+);
+
+@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression
+
+#keyset[ruby_element_reference, index]
+ruby_element_reference_child(
+ int ruby_element_reference: @ruby_element_reference ref,
+ int index: int ref,
+ unique int child: @ruby_element_reference_child_type ref
+);
+
+ruby_element_reference_def(
+ unique int id: @ruby_element_reference,
+ int object: @ruby_underscore_primary ref
+);
+
+@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_else, index]
+ruby_else_child(
+ int ruby_else: @ruby_else ref,
+ int index: int ref,
+ unique int child: @ruby_else_child_type ref
+);
+
+ruby_else_def(
+ unique int id: @ruby_else
+);
+
+@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif
+
+ruby_elsif_alternative(
+ unique int ruby_elsif: @ruby_elsif ref,
+ unique int alternative: @ruby_elsif_alternative_type ref
+);
+
+ruby_elsif_consequence(
+ unique int ruby_elsif: @ruby_elsif ref,
+ unique int consequence: @ruby_then ref
+);
+
+ruby_elsif_def(
+ unique int id: @ruby_elsif,
+ int condition: @ruby_underscore_statement ref
+);
+
+@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_end_block, index]
+ruby_end_block_child(
+ int ruby_end_block: @ruby_end_block ref,
+ int index: int ref,
+ unique int child: @ruby_end_block_child_type ref
+);
+
+ruby_end_block_def(
+ unique int id: @ruby_end_block
+);
+
+@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_ensure, index]
+ruby_ensure_child(
+ int ruby_ensure: @ruby_ensure ref,
+ int index: int ref,
+ unique int child: @ruby_ensure_child_type ref
+);
+
+ruby_ensure_def(
+ unique int id: @ruby_ensure
+);
+
+ruby_exception_variable_def(
+ unique int id: @ruby_exception_variable,
+ int child: @ruby_underscore_lhs ref
+);
+
+@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg
+
+#keyset[ruby_exceptions, index]
+ruby_exceptions_child(
+ int ruby_exceptions: @ruby_exceptions ref,
+ int index: int ref,
+ unique int child: @ruby_exceptions_child_type ref
+);
+
+ruby_exceptions_def(
+ unique int id: @ruby_exceptions
+);
+
+ruby_expression_reference_pattern_def(
+ unique int id: @ruby_expression_reference_pattern,
+ int value: @ruby_underscore_expression ref
+);
+
+ruby_find_pattern_class(
+ unique int ruby_find_pattern: @ruby_find_pattern ref,
+ unique int class: @ruby_underscore_pattern_constant ref
+);
+
+@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr
+
+#keyset[ruby_find_pattern, index]
+ruby_find_pattern_child(
+ int ruby_find_pattern: @ruby_find_pattern ref,
+ int index: int ref,
+ unique int child: @ruby_find_pattern_child_type ref
+);
+
+ruby_find_pattern_def(
+ unique int id: @ruby_find_pattern
+);
+
+@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs
+
+ruby_for_def(
+ unique int id: @ruby_for,
+ int body: @ruby_do ref,
+ int pattern: @ruby_for_pattern_type ref,
+ int value: @ruby_in ref
+);
+
+@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair
+
+#keyset[ruby_hash, index]
+ruby_hash_child(
+ int ruby_hash: @ruby_hash ref,
+ int index: int ref,
+ unique int child: @ruby_hash_child_type ref
+);
+
+ruby_hash_def(
+ unique int id: @ruby_hash
+);
+
+ruby_hash_pattern_class(
+ unique int ruby_hash_pattern: @ruby_hash_pattern ref,
+ unique int class: @ruby_underscore_pattern_constant ref
+);
+
+@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil
+
+#keyset[ruby_hash_pattern, index]
+ruby_hash_pattern_child(
+ int ruby_hash_pattern: @ruby_hash_pattern ref,
+ int index: int ref,
+ unique int child: @ruby_hash_pattern_child_type ref
+);
+
+ruby_hash_pattern_def(
+ unique int id: @ruby_hash_pattern
+);
+
+ruby_hash_splat_argument_child(
+ unique int ruby_hash_splat_argument: @ruby_hash_splat_argument ref,
+ unique int child: @ruby_underscore_arg ref
+);
+
+ruby_hash_splat_argument_def(
+ unique int id: @ruby_hash_splat_argument
+);
+
+ruby_hash_splat_parameter_name(
+ unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref,
+ unique int name: @ruby_token_identifier ref
+);
+
+ruby_hash_splat_parameter_def(
+ unique int id: @ruby_hash_splat_parameter
+);
+
+@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end
+
+#keyset[ruby_heredoc_body, index]
+ruby_heredoc_body_child(
+ int ruby_heredoc_body: @ruby_heredoc_body ref,
+ int index: int ref,
+ unique int child: @ruby_heredoc_body_child_type ref
+);
+
+ruby_heredoc_body_def(
+ unique int id: @ruby_heredoc_body
+);
+
+@ruby_if_alternative_type = @ruby_else | @ruby_elsif
+
+ruby_if_alternative(
+ unique int ruby_if: @ruby_if ref,
+ unique int alternative: @ruby_if_alternative_type ref
+);
+
+ruby_if_consequence(
+ unique int ruby_if: @ruby_if ref,
+ unique int consequence: @ruby_then ref
+);
+
+ruby_if_def(
+ unique int id: @ruby_if,
+ int condition: @ruby_underscore_statement ref
+);
+
+ruby_if_guard_def(
+ unique int id: @ruby_if_guard,
+ int condition: @ruby_underscore_expression ref
+);
+
+ruby_if_modifier_def(
+ unique int id: @ruby_if_modifier,
+ int body: @ruby_underscore_statement ref,
+ int condition: @ruby_underscore_expression ref
+);
+
+ruby_in_def(
+ unique int id: @ruby_in,
+ int child: @ruby_underscore_arg ref
+);
+
+ruby_in_clause_body(
+ unique int ruby_in_clause: @ruby_in_clause ref,
+ unique int body: @ruby_then ref
+);
+
+@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard
+
+ruby_in_clause_guard(
+ unique int ruby_in_clause: @ruby_in_clause ref,
+ unique int guard: @ruby_in_clause_guard_type ref
+);
+
+ruby_in_clause_def(
+ unique int id: @ruby_in_clause,
+ int pattern: @ruby_underscore_pattern_top_expr_body ref
+);
+
+@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_nonlocal_variable | @ruby_underscore_statement
+
+#keyset[ruby_interpolation, index]
+ruby_interpolation_child(
+ int ruby_interpolation: @ruby_interpolation ref,
+ int index: int ref,
+ unique int child: @ruby_interpolation_child_type ref
+);
+
+ruby_interpolation_def(
+ unique int id: @ruby_interpolation
+);
+
+ruby_keyword_parameter_value(
+ unique int ruby_keyword_parameter: @ruby_keyword_parameter ref,
+ unique int value: @ruby_underscore_arg ref
+);
+
+ruby_keyword_parameter_def(
+ unique int id: @ruby_keyword_parameter,
+ int name: @ruby_token_identifier ref
+);
+
+@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol
+
+ruby_keyword_pattern_value(
+ unique int ruby_keyword_pattern: @ruby_keyword_pattern ref,
+ unique int value: @ruby_underscore_pattern_expr ref
+);
+
+ruby_keyword_pattern_def(
+ unique int id: @ruby_keyword_pattern,
+ int key__: @ruby_keyword_pattern_key_type ref
+);
+
+@ruby_lambda_body_type = @ruby_block | @ruby_do_block
+
+ruby_lambda_parameters(
+ unique int ruby_lambda: @ruby_lambda ref,
+ unique int parameters: @ruby_lambda_parameters ref
+);
+
+ruby_lambda_def(
+ unique int id: @ruby_lambda,
+ int body: @ruby_lambda_body_type ref
+);
+
+@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier
+
+#keyset[ruby_lambda_parameters, index]
+ruby_lambda_parameters_child(
+ int ruby_lambda_parameters: @ruby_lambda_parameters ref,
+ int index: int ref,
+ unique int child: @ruby_lambda_parameters_child_type ref
+);
+
+ruby_lambda_parameters_def(
+ unique int id: @ruby_lambda_parameters
+);
+
+@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs
+
+#keyset[ruby_left_assignment_list, index]
+ruby_left_assignment_list_child(
+ int ruby_left_assignment_list: @ruby_left_assignment_list ref,
+ int index: int ref,
+ unique int child: @ruby_left_assignment_list_child_type ref
+);
+
+ruby_left_assignment_list_def(
+ unique int id: @ruby_left_assignment_list
+);
+
+ruby_match_pattern_def(
+ unique int id: @ruby_match_pattern,
+ int pattern: @ruby_underscore_pattern_top_expr_body ref,
+ int value: @ruby_underscore_arg ref
+);
+
+@ruby_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg
+
+ruby_method_body(
+ unique int ruby_method: @ruby_method ref,
+ unique int body: @ruby_method_body_type ref
+);
+
+ruby_method_parameters(
+ unique int ruby_method: @ruby_method ref,
+ unique int parameters: @ruby_method_parameters ref
+);
+
+ruby_method_def(
+ unique int id: @ruby_method,
+ int name: @ruby_underscore_method_name ref
+);
+
+@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier
+
+#keyset[ruby_method_parameters, index]
+ruby_method_parameters_child(
+ int ruby_method_parameters: @ruby_method_parameters ref,
+ int index: int ref,
+ unique int child: @ruby_method_parameters_child_type ref
+);
+
+ruby_method_parameters_def(
+ unique int id: @ruby_method_parameters
+);
+
+ruby_module_body(
+ unique int ruby_module: @ruby_module ref,
+ unique int body: @ruby_body_statement ref
+);
+
+@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant
+
+ruby_module_def(
+ unique int id: @ruby_module,
+ int name: @ruby_module_name_type ref
+);
+
+ruby_next_child(
+ unique int ruby_next: @ruby_next ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_next_def(
+ unique int id: @ruby_next
+);
+
+case @ruby_operator_assignment.operator of
+ 0 = @ruby_operator_assignment_percentequal
+| 1 = @ruby_operator_assignment_ampersandampersandequal
+| 2 = @ruby_operator_assignment_ampersandequal
+| 3 = @ruby_operator_assignment_starstarequal
+| 4 = @ruby_operator_assignment_starequal
+| 5 = @ruby_operator_assignment_plusequal
+| 6 = @ruby_operator_assignment_minusequal
+| 7 = @ruby_operator_assignment_slashequal
+| 8 = @ruby_operator_assignment_langlelangleequal
+| 9 = @ruby_operator_assignment_ranglerangleequal
+| 10 = @ruby_operator_assignment_caretequal
+| 11 = @ruby_operator_assignment_pipeequal
+| 12 = @ruby_operator_assignment_pipepipeequal
+;
+
+
+@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression
+
+ruby_operator_assignment_def(
+ unique int id: @ruby_operator_assignment,
+ int left: @ruby_underscore_lhs ref,
+ int operator: int ref,
+ int right: @ruby_operator_assignment_right_type ref
+);
+
+ruby_optional_parameter_def(
+ unique int id: @ruby_optional_parameter,
+ int name: @ruby_token_identifier ref,
+ int value: @ruby_underscore_arg ref
+);
+
+@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg
+
+ruby_pair_value(
+ unique int ruby_pair: @ruby_pair ref,
+ unique int value: @ruby_underscore_arg ref
+);
+
+ruby_pair_def(
+ unique int id: @ruby_pair,
+ int key__: @ruby_pair_key_type ref
+);
+
+ruby_parenthesized_pattern_def(
+ unique int id: @ruby_parenthesized_pattern,
+ int child: @ruby_underscore_pattern_expr ref
+);
+
+@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_parenthesized_statements, index]
+ruby_parenthesized_statements_child(
+ int ruby_parenthesized_statements: @ruby_parenthesized_statements ref,
+ int index: int ref,
+ unique int child: @ruby_parenthesized_statements_child_type ref
+);
+
+ruby_parenthesized_statements_def(
+ unique int id: @ruby_parenthesized_statements
+);
+
+@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg
+
+ruby_pattern_def(
+ unique int id: @ruby_pattern,
+ int child: @ruby_pattern_child_type ref
+);
+
+@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement
+
+#keyset[ruby_program, index]
+ruby_program_child(
+ int ruby_program: @ruby_program ref,
+ int index: int ref,
+ unique int child: @ruby_program_child_type ref
+);
+
+ruby_program_def(
+ unique int id: @ruby_program
+);
+
+@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive
+
+ruby_range_begin(
+ unique int ruby_range: @ruby_range ref,
+ unique int begin: @ruby_range_begin_type ref
+);
+
+@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive
+
+ruby_range_end(
+ unique int ruby_range: @ruby_range ref,
+ unique int end: @ruby_range_end_type ref
+);
+
+case @ruby_range.operator of
+ 0 = @ruby_range_dotdot
+| 1 = @ruby_range_dotdotdot
+;
+
+
+ruby_range_def(
+ unique int id: @ruby_range,
+ int operator: int ref
+);
+
+@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer
+
+ruby_rational_def(
+ unique int id: @ruby_rational,
+ int child: @ruby_rational_child_type ref
+);
+
+ruby_redo_child(
+ unique int ruby_redo: @ruby_redo ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_redo_def(
+ unique int id: @ruby_redo
+);
+
+@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_regex, index]
+ruby_regex_child(
+ int ruby_regex: @ruby_regex ref,
+ int index: int ref,
+ unique int child: @ruby_regex_child_type ref
+);
+
+ruby_regex_def(
+ unique int id: @ruby_regex
+);
+
+ruby_rescue_body(
+ unique int ruby_rescue: @ruby_rescue ref,
+ unique int body: @ruby_then ref
+);
+
+ruby_rescue_exceptions(
+ unique int ruby_rescue: @ruby_rescue ref,
+ unique int exceptions: @ruby_exceptions ref
+);
+
+ruby_rescue_variable(
+ unique int ruby_rescue: @ruby_rescue ref,
+ unique int variable: @ruby_exception_variable ref
+);
+
+ruby_rescue_def(
+ unique int id: @ruby_rescue
+);
+
+@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement
+
+ruby_rescue_modifier_def(
+ unique int id: @ruby_rescue_modifier,
+ int body: @ruby_rescue_modifier_body_type ref,
+ int handler: @ruby_underscore_expression ref
+);
+
+ruby_rest_assignment_child(
+ unique int ruby_rest_assignment: @ruby_rest_assignment ref,
+ unique int child: @ruby_underscore_lhs ref
+);
+
+ruby_rest_assignment_def(
+ unique int id: @ruby_rest_assignment
+);
+
+ruby_retry_child(
+ unique int ruby_retry: @ruby_retry ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_retry_def(
+ unique int id: @ruby_retry
+);
+
+ruby_return_child(
+ unique int ruby_return: @ruby_return ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_return_def(
+ unique int id: @ruby_return
+);
+
+@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg
+
+#keyset[ruby_right_assignment_list, index]
+ruby_right_assignment_list_child(
+ int ruby_right_assignment_list: @ruby_right_assignment_list ref,
+ int index: int ref,
+ unique int child: @ruby_right_assignment_list_child_type ref
+);
+
+ruby_right_assignment_list_def(
+ unique int id: @ruby_right_assignment_list
+);
+
+@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary
+
+ruby_scope_resolution_scope(
+ unique int ruby_scope_resolution: @ruby_scope_resolution ref,
+ unique int scope: @ruby_scope_resolution_scope_type ref
+);
+
+ruby_scope_resolution_def(
+ unique int id: @ruby_scope_resolution,
+ int name: @ruby_token_constant ref
+);
+
+ruby_setter_def(
+ unique int id: @ruby_setter,
+ int name: @ruby_token_identifier ref
+);
+
+ruby_singleton_class_body(
+ unique int ruby_singleton_class: @ruby_singleton_class ref,
+ unique int body: @ruby_body_statement ref
+);
+
+ruby_singleton_class_def(
+ unique int id: @ruby_singleton_class,
+ int value: @ruby_underscore_arg ref
+);
+
+@ruby_singleton_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg
+
+ruby_singleton_method_body(
+ unique int ruby_singleton_method: @ruby_singleton_method ref,
+ unique int body: @ruby_singleton_method_body_type ref
+);
+
+@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable
+
+ruby_singleton_method_parameters(
+ unique int ruby_singleton_method: @ruby_singleton_method ref,
+ unique int parameters: @ruby_method_parameters ref
+);
+
+ruby_singleton_method_def(
+ unique int id: @ruby_singleton_method,
+ int name: @ruby_underscore_method_name ref,
+ int object: @ruby_singleton_method_object_type ref
+);
+
+ruby_splat_argument_child(
+ unique int ruby_splat_argument: @ruby_splat_argument ref,
+ unique int child: @ruby_underscore_arg ref
+);
+
+ruby_splat_argument_def(
+ unique int id: @ruby_splat_argument
+);
+
+ruby_splat_parameter_name(
+ unique int ruby_splat_parameter: @ruby_splat_parameter ref,
+ unique int name: @ruby_token_identifier ref
+);
+
+ruby_splat_parameter_def(
+ unique int id: @ruby_splat_parameter
+);
+
+@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_string__, index]
+ruby_string_child(
+ int ruby_string__: @ruby_string__ ref,
+ int index: int ref,
+ unique int child: @ruby_string_child_type ref
+);
+
+ruby_string_def(
+ unique int id: @ruby_string__
+);
+
+#keyset[ruby_string_array, index]
+ruby_string_array_child(
+ int ruby_string_array: @ruby_string_array ref,
+ int index: int ref,
+ unique int child: @ruby_bare_string ref
+);
+
+ruby_string_array_def(
+ unique int id: @ruby_string_array
+);
+
+@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_subshell, index]
+ruby_subshell_child(
+ int ruby_subshell: @ruby_subshell ref,
+ int index: int ref,
+ unique int child: @ruby_subshell_child_type ref
+);
+
+ruby_subshell_def(
+ unique int id: @ruby_subshell
+);
+
+ruby_superclass_def(
+ unique int id: @ruby_superclass,
+ int child: @ruby_underscore_expression ref
+);
+
+#keyset[ruby_symbol_array, index]
+ruby_symbol_array_child(
+ int ruby_symbol_array: @ruby_symbol_array ref,
+ int index: int ref,
+ unique int child: @ruby_bare_symbol ref
+);
+
+ruby_symbol_array_def(
+ unique int id: @ruby_symbol_array
+);
+
+ruby_test_pattern_def(
+ unique int id: @ruby_test_pattern,
+ int pattern: @ruby_underscore_pattern_top_expr_body ref,
+ int value: @ruby_underscore_arg ref
+);
+
+@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_then, index]
+ruby_then_child(
+ int ruby_then: @ruby_then ref,
+ int index: int ref,
+ unique int child: @ruby_then_child_type ref
+);
+
+ruby_then_def(
+ unique int id: @ruby_then
+);
+
+@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric
+
+case @ruby_unary.operator of
+ 0 = @ruby_unary_bang
+| 1 = @ruby_unary_plus
+| 2 = @ruby_unary_minus
+| 3 = @ruby_unary_definedquestion
+| 4 = @ruby_unary_not
+| 5 = @ruby_unary_tilde
+;
+
+
+ruby_unary_def(
+ unique int id: @ruby_unary,
+ int operand: @ruby_unary_operand_type ref,
+ int operator: int ref
+);
+
+#keyset[ruby_undef, index]
+ruby_undef_child(
+ int ruby_undef: @ruby_undef ref,
+ int index: int ref,
+ unique int child: @ruby_underscore_method_name ref
+);
+
+ruby_undef_def(
+ unique int id: @ruby_undef
+);
+
+@ruby_unless_alternative_type = @ruby_else | @ruby_elsif
+
+ruby_unless_alternative(
+ unique int ruby_unless: @ruby_unless ref,
+ unique int alternative: @ruby_unless_alternative_type ref
+);
+
+ruby_unless_consequence(
+ unique int ruby_unless: @ruby_unless ref,
+ unique int consequence: @ruby_then ref
+);
+
+ruby_unless_def(
+ unique int id: @ruby_unless,
+ int condition: @ruby_underscore_statement ref
+);
+
+ruby_unless_guard_def(
+ unique int id: @ruby_unless_guard,
+ int condition: @ruby_underscore_expression ref
+);
+
+ruby_unless_modifier_def(
+ unique int id: @ruby_unless_modifier,
+ int body: @ruby_underscore_statement ref,
+ int condition: @ruby_underscore_expression ref
+);
+
+ruby_until_def(
+ unique int id: @ruby_until,
+ int body: @ruby_do ref,
+ int condition: @ruby_underscore_statement ref
+);
+
+ruby_until_modifier_def(
+ unique int id: @ruby_until_modifier,
+ int body: @ruby_underscore_statement ref,
+ int condition: @ruby_underscore_expression ref
+);
+
+@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable
+
+ruby_variable_reference_pattern_def(
+ unique int id: @ruby_variable_reference_pattern,
+ int name: @ruby_variable_reference_pattern_name_type ref
+);
+
+ruby_when_body(
+ unique int ruby_when: @ruby_when ref,
+ unique int body: @ruby_then ref
+);
+
+#keyset[ruby_when, index]
+ruby_when_pattern(
+ int ruby_when: @ruby_when ref,
+ int index: int ref,
+ unique int pattern: @ruby_pattern ref
+);
+
+ruby_when_def(
+ unique int id: @ruby_when
+);
+
+ruby_while_def(
+ unique int id: @ruby_while,
+ int body: @ruby_do ref,
+ int condition: @ruby_underscore_statement ref
+);
+
+ruby_while_modifier_def(
+ unique int id: @ruby_while_modifier,
+ int body: @ruby_underscore_statement ref,
+ int condition: @ruby_underscore_expression ref
+);
+
+ruby_yield_child(
+ unique int ruby_yield: @ruby_yield ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_yield_def(
+ unique int id: @ruby_yield
+);
+
+ruby_tokeninfo(
+ unique int id: @ruby_token,
+ int kind: int ref,
+ string value: string ref
+);
+
+case @ruby_token.kind of
+ 0 = @ruby_reserved_word
+| 1 = @ruby_token_character
+| 2 = @ruby_token_class_variable
+| 3 = @ruby_token_comment
+| 4 = @ruby_token_constant
+| 5 = @ruby_token_empty_statement
+| 6 = @ruby_token_encoding
+| 7 = @ruby_token_escape_sequence
+| 8 = @ruby_token_false
+| 9 = @ruby_token_file
+| 10 = @ruby_token_float
+| 11 = @ruby_token_forward_argument
+| 12 = @ruby_token_forward_parameter
+| 13 = @ruby_token_global_variable
+| 14 = @ruby_token_hash_key_symbol
+| 15 = @ruby_token_hash_splat_nil
+| 16 = @ruby_token_heredoc_beginning
+| 17 = @ruby_token_heredoc_content
+| 18 = @ruby_token_heredoc_end
+| 19 = @ruby_token_identifier
+| 20 = @ruby_token_instance_variable
+| 21 = @ruby_token_integer
+| 22 = @ruby_token_line
+| 23 = @ruby_token_nil
+| 24 = @ruby_token_operator
+| 25 = @ruby_token_self
+| 26 = @ruby_token_simple_symbol
+| 27 = @ruby_token_string_content
+| 28 = @ruby_token_super
+| 29 = @ruby_token_true
+| 30 = @ruby_token_uninterpreted
+;
+
+
+@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_body | @ruby_block_parameter | @ruby_block_parameters | @ruby_body_statement | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_match_pattern | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_test_pattern | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield
+
+ruby_ast_node_location(
+ unique int node: @ruby_ast_node ref,
+ int loc: @location_default ref
+);
+
+#keyset[parent, parent_index]
+ruby_ast_node_parent(
+ unique int node: @ruby_ast_node ref,
+ int parent: @ruby_ast_node ref,
+ int parent_index: int ref
+);
+
+/*- Erb dbscheme -*/
+erb_comment_directive_child(
+ unique int erb_comment_directive: @erb_comment_directive ref,
+ unique int child: @erb_token_comment ref
+);
+
+erb_comment_directive_def(
+ unique int id: @erb_comment_directive
+);
+
+erb_directive_child(
+ unique int erb_directive: @erb_directive ref,
+ unique int child: @erb_token_code ref
+);
+
+erb_directive_def(
+ unique int id: @erb_directive
+);
+
+erb_graphql_directive_child(
+ unique int erb_graphql_directive: @erb_graphql_directive ref,
+ unique int child: @erb_token_code ref
+);
+
+erb_graphql_directive_def(
+ unique int id: @erb_graphql_directive
+);
+
+erb_output_directive_child(
+ unique int erb_output_directive: @erb_output_directive ref,
+ unique int child: @erb_token_code ref
+);
+
+erb_output_directive_def(
+ unique int id: @erb_output_directive
+);
+
+@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content
+
+#keyset[erb_template, index]
+erb_template_child(
+ int erb_template: @erb_template ref,
+ int index: int ref,
+ unique int child: @erb_template_child_type ref
+);
+
+erb_template_def(
+ unique int id: @erb_template
+);
+
+erb_tokeninfo(
+ unique int id: @erb_token,
+ int kind: int ref,
+ string value: string ref
+);
+
+case @erb_token.kind of
+ 0 = @erb_reserved_word
+| 1 = @erb_token_code
+| 2 = @erb_token_comment
+| 3 = @erb_token_content
+;
+
+
+@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token
+
+erb_ast_node_location(
+ unique int node: @erb_ast_node ref,
+ int loc: @location_default ref
+);
+
+#keyset[parent, parent_index]
+erb_ast_node_parent(
+ unique int node: @erb_ast_node ref,
+ int parent: @erb_ast_node ref,
+ int parent_index: int ref
+);
+
diff --git a/ruby/downgrades/eae6926f5000373d5eb1d82131e1ff6152b67b2c/upgrade.properties b/ruby/downgrades/eae6926f5000373d5eb1d82131e1ff6152b67b2c/upgrade.properties
new file mode 100644
index 000000000000..9ff059c0f813
--- /dev/null
+++ b/ruby/downgrades/eae6926f5000373d5eb1d82131e1ff6152b67b2c/upgrade.properties
@@ -0,0 +1,3 @@
+description: Add overlayChangedFiles relation
+compatibility: full
+overlayChangedFiles.rel: delete
diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll b/ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll
index 3532a5d2a21f..62e51c613989 100644
--- a/ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll
+++ b/ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll
@@ -60,10 +60,6 @@ module Ruby {
)
}
- /** Holds if `file` was extracted as part of the overlay database. */
- overlay[local]
- private predicate discardFile(@file file) { isOverlay() and file = getNodeFile(_) }
-
/** Holds if `node` is in the `file` and is part of the overlay base database. */
overlay[local]
private predicate discardableAstNode(@file file, @ruby_ast_node node) {
@@ -73,7 +69,9 @@ module Ruby {
/** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */
overlay[discard_entity]
private predicate discardAstNode(@ruby_ast_node node) {
- exists(@file file | discardableAstNode(file, node) and discardFile(file))
+ exists(@file file, string path | files(file, path) |
+ discardableAstNode(file, node) and overlayChangedFiles(path)
+ )
}
class UnderscoreArg extends @ruby_underscore_arg, AstNode { }
@@ -2006,10 +2004,6 @@ module Erb {
)
}
- /** Holds if `file` was extracted as part of the overlay database. */
- overlay[local]
- private predicate discardFile(@file file) { isOverlay() and file = getNodeFile(_) }
-
/** Holds if `node` is in the `file` and is part of the overlay base database. */
overlay[local]
private predicate discardableAstNode(@file file, @erb_ast_node node) {
@@ -2019,7 +2013,9 @@ module Erb {
/** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */
overlay[discard_entity]
private predicate discardAstNode(@erb_ast_node node) {
- exists(@file file | discardableAstNode(file, node) and discardFile(file))
+ exists(@file file, string path | files(file, path) |
+ discardableAstNode(file, node) and overlayChangedFiles(path)
+ )
}
/** A class representing `code` tokens. */
diff --git a/ruby/ql/lib/ruby.dbscheme b/ruby/ql/lib/ruby.dbscheme
index dc51d416301d..eae6926f5000 100644
--- a/ruby/ql/lib/ruby.dbscheme
+++ b/ruby/ql/lib/ruby.dbscheme
@@ -114,6 +114,10 @@ databaseMetadata(
string value: string ref
);
+overlayChangedFiles(
+ string path: string ref
+);
+
/*- Ruby dbscheme -*/
@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary
diff --git a/ruby/ql/lib/ruby.dbscheme.stats b/ruby/ql/lib/ruby.dbscheme.stats
index 74a9e97f4bd4..468bd72c7805 100644
--- a/ruby/ql/lib/ruby.dbscheme.stats
+++ b/ruby/ql/lib/ruby.dbscheme.stats
@@ -21557,6 +21557,17 @@
+
+ overlayChangedFiles
+ 50
+
+
+ path
+ 50
+
+
+
+
yaml_aliases
0
diff --git a/ruby/ql/lib/upgrades/dc51d416301df12df5b70fbc4338de6cc1f82bfd/old.dbscheme b/ruby/ql/lib/upgrades/dc51d416301df12df5b70fbc4338de6cc1f82bfd/old.dbscheme
new file mode 100644
index 000000000000..dc51d416301d
--- /dev/null
+++ b/ruby/ql/lib/upgrades/dc51d416301df12df5b70fbc4338de6cc1f82bfd/old.dbscheme
@@ -0,0 +1,1532 @@
+// CodeQL database schema for Ruby
+// Automatically generated from the tree-sitter grammar; do not edit
+
+/*- Files and folders -*/
+
+/**
+ * The location of an element.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_default(
+ unique int id: @location_default,
+ int file: @file ref,
+ int beginLine: int ref,
+ int beginColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+files(
+ unique int id: @file,
+ string name: string ref
+);
+
+folders(
+ unique int id: @folder,
+ string name: string ref
+);
+
+@container = @file | @folder
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref
+);
+
+/*- Empty location -*/
+
+empty_location(
+ int location: @location_default ref
+);
+
+/*- Source location prefix -*/
+
+/**
+ * The source location of the snapshot.
+ */
+sourceLocationPrefix(string prefix : string ref);
+
+/*- Diagnostic messages -*/
+
+diagnostics(
+ unique int id: @diagnostic,
+ int severity: int ref,
+ string error_tag: string ref,
+ string error_message: string ref,
+ string full_error_message: string ref,
+ int location: @location_default ref
+);
+
+/*- Diagnostic messages: severity -*/
+
+case @diagnostic.severity of
+ 10 = @diagnostic_debug
+| 20 = @diagnostic_info
+| 30 = @diagnostic_warning
+| 40 = @diagnostic_error
+;
+
+/*- YAML -*/
+
+#keyset[parent, idx]
+yaml (unique int id: @yaml_node,
+ int kind: int ref,
+ int parent: @yaml_node_parent ref,
+ int idx: int ref,
+ string tag: string ref,
+ string tostring: string ref);
+
+case @yaml_node.kind of
+ 0 = @yaml_scalar_node
+| 1 = @yaml_mapping_node
+| 2 = @yaml_sequence_node
+| 3 = @yaml_alias_node
+;
+
+@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node;
+
+@yaml_node_parent = @yaml_collection_node | @file;
+
+yaml_anchors (unique int node: @yaml_node ref,
+ string anchor: string ref);
+
+yaml_aliases (unique int alias: @yaml_alias_node ref,
+ string target: string ref);
+
+yaml_scalars (unique int scalar: @yaml_scalar_node ref,
+ int style: int ref,
+ string value: string ref);
+
+yaml_errors (unique int id: @yaml_error,
+ string message: string ref);
+
+yaml_locations(unique int locatable: @yaml_locatable ref,
+ int location: @location_default ref);
+
+@yaml_locatable = @yaml_node | @yaml_error;
+
+/*- Database metadata -*/
+databaseMetadata(
+ string metadataKey: string ref,
+ string value: string ref
+);
+
+/*- Ruby dbscheme -*/
+@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary
+
+@ruby_underscore_call_operator = @ruby_reserved_word
+
+@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_match_pattern | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_test_pattern | @ruby_unary | @ruby_underscore_arg | @ruby_yield
+
+@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable
+
+@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable
+
+@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable
+
+@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant
+
+@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic
+
+@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern
+
+@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric
+
+@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr
+
+@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield
+
+@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer
+
+@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier
+
+@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable
+
+ruby_alias_def(
+ unique int id: @ruby_alias,
+ int alias: @ruby_underscore_method_name ref,
+ int name: @ruby_underscore_method_name ref
+);
+
+#keyset[ruby_alternative_pattern, index]
+ruby_alternative_pattern_alternatives(
+ int ruby_alternative_pattern: @ruby_alternative_pattern ref,
+ int index: int ref,
+ unique int alternatives: @ruby_underscore_pattern_expr_basic ref
+);
+
+ruby_alternative_pattern_def(
+ unique int id: @ruby_alternative_pattern
+);
+
+@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression
+
+#keyset[ruby_argument_list, index]
+ruby_argument_list_child(
+ int ruby_argument_list: @ruby_argument_list ref,
+ int index: int ref,
+ unique int child: @ruby_argument_list_child_type ref
+);
+
+ruby_argument_list_def(
+ unique int id: @ruby_argument_list
+);
+
+@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression
+
+#keyset[ruby_array, index]
+ruby_array_child(
+ int ruby_array: @ruby_array ref,
+ int index: int ref,
+ unique int child: @ruby_array_child_type ref
+);
+
+ruby_array_def(
+ unique int id: @ruby_array
+);
+
+ruby_array_pattern_class(
+ unique int ruby_array_pattern: @ruby_array_pattern ref,
+ unique int class: @ruby_underscore_pattern_constant ref
+);
+
+@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr
+
+#keyset[ruby_array_pattern, index]
+ruby_array_pattern_child(
+ int ruby_array_pattern: @ruby_array_pattern ref,
+ int index: int ref,
+ unique int child: @ruby_array_pattern_child_type ref
+);
+
+ruby_array_pattern_def(
+ unique int id: @ruby_array_pattern
+);
+
+ruby_as_pattern_def(
+ unique int id: @ruby_as_pattern,
+ int name: @ruby_token_identifier ref,
+ int value: @ruby_underscore_pattern_expr ref
+);
+
+@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs
+
+@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression
+
+ruby_assignment_def(
+ unique int id: @ruby_assignment,
+ int left: @ruby_assignment_left_type ref,
+ int right: @ruby_assignment_right_type ref
+);
+
+@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_bare_string, index]
+ruby_bare_string_child(
+ int ruby_bare_string: @ruby_bare_string ref,
+ int index: int ref,
+ unique int child: @ruby_bare_string_child_type ref
+);
+
+ruby_bare_string_def(
+ unique int id: @ruby_bare_string
+);
+
+@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_bare_symbol, index]
+ruby_bare_symbol_child(
+ int ruby_bare_symbol: @ruby_bare_symbol ref,
+ int index: int ref,
+ unique int child: @ruby_bare_symbol_child_type ref
+);
+
+ruby_bare_symbol_def(
+ unique int id: @ruby_bare_symbol
+);
+
+@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_begin, index]
+ruby_begin_child(
+ int ruby_begin: @ruby_begin ref,
+ int index: int ref,
+ unique int child: @ruby_begin_child_type ref
+);
+
+ruby_begin_def(
+ unique int id: @ruby_begin
+);
+
+@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_begin_block, index]
+ruby_begin_block_child(
+ int ruby_begin_block: @ruby_begin_block ref,
+ int index: int ref,
+ unique int child: @ruby_begin_block_child_type ref
+);
+
+ruby_begin_block_def(
+ unique int id: @ruby_begin_block
+);
+
+@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric
+
+case @ruby_binary.operator of
+ 0 = @ruby_binary_bangequal
+| 1 = @ruby_binary_bangtilde
+| 2 = @ruby_binary_percent
+| 3 = @ruby_binary_ampersand
+| 4 = @ruby_binary_ampersandampersand
+| 5 = @ruby_binary_star
+| 6 = @ruby_binary_starstar
+| 7 = @ruby_binary_plus
+| 8 = @ruby_binary_minus
+| 9 = @ruby_binary_slash
+| 10 = @ruby_binary_langle
+| 11 = @ruby_binary_langlelangle
+| 12 = @ruby_binary_langleequal
+| 13 = @ruby_binary_langleequalrangle
+| 14 = @ruby_binary_equalequal
+| 15 = @ruby_binary_equalequalequal
+| 16 = @ruby_binary_equaltilde
+| 17 = @ruby_binary_rangle
+| 18 = @ruby_binary_rangleequal
+| 19 = @ruby_binary_ranglerangle
+| 20 = @ruby_binary_caret
+| 21 = @ruby_binary_and
+| 22 = @ruby_binary_or
+| 23 = @ruby_binary_pipe
+| 24 = @ruby_binary_pipepipe
+;
+
+
+ruby_binary_def(
+ unique int id: @ruby_binary,
+ int left: @ruby_binary_left_type ref,
+ int operator: int ref,
+ int right: @ruby_underscore_expression ref
+);
+
+ruby_block_body(
+ unique int ruby_block: @ruby_block ref,
+ unique int body: @ruby_block_body ref
+);
+
+ruby_block_parameters(
+ unique int ruby_block: @ruby_block ref,
+ unique int parameters: @ruby_block_parameters ref
+);
+
+ruby_block_def(
+ unique int id: @ruby_block
+);
+
+ruby_block_argument_child(
+ unique int ruby_block_argument: @ruby_block_argument ref,
+ unique int child: @ruby_underscore_arg ref
+);
+
+ruby_block_argument_def(
+ unique int id: @ruby_block_argument
+);
+
+@ruby_block_body_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_block_body, index]
+ruby_block_body_child(
+ int ruby_block_body: @ruby_block_body ref,
+ int index: int ref,
+ unique int child: @ruby_block_body_child_type ref
+);
+
+ruby_block_body_def(
+ unique int id: @ruby_block_body
+);
+
+ruby_block_parameter_name(
+ unique int ruby_block_parameter: @ruby_block_parameter ref,
+ unique int name: @ruby_token_identifier ref
+);
+
+ruby_block_parameter_def(
+ unique int id: @ruby_block_parameter
+);
+
+#keyset[ruby_block_parameters, index]
+ruby_block_parameters_locals(
+ int ruby_block_parameters: @ruby_block_parameters ref,
+ int index: int ref,
+ unique int locals: @ruby_token_identifier ref
+);
+
+@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier
+
+#keyset[ruby_block_parameters, index]
+ruby_block_parameters_child(
+ int ruby_block_parameters: @ruby_block_parameters ref,
+ int index: int ref,
+ unique int child: @ruby_block_parameters_child_type ref
+);
+
+ruby_block_parameters_def(
+ unique int id: @ruby_block_parameters
+);
+
+@ruby_body_statement_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_body_statement, index]
+ruby_body_statement_child(
+ int ruby_body_statement: @ruby_body_statement ref,
+ int index: int ref,
+ unique int child: @ruby_body_statement_child_type ref
+);
+
+ruby_body_statement_def(
+ unique int id: @ruby_body_statement
+);
+
+ruby_break_child(
+ unique int ruby_break: @ruby_break ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_break_def(
+ unique int id: @ruby_break
+);
+
+ruby_call_arguments(
+ unique int ruby_call: @ruby_call ref,
+ unique int arguments: @ruby_argument_list ref
+);
+
+@ruby_call_block_type = @ruby_block | @ruby_do_block
+
+ruby_call_block(
+ unique int ruby_call: @ruby_call ref,
+ unique int block: @ruby_call_block_type ref
+);
+
+@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable
+
+ruby_call_method(
+ unique int ruby_call: @ruby_call ref,
+ unique int method: @ruby_call_method_type ref
+);
+
+ruby_call_operator(
+ unique int ruby_call: @ruby_call ref,
+ unique int operator: @ruby_underscore_call_operator ref
+);
+
+ruby_call_receiver(
+ unique int ruby_call: @ruby_call ref,
+ unique int receiver: @ruby_underscore_primary ref
+);
+
+ruby_call_def(
+ unique int id: @ruby_call
+);
+
+ruby_case_value(
+ unique int ruby_case__: @ruby_case__ ref,
+ unique int value: @ruby_underscore_statement ref
+);
+
+@ruby_case_child_type = @ruby_else | @ruby_when
+
+#keyset[ruby_case__, index]
+ruby_case_child(
+ int ruby_case__: @ruby_case__ ref,
+ int index: int ref,
+ unique int child: @ruby_case_child_type ref
+);
+
+ruby_case_def(
+ unique int id: @ruby_case__
+);
+
+#keyset[ruby_case_match, index]
+ruby_case_match_clauses(
+ int ruby_case_match: @ruby_case_match ref,
+ int index: int ref,
+ unique int clauses: @ruby_in_clause ref
+);
+
+ruby_case_match_else(
+ unique int ruby_case_match: @ruby_case_match ref,
+ unique int else: @ruby_else ref
+);
+
+ruby_case_match_def(
+ unique int id: @ruby_case_match,
+ int value: @ruby_underscore_statement ref
+);
+
+#keyset[ruby_chained_string, index]
+ruby_chained_string_child(
+ int ruby_chained_string: @ruby_chained_string ref,
+ int index: int ref,
+ unique int child: @ruby_string__ ref
+);
+
+ruby_chained_string_def(
+ unique int id: @ruby_chained_string
+);
+
+ruby_class_body(
+ unique int ruby_class: @ruby_class ref,
+ unique int body: @ruby_body_statement ref
+);
+
+@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant
+
+ruby_class_superclass(
+ unique int ruby_class: @ruby_class ref,
+ unique int superclass: @ruby_superclass ref
+);
+
+ruby_class_def(
+ unique int id: @ruby_class,
+ int name: @ruby_class_name_type ref
+);
+
+@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer
+
+ruby_complex_def(
+ unique int id: @ruby_complex,
+ int child: @ruby_complex_child_type ref
+);
+
+ruby_conditional_def(
+ unique int id: @ruby_conditional,
+ int alternative: @ruby_underscore_arg ref,
+ int condition: @ruby_underscore_arg ref,
+ int consequence: @ruby_underscore_arg ref
+);
+
+@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_delimited_symbol, index]
+ruby_delimited_symbol_child(
+ int ruby_delimited_symbol: @ruby_delimited_symbol ref,
+ int index: int ref,
+ unique int child: @ruby_delimited_symbol_child_type ref
+);
+
+ruby_delimited_symbol_def(
+ unique int id: @ruby_delimited_symbol
+);
+
+@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs
+
+#keyset[ruby_destructured_left_assignment, index]
+ruby_destructured_left_assignment_child(
+ int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref,
+ int index: int ref,
+ unique int child: @ruby_destructured_left_assignment_child_type ref
+);
+
+ruby_destructured_left_assignment_def(
+ unique int id: @ruby_destructured_left_assignment
+);
+
+@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier
+
+#keyset[ruby_destructured_parameter, index]
+ruby_destructured_parameter_child(
+ int ruby_destructured_parameter: @ruby_destructured_parameter ref,
+ int index: int ref,
+ unique int child: @ruby_destructured_parameter_child_type ref
+);
+
+ruby_destructured_parameter_def(
+ unique int id: @ruby_destructured_parameter
+);
+
+@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_do, index]
+ruby_do_child(
+ int ruby_do: @ruby_do ref,
+ int index: int ref,
+ unique int child: @ruby_do_child_type ref
+);
+
+ruby_do_def(
+ unique int id: @ruby_do
+);
+
+ruby_do_block_body(
+ unique int ruby_do_block: @ruby_do_block ref,
+ unique int body: @ruby_body_statement ref
+);
+
+ruby_do_block_parameters(
+ unique int ruby_do_block: @ruby_do_block ref,
+ unique int parameters: @ruby_block_parameters ref
+);
+
+ruby_do_block_def(
+ unique int id: @ruby_do_block
+);
+
+@ruby_element_reference_block_type = @ruby_block | @ruby_do_block
+
+ruby_element_reference_block(
+ unique int ruby_element_reference: @ruby_element_reference ref,
+ unique int block: @ruby_element_reference_block_type ref
+);
+
+@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression
+
+#keyset[ruby_element_reference, index]
+ruby_element_reference_child(
+ int ruby_element_reference: @ruby_element_reference ref,
+ int index: int ref,
+ unique int child: @ruby_element_reference_child_type ref
+);
+
+ruby_element_reference_def(
+ unique int id: @ruby_element_reference,
+ int object: @ruby_underscore_primary ref
+);
+
+@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_else, index]
+ruby_else_child(
+ int ruby_else: @ruby_else ref,
+ int index: int ref,
+ unique int child: @ruby_else_child_type ref
+);
+
+ruby_else_def(
+ unique int id: @ruby_else
+);
+
+@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif
+
+ruby_elsif_alternative(
+ unique int ruby_elsif: @ruby_elsif ref,
+ unique int alternative: @ruby_elsif_alternative_type ref
+);
+
+ruby_elsif_consequence(
+ unique int ruby_elsif: @ruby_elsif ref,
+ unique int consequence: @ruby_then ref
+);
+
+ruby_elsif_def(
+ unique int id: @ruby_elsif,
+ int condition: @ruby_underscore_statement ref
+);
+
+@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_end_block, index]
+ruby_end_block_child(
+ int ruby_end_block: @ruby_end_block ref,
+ int index: int ref,
+ unique int child: @ruby_end_block_child_type ref
+);
+
+ruby_end_block_def(
+ unique int id: @ruby_end_block
+);
+
+@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_ensure, index]
+ruby_ensure_child(
+ int ruby_ensure: @ruby_ensure ref,
+ int index: int ref,
+ unique int child: @ruby_ensure_child_type ref
+);
+
+ruby_ensure_def(
+ unique int id: @ruby_ensure
+);
+
+ruby_exception_variable_def(
+ unique int id: @ruby_exception_variable,
+ int child: @ruby_underscore_lhs ref
+);
+
+@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg
+
+#keyset[ruby_exceptions, index]
+ruby_exceptions_child(
+ int ruby_exceptions: @ruby_exceptions ref,
+ int index: int ref,
+ unique int child: @ruby_exceptions_child_type ref
+);
+
+ruby_exceptions_def(
+ unique int id: @ruby_exceptions
+);
+
+ruby_expression_reference_pattern_def(
+ unique int id: @ruby_expression_reference_pattern,
+ int value: @ruby_underscore_expression ref
+);
+
+ruby_find_pattern_class(
+ unique int ruby_find_pattern: @ruby_find_pattern ref,
+ unique int class: @ruby_underscore_pattern_constant ref
+);
+
+@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr
+
+#keyset[ruby_find_pattern, index]
+ruby_find_pattern_child(
+ int ruby_find_pattern: @ruby_find_pattern ref,
+ int index: int ref,
+ unique int child: @ruby_find_pattern_child_type ref
+);
+
+ruby_find_pattern_def(
+ unique int id: @ruby_find_pattern
+);
+
+@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs
+
+ruby_for_def(
+ unique int id: @ruby_for,
+ int body: @ruby_do ref,
+ int pattern: @ruby_for_pattern_type ref,
+ int value: @ruby_in ref
+);
+
+@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair
+
+#keyset[ruby_hash, index]
+ruby_hash_child(
+ int ruby_hash: @ruby_hash ref,
+ int index: int ref,
+ unique int child: @ruby_hash_child_type ref
+);
+
+ruby_hash_def(
+ unique int id: @ruby_hash
+);
+
+ruby_hash_pattern_class(
+ unique int ruby_hash_pattern: @ruby_hash_pattern ref,
+ unique int class: @ruby_underscore_pattern_constant ref
+);
+
+@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil
+
+#keyset[ruby_hash_pattern, index]
+ruby_hash_pattern_child(
+ int ruby_hash_pattern: @ruby_hash_pattern ref,
+ int index: int ref,
+ unique int child: @ruby_hash_pattern_child_type ref
+);
+
+ruby_hash_pattern_def(
+ unique int id: @ruby_hash_pattern
+);
+
+ruby_hash_splat_argument_child(
+ unique int ruby_hash_splat_argument: @ruby_hash_splat_argument ref,
+ unique int child: @ruby_underscore_arg ref
+);
+
+ruby_hash_splat_argument_def(
+ unique int id: @ruby_hash_splat_argument
+);
+
+ruby_hash_splat_parameter_name(
+ unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref,
+ unique int name: @ruby_token_identifier ref
+);
+
+ruby_hash_splat_parameter_def(
+ unique int id: @ruby_hash_splat_parameter
+);
+
+@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end
+
+#keyset[ruby_heredoc_body, index]
+ruby_heredoc_body_child(
+ int ruby_heredoc_body: @ruby_heredoc_body ref,
+ int index: int ref,
+ unique int child: @ruby_heredoc_body_child_type ref
+);
+
+ruby_heredoc_body_def(
+ unique int id: @ruby_heredoc_body
+);
+
+@ruby_if_alternative_type = @ruby_else | @ruby_elsif
+
+ruby_if_alternative(
+ unique int ruby_if: @ruby_if ref,
+ unique int alternative: @ruby_if_alternative_type ref
+);
+
+ruby_if_consequence(
+ unique int ruby_if: @ruby_if ref,
+ unique int consequence: @ruby_then ref
+);
+
+ruby_if_def(
+ unique int id: @ruby_if,
+ int condition: @ruby_underscore_statement ref
+);
+
+ruby_if_guard_def(
+ unique int id: @ruby_if_guard,
+ int condition: @ruby_underscore_expression ref
+);
+
+ruby_if_modifier_def(
+ unique int id: @ruby_if_modifier,
+ int body: @ruby_underscore_statement ref,
+ int condition: @ruby_underscore_expression ref
+);
+
+ruby_in_def(
+ unique int id: @ruby_in,
+ int child: @ruby_underscore_arg ref
+);
+
+ruby_in_clause_body(
+ unique int ruby_in_clause: @ruby_in_clause ref,
+ unique int body: @ruby_then ref
+);
+
+@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard
+
+ruby_in_clause_guard(
+ unique int ruby_in_clause: @ruby_in_clause ref,
+ unique int guard: @ruby_in_clause_guard_type ref
+);
+
+ruby_in_clause_def(
+ unique int id: @ruby_in_clause,
+ int pattern: @ruby_underscore_pattern_top_expr_body ref
+);
+
+@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_nonlocal_variable | @ruby_underscore_statement
+
+#keyset[ruby_interpolation, index]
+ruby_interpolation_child(
+ int ruby_interpolation: @ruby_interpolation ref,
+ int index: int ref,
+ unique int child: @ruby_interpolation_child_type ref
+);
+
+ruby_interpolation_def(
+ unique int id: @ruby_interpolation
+);
+
+ruby_keyword_parameter_value(
+ unique int ruby_keyword_parameter: @ruby_keyword_parameter ref,
+ unique int value: @ruby_underscore_arg ref
+);
+
+ruby_keyword_parameter_def(
+ unique int id: @ruby_keyword_parameter,
+ int name: @ruby_token_identifier ref
+);
+
+@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol
+
+ruby_keyword_pattern_value(
+ unique int ruby_keyword_pattern: @ruby_keyword_pattern ref,
+ unique int value: @ruby_underscore_pattern_expr ref
+);
+
+ruby_keyword_pattern_def(
+ unique int id: @ruby_keyword_pattern,
+ int key__: @ruby_keyword_pattern_key_type ref
+);
+
+@ruby_lambda_body_type = @ruby_block | @ruby_do_block
+
+ruby_lambda_parameters(
+ unique int ruby_lambda: @ruby_lambda ref,
+ unique int parameters: @ruby_lambda_parameters ref
+);
+
+ruby_lambda_def(
+ unique int id: @ruby_lambda,
+ int body: @ruby_lambda_body_type ref
+);
+
+@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier
+
+#keyset[ruby_lambda_parameters, index]
+ruby_lambda_parameters_child(
+ int ruby_lambda_parameters: @ruby_lambda_parameters ref,
+ int index: int ref,
+ unique int child: @ruby_lambda_parameters_child_type ref
+);
+
+ruby_lambda_parameters_def(
+ unique int id: @ruby_lambda_parameters
+);
+
+@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs
+
+#keyset[ruby_left_assignment_list, index]
+ruby_left_assignment_list_child(
+ int ruby_left_assignment_list: @ruby_left_assignment_list ref,
+ int index: int ref,
+ unique int child: @ruby_left_assignment_list_child_type ref
+);
+
+ruby_left_assignment_list_def(
+ unique int id: @ruby_left_assignment_list
+);
+
+ruby_match_pattern_def(
+ unique int id: @ruby_match_pattern,
+ int pattern: @ruby_underscore_pattern_top_expr_body ref,
+ int value: @ruby_underscore_arg ref
+);
+
+@ruby_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg
+
+ruby_method_body(
+ unique int ruby_method: @ruby_method ref,
+ unique int body: @ruby_method_body_type ref
+);
+
+ruby_method_parameters(
+ unique int ruby_method: @ruby_method ref,
+ unique int parameters: @ruby_method_parameters ref
+);
+
+ruby_method_def(
+ unique int id: @ruby_method,
+ int name: @ruby_underscore_method_name ref
+);
+
+@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier
+
+#keyset[ruby_method_parameters, index]
+ruby_method_parameters_child(
+ int ruby_method_parameters: @ruby_method_parameters ref,
+ int index: int ref,
+ unique int child: @ruby_method_parameters_child_type ref
+);
+
+ruby_method_parameters_def(
+ unique int id: @ruby_method_parameters
+);
+
+ruby_module_body(
+ unique int ruby_module: @ruby_module ref,
+ unique int body: @ruby_body_statement ref
+);
+
+@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant
+
+ruby_module_def(
+ unique int id: @ruby_module,
+ int name: @ruby_module_name_type ref
+);
+
+ruby_next_child(
+ unique int ruby_next: @ruby_next ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_next_def(
+ unique int id: @ruby_next
+);
+
+case @ruby_operator_assignment.operator of
+ 0 = @ruby_operator_assignment_percentequal
+| 1 = @ruby_operator_assignment_ampersandampersandequal
+| 2 = @ruby_operator_assignment_ampersandequal
+| 3 = @ruby_operator_assignment_starstarequal
+| 4 = @ruby_operator_assignment_starequal
+| 5 = @ruby_operator_assignment_plusequal
+| 6 = @ruby_operator_assignment_minusequal
+| 7 = @ruby_operator_assignment_slashequal
+| 8 = @ruby_operator_assignment_langlelangleequal
+| 9 = @ruby_operator_assignment_ranglerangleequal
+| 10 = @ruby_operator_assignment_caretequal
+| 11 = @ruby_operator_assignment_pipeequal
+| 12 = @ruby_operator_assignment_pipepipeequal
+;
+
+
+@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression
+
+ruby_operator_assignment_def(
+ unique int id: @ruby_operator_assignment,
+ int left: @ruby_underscore_lhs ref,
+ int operator: int ref,
+ int right: @ruby_operator_assignment_right_type ref
+);
+
+ruby_optional_parameter_def(
+ unique int id: @ruby_optional_parameter,
+ int name: @ruby_token_identifier ref,
+ int value: @ruby_underscore_arg ref
+);
+
+@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg
+
+ruby_pair_value(
+ unique int ruby_pair: @ruby_pair ref,
+ unique int value: @ruby_underscore_arg ref
+);
+
+ruby_pair_def(
+ unique int id: @ruby_pair,
+ int key__: @ruby_pair_key_type ref
+);
+
+ruby_parenthesized_pattern_def(
+ unique int id: @ruby_parenthesized_pattern,
+ int child: @ruby_underscore_pattern_expr ref
+);
+
+@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_parenthesized_statements, index]
+ruby_parenthesized_statements_child(
+ int ruby_parenthesized_statements: @ruby_parenthesized_statements ref,
+ int index: int ref,
+ unique int child: @ruby_parenthesized_statements_child_type ref
+);
+
+ruby_parenthesized_statements_def(
+ unique int id: @ruby_parenthesized_statements
+);
+
+@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg
+
+ruby_pattern_def(
+ unique int id: @ruby_pattern,
+ int child: @ruby_pattern_child_type ref
+);
+
+@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement
+
+#keyset[ruby_program, index]
+ruby_program_child(
+ int ruby_program: @ruby_program ref,
+ int index: int ref,
+ unique int child: @ruby_program_child_type ref
+);
+
+ruby_program_def(
+ unique int id: @ruby_program
+);
+
+@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive
+
+ruby_range_begin(
+ unique int ruby_range: @ruby_range ref,
+ unique int begin: @ruby_range_begin_type ref
+);
+
+@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive
+
+ruby_range_end(
+ unique int ruby_range: @ruby_range ref,
+ unique int end: @ruby_range_end_type ref
+);
+
+case @ruby_range.operator of
+ 0 = @ruby_range_dotdot
+| 1 = @ruby_range_dotdotdot
+;
+
+
+ruby_range_def(
+ unique int id: @ruby_range,
+ int operator: int ref
+);
+
+@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer
+
+ruby_rational_def(
+ unique int id: @ruby_rational,
+ int child: @ruby_rational_child_type ref
+);
+
+ruby_redo_child(
+ unique int ruby_redo: @ruby_redo ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_redo_def(
+ unique int id: @ruby_redo
+);
+
+@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_regex, index]
+ruby_regex_child(
+ int ruby_regex: @ruby_regex ref,
+ int index: int ref,
+ unique int child: @ruby_regex_child_type ref
+);
+
+ruby_regex_def(
+ unique int id: @ruby_regex
+);
+
+ruby_rescue_body(
+ unique int ruby_rescue: @ruby_rescue ref,
+ unique int body: @ruby_then ref
+);
+
+ruby_rescue_exceptions(
+ unique int ruby_rescue: @ruby_rescue ref,
+ unique int exceptions: @ruby_exceptions ref
+);
+
+ruby_rescue_variable(
+ unique int ruby_rescue: @ruby_rescue ref,
+ unique int variable: @ruby_exception_variable ref
+);
+
+ruby_rescue_def(
+ unique int id: @ruby_rescue
+);
+
+@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement
+
+ruby_rescue_modifier_def(
+ unique int id: @ruby_rescue_modifier,
+ int body: @ruby_rescue_modifier_body_type ref,
+ int handler: @ruby_underscore_expression ref
+);
+
+ruby_rest_assignment_child(
+ unique int ruby_rest_assignment: @ruby_rest_assignment ref,
+ unique int child: @ruby_underscore_lhs ref
+);
+
+ruby_rest_assignment_def(
+ unique int id: @ruby_rest_assignment
+);
+
+ruby_retry_child(
+ unique int ruby_retry: @ruby_retry ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_retry_def(
+ unique int id: @ruby_retry
+);
+
+ruby_return_child(
+ unique int ruby_return: @ruby_return ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_return_def(
+ unique int id: @ruby_return
+);
+
+@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg
+
+#keyset[ruby_right_assignment_list, index]
+ruby_right_assignment_list_child(
+ int ruby_right_assignment_list: @ruby_right_assignment_list ref,
+ int index: int ref,
+ unique int child: @ruby_right_assignment_list_child_type ref
+);
+
+ruby_right_assignment_list_def(
+ unique int id: @ruby_right_assignment_list
+);
+
+@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary
+
+ruby_scope_resolution_scope(
+ unique int ruby_scope_resolution: @ruby_scope_resolution ref,
+ unique int scope: @ruby_scope_resolution_scope_type ref
+);
+
+ruby_scope_resolution_def(
+ unique int id: @ruby_scope_resolution,
+ int name: @ruby_token_constant ref
+);
+
+ruby_setter_def(
+ unique int id: @ruby_setter,
+ int name: @ruby_token_identifier ref
+);
+
+ruby_singleton_class_body(
+ unique int ruby_singleton_class: @ruby_singleton_class ref,
+ unique int body: @ruby_body_statement ref
+);
+
+ruby_singleton_class_def(
+ unique int id: @ruby_singleton_class,
+ int value: @ruby_underscore_arg ref
+);
+
+@ruby_singleton_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg
+
+ruby_singleton_method_body(
+ unique int ruby_singleton_method: @ruby_singleton_method ref,
+ unique int body: @ruby_singleton_method_body_type ref
+);
+
+@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable
+
+ruby_singleton_method_parameters(
+ unique int ruby_singleton_method: @ruby_singleton_method ref,
+ unique int parameters: @ruby_method_parameters ref
+);
+
+ruby_singleton_method_def(
+ unique int id: @ruby_singleton_method,
+ int name: @ruby_underscore_method_name ref,
+ int object: @ruby_singleton_method_object_type ref
+);
+
+ruby_splat_argument_child(
+ unique int ruby_splat_argument: @ruby_splat_argument ref,
+ unique int child: @ruby_underscore_arg ref
+);
+
+ruby_splat_argument_def(
+ unique int id: @ruby_splat_argument
+);
+
+ruby_splat_parameter_name(
+ unique int ruby_splat_parameter: @ruby_splat_parameter ref,
+ unique int name: @ruby_token_identifier ref
+);
+
+ruby_splat_parameter_def(
+ unique int id: @ruby_splat_parameter
+);
+
+@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_string__, index]
+ruby_string_child(
+ int ruby_string__: @ruby_string__ ref,
+ int index: int ref,
+ unique int child: @ruby_string_child_type ref
+);
+
+ruby_string_def(
+ unique int id: @ruby_string__
+);
+
+#keyset[ruby_string_array, index]
+ruby_string_array_child(
+ int ruby_string_array: @ruby_string_array ref,
+ int index: int ref,
+ unique int child: @ruby_bare_string ref
+);
+
+ruby_string_array_def(
+ unique int id: @ruby_string_array
+);
+
+@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_subshell, index]
+ruby_subshell_child(
+ int ruby_subshell: @ruby_subshell ref,
+ int index: int ref,
+ unique int child: @ruby_subshell_child_type ref
+);
+
+ruby_subshell_def(
+ unique int id: @ruby_subshell
+);
+
+ruby_superclass_def(
+ unique int id: @ruby_superclass,
+ int child: @ruby_underscore_expression ref
+);
+
+#keyset[ruby_symbol_array, index]
+ruby_symbol_array_child(
+ int ruby_symbol_array: @ruby_symbol_array ref,
+ int index: int ref,
+ unique int child: @ruby_bare_symbol ref
+);
+
+ruby_symbol_array_def(
+ unique int id: @ruby_symbol_array
+);
+
+ruby_test_pattern_def(
+ unique int id: @ruby_test_pattern,
+ int pattern: @ruby_underscore_pattern_top_expr_body ref,
+ int value: @ruby_underscore_arg ref
+);
+
+@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_then, index]
+ruby_then_child(
+ int ruby_then: @ruby_then ref,
+ int index: int ref,
+ unique int child: @ruby_then_child_type ref
+);
+
+ruby_then_def(
+ unique int id: @ruby_then
+);
+
+@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric
+
+case @ruby_unary.operator of
+ 0 = @ruby_unary_bang
+| 1 = @ruby_unary_plus
+| 2 = @ruby_unary_minus
+| 3 = @ruby_unary_definedquestion
+| 4 = @ruby_unary_not
+| 5 = @ruby_unary_tilde
+;
+
+
+ruby_unary_def(
+ unique int id: @ruby_unary,
+ int operand: @ruby_unary_operand_type ref,
+ int operator: int ref
+);
+
+#keyset[ruby_undef, index]
+ruby_undef_child(
+ int ruby_undef: @ruby_undef ref,
+ int index: int ref,
+ unique int child: @ruby_underscore_method_name ref
+);
+
+ruby_undef_def(
+ unique int id: @ruby_undef
+);
+
+@ruby_unless_alternative_type = @ruby_else | @ruby_elsif
+
+ruby_unless_alternative(
+ unique int ruby_unless: @ruby_unless ref,
+ unique int alternative: @ruby_unless_alternative_type ref
+);
+
+ruby_unless_consequence(
+ unique int ruby_unless: @ruby_unless ref,
+ unique int consequence: @ruby_then ref
+);
+
+ruby_unless_def(
+ unique int id: @ruby_unless,
+ int condition: @ruby_underscore_statement ref
+);
+
+ruby_unless_guard_def(
+ unique int id: @ruby_unless_guard,
+ int condition: @ruby_underscore_expression ref
+);
+
+ruby_unless_modifier_def(
+ unique int id: @ruby_unless_modifier,
+ int body: @ruby_underscore_statement ref,
+ int condition: @ruby_underscore_expression ref
+);
+
+ruby_until_def(
+ unique int id: @ruby_until,
+ int body: @ruby_do ref,
+ int condition: @ruby_underscore_statement ref
+);
+
+ruby_until_modifier_def(
+ unique int id: @ruby_until_modifier,
+ int body: @ruby_underscore_statement ref,
+ int condition: @ruby_underscore_expression ref
+);
+
+@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable
+
+ruby_variable_reference_pattern_def(
+ unique int id: @ruby_variable_reference_pattern,
+ int name: @ruby_variable_reference_pattern_name_type ref
+);
+
+ruby_when_body(
+ unique int ruby_when: @ruby_when ref,
+ unique int body: @ruby_then ref
+);
+
+#keyset[ruby_when, index]
+ruby_when_pattern(
+ int ruby_when: @ruby_when ref,
+ int index: int ref,
+ unique int pattern: @ruby_pattern ref
+);
+
+ruby_when_def(
+ unique int id: @ruby_when
+);
+
+ruby_while_def(
+ unique int id: @ruby_while,
+ int body: @ruby_do ref,
+ int condition: @ruby_underscore_statement ref
+);
+
+ruby_while_modifier_def(
+ unique int id: @ruby_while_modifier,
+ int body: @ruby_underscore_statement ref,
+ int condition: @ruby_underscore_expression ref
+);
+
+ruby_yield_child(
+ unique int ruby_yield: @ruby_yield ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_yield_def(
+ unique int id: @ruby_yield
+);
+
+ruby_tokeninfo(
+ unique int id: @ruby_token,
+ int kind: int ref,
+ string value: string ref
+);
+
+case @ruby_token.kind of
+ 0 = @ruby_reserved_word
+| 1 = @ruby_token_character
+| 2 = @ruby_token_class_variable
+| 3 = @ruby_token_comment
+| 4 = @ruby_token_constant
+| 5 = @ruby_token_empty_statement
+| 6 = @ruby_token_encoding
+| 7 = @ruby_token_escape_sequence
+| 8 = @ruby_token_false
+| 9 = @ruby_token_file
+| 10 = @ruby_token_float
+| 11 = @ruby_token_forward_argument
+| 12 = @ruby_token_forward_parameter
+| 13 = @ruby_token_global_variable
+| 14 = @ruby_token_hash_key_symbol
+| 15 = @ruby_token_hash_splat_nil
+| 16 = @ruby_token_heredoc_beginning
+| 17 = @ruby_token_heredoc_content
+| 18 = @ruby_token_heredoc_end
+| 19 = @ruby_token_identifier
+| 20 = @ruby_token_instance_variable
+| 21 = @ruby_token_integer
+| 22 = @ruby_token_line
+| 23 = @ruby_token_nil
+| 24 = @ruby_token_operator
+| 25 = @ruby_token_self
+| 26 = @ruby_token_simple_symbol
+| 27 = @ruby_token_string_content
+| 28 = @ruby_token_super
+| 29 = @ruby_token_true
+| 30 = @ruby_token_uninterpreted
+;
+
+
+@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_body | @ruby_block_parameter | @ruby_block_parameters | @ruby_body_statement | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_match_pattern | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_test_pattern | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield
+
+ruby_ast_node_location(
+ unique int node: @ruby_ast_node ref,
+ int loc: @location_default ref
+);
+
+#keyset[parent, parent_index]
+ruby_ast_node_parent(
+ unique int node: @ruby_ast_node ref,
+ int parent: @ruby_ast_node ref,
+ int parent_index: int ref
+);
+
+/*- Erb dbscheme -*/
+erb_comment_directive_child(
+ unique int erb_comment_directive: @erb_comment_directive ref,
+ unique int child: @erb_token_comment ref
+);
+
+erb_comment_directive_def(
+ unique int id: @erb_comment_directive
+);
+
+erb_directive_child(
+ unique int erb_directive: @erb_directive ref,
+ unique int child: @erb_token_code ref
+);
+
+erb_directive_def(
+ unique int id: @erb_directive
+);
+
+erb_graphql_directive_child(
+ unique int erb_graphql_directive: @erb_graphql_directive ref,
+ unique int child: @erb_token_code ref
+);
+
+erb_graphql_directive_def(
+ unique int id: @erb_graphql_directive
+);
+
+erb_output_directive_child(
+ unique int erb_output_directive: @erb_output_directive ref,
+ unique int child: @erb_token_code ref
+);
+
+erb_output_directive_def(
+ unique int id: @erb_output_directive
+);
+
+@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content
+
+#keyset[erb_template, index]
+erb_template_child(
+ int erb_template: @erb_template ref,
+ int index: int ref,
+ unique int child: @erb_template_child_type ref
+);
+
+erb_template_def(
+ unique int id: @erb_template
+);
+
+erb_tokeninfo(
+ unique int id: @erb_token,
+ int kind: int ref,
+ string value: string ref
+);
+
+case @erb_token.kind of
+ 0 = @erb_reserved_word
+| 1 = @erb_token_code
+| 2 = @erb_token_comment
+| 3 = @erb_token_content
+;
+
+
+@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token
+
+erb_ast_node_location(
+ unique int node: @erb_ast_node ref,
+ int loc: @location_default ref
+);
+
+#keyset[parent, parent_index]
+erb_ast_node_parent(
+ unique int node: @erb_ast_node ref,
+ int parent: @erb_ast_node ref,
+ int parent_index: int ref
+);
+
diff --git a/ruby/ql/lib/upgrades/dc51d416301df12df5b70fbc4338de6cc1f82bfd/ruby.dbscheme b/ruby/ql/lib/upgrades/dc51d416301df12df5b70fbc4338de6cc1f82bfd/ruby.dbscheme
new file mode 100644
index 000000000000..eae6926f5000
--- /dev/null
+++ b/ruby/ql/lib/upgrades/dc51d416301df12df5b70fbc4338de6cc1f82bfd/ruby.dbscheme
@@ -0,0 +1,1536 @@
+// CodeQL database schema for Ruby
+// Automatically generated from the tree-sitter grammar; do not edit
+
+/*- Files and folders -*/
+
+/**
+ * The location of an element.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_default(
+ unique int id: @location_default,
+ int file: @file ref,
+ int beginLine: int ref,
+ int beginColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+files(
+ unique int id: @file,
+ string name: string ref
+);
+
+folders(
+ unique int id: @folder,
+ string name: string ref
+);
+
+@container = @file | @folder
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref
+);
+
+/*- Empty location -*/
+
+empty_location(
+ int location: @location_default ref
+);
+
+/*- Source location prefix -*/
+
+/**
+ * The source location of the snapshot.
+ */
+sourceLocationPrefix(string prefix : string ref);
+
+/*- Diagnostic messages -*/
+
+diagnostics(
+ unique int id: @diagnostic,
+ int severity: int ref,
+ string error_tag: string ref,
+ string error_message: string ref,
+ string full_error_message: string ref,
+ int location: @location_default ref
+);
+
+/*- Diagnostic messages: severity -*/
+
+case @diagnostic.severity of
+ 10 = @diagnostic_debug
+| 20 = @diagnostic_info
+| 30 = @diagnostic_warning
+| 40 = @diagnostic_error
+;
+
+/*- YAML -*/
+
+#keyset[parent, idx]
+yaml (unique int id: @yaml_node,
+ int kind: int ref,
+ int parent: @yaml_node_parent ref,
+ int idx: int ref,
+ string tag: string ref,
+ string tostring: string ref);
+
+case @yaml_node.kind of
+ 0 = @yaml_scalar_node
+| 1 = @yaml_mapping_node
+| 2 = @yaml_sequence_node
+| 3 = @yaml_alias_node
+;
+
+@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node;
+
+@yaml_node_parent = @yaml_collection_node | @file;
+
+yaml_anchors (unique int node: @yaml_node ref,
+ string anchor: string ref);
+
+yaml_aliases (unique int alias: @yaml_alias_node ref,
+ string target: string ref);
+
+yaml_scalars (unique int scalar: @yaml_scalar_node ref,
+ int style: int ref,
+ string value: string ref);
+
+yaml_errors (unique int id: @yaml_error,
+ string message: string ref);
+
+yaml_locations(unique int locatable: @yaml_locatable ref,
+ int location: @location_default ref);
+
+@yaml_locatable = @yaml_node | @yaml_error;
+
+/*- Database metadata -*/
+databaseMetadata(
+ string metadataKey: string ref,
+ string value: string ref
+);
+
+overlayChangedFiles(
+ string path: string ref
+);
+
+/*- Ruby dbscheme -*/
+@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary
+
+@ruby_underscore_call_operator = @ruby_reserved_word
+
+@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_match_pattern | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_test_pattern | @ruby_unary | @ruby_underscore_arg | @ruby_yield
+
+@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable
+
+@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable
+
+@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable
+
+@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant
+
+@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic
+
+@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern
+
+@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric
+
+@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr
+
+@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield
+
+@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer
+
+@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier
+
+@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable
+
+ruby_alias_def(
+ unique int id: @ruby_alias,
+ int alias: @ruby_underscore_method_name ref,
+ int name: @ruby_underscore_method_name ref
+);
+
+#keyset[ruby_alternative_pattern, index]
+ruby_alternative_pattern_alternatives(
+ int ruby_alternative_pattern: @ruby_alternative_pattern ref,
+ int index: int ref,
+ unique int alternatives: @ruby_underscore_pattern_expr_basic ref
+);
+
+ruby_alternative_pattern_def(
+ unique int id: @ruby_alternative_pattern
+);
+
+@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression
+
+#keyset[ruby_argument_list, index]
+ruby_argument_list_child(
+ int ruby_argument_list: @ruby_argument_list ref,
+ int index: int ref,
+ unique int child: @ruby_argument_list_child_type ref
+);
+
+ruby_argument_list_def(
+ unique int id: @ruby_argument_list
+);
+
+@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression
+
+#keyset[ruby_array, index]
+ruby_array_child(
+ int ruby_array: @ruby_array ref,
+ int index: int ref,
+ unique int child: @ruby_array_child_type ref
+);
+
+ruby_array_def(
+ unique int id: @ruby_array
+);
+
+ruby_array_pattern_class(
+ unique int ruby_array_pattern: @ruby_array_pattern ref,
+ unique int class: @ruby_underscore_pattern_constant ref
+);
+
+@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr
+
+#keyset[ruby_array_pattern, index]
+ruby_array_pattern_child(
+ int ruby_array_pattern: @ruby_array_pattern ref,
+ int index: int ref,
+ unique int child: @ruby_array_pattern_child_type ref
+);
+
+ruby_array_pattern_def(
+ unique int id: @ruby_array_pattern
+);
+
+ruby_as_pattern_def(
+ unique int id: @ruby_as_pattern,
+ int name: @ruby_token_identifier ref,
+ int value: @ruby_underscore_pattern_expr ref
+);
+
+@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs
+
+@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression
+
+ruby_assignment_def(
+ unique int id: @ruby_assignment,
+ int left: @ruby_assignment_left_type ref,
+ int right: @ruby_assignment_right_type ref
+);
+
+@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_bare_string, index]
+ruby_bare_string_child(
+ int ruby_bare_string: @ruby_bare_string ref,
+ int index: int ref,
+ unique int child: @ruby_bare_string_child_type ref
+);
+
+ruby_bare_string_def(
+ unique int id: @ruby_bare_string
+);
+
+@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_bare_symbol, index]
+ruby_bare_symbol_child(
+ int ruby_bare_symbol: @ruby_bare_symbol ref,
+ int index: int ref,
+ unique int child: @ruby_bare_symbol_child_type ref
+);
+
+ruby_bare_symbol_def(
+ unique int id: @ruby_bare_symbol
+);
+
+@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_begin, index]
+ruby_begin_child(
+ int ruby_begin: @ruby_begin ref,
+ int index: int ref,
+ unique int child: @ruby_begin_child_type ref
+);
+
+ruby_begin_def(
+ unique int id: @ruby_begin
+);
+
+@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_begin_block, index]
+ruby_begin_block_child(
+ int ruby_begin_block: @ruby_begin_block ref,
+ int index: int ref,
+ unique int child: @ruby_begin_block_child_type ref
+);
+
+ruby_begin_block_def(
+ unique int id: @ruby_begin_block
+);
+
+@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric
+
+case @ruby_binary.operator of
+ 0 = @ruby_binary_bangequal
+| 1 = @ruby_binary_bangtilde
+| 2 = @ruby_binary_percent
+| 3 = @ruby_binary_ampersand
+| 4 = @ruby_binary_ampersandampersand
+| 5 = @ruby_binary_star
+| 6 = @ruby_binary_starstar
+| 7 = @ruby_binary_plus
+| 8 = @ruby_binary_minus
+| 9 = @ruby_binary_slash
+| 10 = @ruby_binary_langle
+| 11 = @ruby_binary_langlelangle
+| 12 = @ruby_binary_langleequal
+| 13 = @ruby_binary_langleequalrangle
+| 14 = @ruby_binary_equalequal
+| 15 = @ruby_binary_equalequalequal
+| 16 = @ruby_binary_equaltilde
+| 17 = @ruby_binary_rangle
+| 18 = @ruby_binary_rangleequal
+| 19 = @ruby_binary_ranglerangle
+| 20 = @ruby_binary_caret
+| 21 = @ruby_binary_and
+| 22 = @ruby_binary_or
+| 23 = @ruby_binary_pipe
+| 24 = @ruby_binary_pipepipe
+;
+
+
+ruby_binary_def(
+ unique int id: @ruby_binary,
+ int left: @ruby_binary_left_type ref,
+ int operator: int ref,
+ int right: @ruby_underscore_expression ref
+);
+
+ruby_block_body(
+ unique int ruby_block: @ruby_block ref,
+ unique int body: @ruby_block_body ref
+);
+
+ruby_block_parameters(
+ unique int ruby_block: @ruby_block ref,
+ unique int parameters: @ruby_block_parameters ref
+);
+
+ruby_block_def(
+ unique int id: @ruby_block
+);
+
+ruby_block_argument_child(
+ unique int ruby_block_argument: @ruby_block_argument ref,
+ unique int child: @ruby_underscore_arg ref
+);
+
+ruby_block_argument_def(
+ unique int id: @ruby_block_argument
+);
+
+@ruby_block_body_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_block_body, index]
+ruby_block_body_child(
+ int ruby_block_body: @ruby_block_body ref,
+ int index: int ref,
+ unique int child: @ruby_block_body_child_type ref
+);
+
+ruby_block_body_def(
+ unique int id: @ruby_block_body
+);
+
+ruby_block_parameter_name(
+ unique int ruby_block_parameter: @ruby_block_parameter ref,
+ unique int name: @ruby_token_identifier ref
+);
+
+ruby_block_parameter_def(
+ unique int id: @ruby_block_parameter
+);
+
+#keyset[ruby_block_parameters, index]
+ruby_block_parameters_locals(
+ int ruby_block_parameters: @ruby_block_parameters ref,
+ int index: int ref,
+ unique int locals: @ruby_token_identifier ref
+);
+
+@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier
+
+#keyset[ruby_block_parameters, index]
+ruby_block_parameters_child(
+ int ruby_block_parameters: @ruby_block_parameters ref,
+ int index: int ref,
+ unique int child: @ruby_block_parameters_child_type ref
+);
+
+ruby_block_parameters_def(
+ unique int id: @ruby_block_parameters
+);
+
+@ruby_body_statement_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_body_statement, index]
+ruby_body_statement_child(
+ int ruby_body_statement: @ruby_body_statement ref,
+ int index: int ref,
+ unique int child: @ruby_body_statement_child_type ref
+);
+
+ruby_body_statement_def(
+ unique int id: @ruby_body_statement
+);
+
+ruby_break_child(
+ unique int ruby_break: @ruby_break ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_break_def(
+ unique int id: @ruby_break
+);
+
+ruby_call_arguments(
+ unique int ruby_call: @ruby_call ref,
+ unique int arguments: @ruby_argument_list ref
+);
+
+@ruby_call_block_type = @ruby_block | @ruby_do_block
+
+ruby_call_block(
+ unique int ruby_call: @ruby_call ref,
+ unique int block: @ruby_call_block_type ref
+);
+
+@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable
+
+ruby_call_method(
+ unique int ruby_call: @ruby_call ref,
+ unique int method: @ruby_call_method_type ref
+);
+
+ruby_call_operator(
+ unique int ruby_call: @ruby_call ref,
+ unique int operator: @ruby_underscore_call_operator ref
+);
+
+ruby_call_receiver(
+ unique int ruby_call: @ruby_call ref,
+ unique int receiver: @ruby_underscore_primary ref
+);
+
+ruby_call_def(
+ unique int id: @ruby_call
+);
+
+ruby_case_value(
+ unique int ruby_case__: @ruby_case__ ref,
+ unique int value: @ruby_underscore_statement ref
+);
+
+@ruby_case_child_type = @ruby_else | @ruby_when
+
+#keyset[ruby_case__, index]
+ruby_case_child(
+ int ruby_case__: @ruby_case__ ref,
+ int index: int ref,
+ unique int child: @ruby_case_child_type ref
+);
+
+ruby_case_def(
+ unique int id: @ruby_case__
+);
+
+#keyset[ruby_case_match, index]
+ruby_case_match_clauses(
+ int ruby_case_match: @ruby_case_match ref,
+ int index: int ref,
+ unique int clauses: @ruby_in_clause ref
+);
+
+ruby_case_match_else(
+ unique int ruby_case_match: @ruby_case_match ref,
+ unique int else: @ruby_else ref
+);
+
+ruby_case_match_def(
+ unique int id: @ruby_case_match,
+ int value: @ruby_underscore_statement ref
+);
+
+#keyset[ruby_chained_string, index]
+ruby_chained_string_child(
+ int ruby_chained_string: @ruby_chained_string ref,
+ int index: int ref,
+ unique int child: @ruby_string__ ref
+);
+
+ruby_chained_string_def(
+ unique int id: @ruby_chained_string
+);
+
+ruby_class_body(
+ unique int ruby_class: @ruby_class ref,
+ unique int body: @ruby_body_statement ref
+);
+
+@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant
+
+ruby_class_superclass(
+ unique int ruby_class: @ruby_class ref,
+ unique int superclass: @ruby_superclass ref
+);
+
+ruby_class_def(
+ unique int id: @ruby_class,
+ int name: @ruby_class_name_type ref
+);
+
+@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer
+
+ruby_complex_def(
+ unique int id: @ruby_complex,
+ int child: @ruby_complex_child_type ref
+);
+
+ruby_conditional_def(
+ unique int id: @ruby_conditional,
+ int alternative: @ruby_underscore_arg ref,
+ int condition: @ruby_underscore_arg ref,
+ int consequence: @ruby_underscore_arg ref
+);
+
+@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_delimited_symbol, index]
+ruby_delimited_symbol_child(
+ int ruby_delimited_symbol: @ruby_delimited_symbol ref,
+ int index: int ref,
+ unique int child: @ruby_delimited_symbol_child_type ref
+);
+
+ruby_delimited_symbol_def(
+ unique int id: @ruby_delimited_symbol
+);
+
+@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs
+
+#keyset[ruby_destructured_left_assignment, index]
+ruby_destructured_left_assignment_child(
+ int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref,
+ int index: int ref,
+ unique int child: @ruby_destructured_left_assignment_child_type ref
+);
+
+ruby_destructured_left_assignment_def(
+ unique int id: @ruby_destructured_left_assignment
+);
+
+@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier
+
+#keyset[ruby_destructured_parameter, index]
+ruby_destructured_parameter_child(
+ int ruby_destructured_parameter: @ruby_destructured_parameter ref,
+ int index: int ref,
+ unique int child: @ruby_destructured_parameter_child_type ref
+);
+
+ruby_destructured_parameter_def(
+ unique int id: @ruby_destructured_parameter
+);
+
+@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_do, index]
+ruby_do_child(
+ int ruby_do: @ruby_do ref,
+ int index: int ref,
+ unique int child: @ruby_do_child_type ref
+);
+
+ruby_do_def(
+ unique int id: @ruby_do
+);
+
+ruby_do_block_body(
+ unique int ruby_do_block: @ruby_do_block ref,
+ unique int body: @ruby_body_statement ref
+);
+
+ruby_do_block_parameters(
+ unique int ruby_do_block: @ruby_do_block ref,
+ unique int parameters: @ruby_block_parameters ref
+);
+
+ruby_do_block_def(
+ unique int id: @ruby_do_block
+);
+
+@ruby_element_reference_block_type = @ruby_block | @ruby_do_block
+
+ruby_element_reference_block(
+ unique int ruby_element_reference: @ruby_element_reference ref,
+ unique int block: @ruby_element_reference_block_type ref
+);
+
+@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression
+
+#keyset[ruby_element_reference, index]
+ruby_element_reference_child(
+ int ruby_element_reference: @ruby_element_reference ref,
+ int index: int ref,
+ unique int child: @ruby_element_reference_child_type ref
+);
+
+ruby_element_reference_def(
+ unique int id: @ruby_element_reference,
+ int object: @ruby_underscore_primary ref
+);
+
+@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_else, index]
+ruby_else_child(
+ int ruby_else: @ruby_else ref,
+ int index: int ref,
+ unique int child: @ruby_else_child_type ref
+);
+
+ruby_else_def(
+ unique int id: @ruby_else
+);
+
+@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif
+
+ruby_elsif_alternative(
+ unique int ruby_elsif: @ruby_elsif ref,
+ unique int alternative: @ruby_elsif_alternative_type ref
+);
+
+ruby_elsif_consequence(
+ unique int ruby_elsif: @ruby_elsif ref,
+ unique int consequence: @ruby_then ref
+);
+
+ruby_elsif_def(
+ unique int id: @ruby_elsif,
+ int condition: @ruby_underscore_statement ref
+);
+
+@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_end_block, index]
+ruby_end_block_child(
+ int ruby_end_block: @ruby_end_block ref,
+ int index: int ref,
+ unique int child: @ruby_end_block_child_type ref
+);
+
+ruby_end_block_def(
+ unique int id: @ruby_end_block
+);
+
+@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_ensure, index]
+ruby_ensure_child(
+ int ruby_ensure: @ruby_ensure ref,
+ int index: int ref,
+ unique int child: @ruby_ensure_child_type ref
+);
+
+ruby_ensure_def(
+ unique int id: @ruby_ensure
+);
+
+ruby_exception_variable_def(
+ unique int id: @ruby_exception_variable,
+ int child: @ruby_underscore_lhs ref
+);
+
+@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg
+
+#keyset[ruby_exceptions, index]
+ruby_exceptions_child(
+ int ruby_exceptions: @ruby_exceptions ref,
+ int index: int ref,
+ unique int child: @ruby_exceptions_child_type ref
+);
+
+ruby_exceptions_def(
+ unique int id: @ruby_exceptions
+);
+
+ruby_expression_reference_pattern_def(
+ unique int id: @ruby_expression_reference_pattern,
+ int value: @ruby_underscore_expression ref
+);
+
+ruby_find_pattern_class(
+ unique int ruby_find_pattern: @ruby_find_pattern ref,
+ unique int class: @ruby_underscore_pattern_constant ref
+);
+
+@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr
+
+#keyset[ruby_find_pattern, index]
+ruby_find_pattern_child(
+ int ruby_find_pattern: @ruby_find_pattern ref,
+ int index: int ref,
+ unique int child: @ruby_find_pattern_child_type ref
+);
+
+ruby_find_pattern_def(
+ unique int id: @ruby_find_pattern
+);
+
+@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs
+
+ruby_for_def(
+ unique int id: @ruby_for,
+ int body: @ruby_do ref,
+ int pattern: @ruby_for_pattern_type ref,
+ int value: @ruby_in ref
+);
+
+@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair
+
+#keyset[ruby_hash, index]
+ruby_hash_child(
+ int ruby_hash: @ruby_hash ref,
+ int index: int ref,
+ unique int child: @ruby_hash_child_type ref
+);
+
+ruby_hash_def(
+ unique int id: @ruby_hash
+);
+
+ruby_hash_pattern_class(
+ unique int ruby_hash_pattern: @ruby_hash_pattern ref,
+ unique int class: @ruby_underscore_pattern_constant ref
+);
+
+@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil
+
+#keyset[ruby_hash_pattern, index]
+ruby_hash_pattern_child(
+ int ruby_hash_pattern: @ruby_hash_pattern ref,
+ int index: int ref,
+ unique int child: @ruby_hash_pattern_child_type ref
+);
+
+ruby_hash_pattern_def(
+ unique int id: @ruby_hash_pattern
+);
+
+ruby_hash_splat_argument_child(
+ unique int ruby_hash_splat_argument: @ruby_hash_splat_argument ref,
+ unique int child: @ruby_underscore_arg ref
+);
+
+ruby_hash_splat_argument_def(
+ unique int id: @ruby_hash_splat_argument
+);
+
+ruby_hash_splat_parameter_name(
+ unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref,
+ unique int name: @ruby_token_identifier ref
+);
+
+ruby_hash_splat_parameter_def(
+ unique int id: @ruby_hash_splat_parameter
+);
+
+@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end
+
+#keyset[ruby_heredoc_body, index]
+ruby_heredoc_body_child(
+ int ruby_heredoc_body: @ruby_heredoc_body ref,
+ int index: int ref,
+ unique int child: @ruby_heredoc_body_child_type ref
+);
+
+ruby_heredoc_body_def(
+ unique int id: @ruby_heredoc_body
+);
+
+@ruby_if_alternative_type = @ruby_else | @ruby_elsif
+
+ruby_if_alternative(
+ unique int ruby_if: @ruby_if ref,
+ unique int alternative: @ruby_if_alternative_type ref
+);
+
+ruby_if_consequence(
+ unique int ruby_if: @ruby_if ref,
+ unique int consequence: @ruby_then ref
+);
+
+ruby_if_def(
+ unique int id: @ruby_if,
+ int condition: @ruby_underscore_statement ref
+);
+
+ruby_if_guard_def(
+ unique int id: @ruby_if_guard,
+ int condition: @ruby_underscore_expression ref
+);
+
+ruby_if_modifier_def(
+ unique int id: @ruby_if_modifier,
+ int body: @ruby_underscore_statement ref,
+ int condition: @ruby_underscore_expression ref
+);
+
+ruby_in_def(
+ unique int id: @ruby_in,
+ int child: @ruby_underscore_arg ref
+);
+
+ruby_in_clause_body(
+ unique int ruby_in_clause: @ruby_in_clause ref,
+ unique int body: @ruby_then ref
+);
+
+@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard
+
+ruby_in_clause_guard(
+ unique int ruby_in_clause: @ruby_in_clause ref,
+ unique int guard: @ruby_in_clause_guard_type ref
+);
+
+ruby_in_clause_def(
+ unique int id: @ruby_in_clause,
+ int pattern: @ruby_underscore_pattern_top_expr_body ref
+);
+
+@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_nonlocal_variable | @ruby_underscore_statement
+
+#keyset[ruby_interpolation, index]
+ruby_interpolation_child(
+ int ruby_interpolation: @ruby_interpolation ref,
+ int index: int ref,
+ unique int child: @ruby_interpolation_child_type ref
+);
+
+ruby_interpolation_def(
+ unique int id: @ruby_interpolation
+);
+
+ruby_keyword_parameter_value(
+ unique int ruby_keyword_parameter: @ruby_keyword_parameter ref,
+ unique int value: @ruby_underscore_arg ref
+);
+
+ruby_keyword_parameter_def(
+ unique int id: @ruby_keyword_parameter,
+ int name: @ruby_token_identifier ref
+);
+
+@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol
+
+ruby_keyword_pattern_value(
+ unique int ruby_keyword_pattern: @ruby_keyword_pattern ref,
+ unique int value: @ruby_underscore_pattern_expr ref
+);
+
+ruby_keyword_pattern_def(
+ unique int id: @ruby_keyword_pattern,
+ int key__: @ruby_keyword_pattern_key_type ref
+);
+
+@ruby_lambda_body_type = @ruby_block | @ruby_do_block
+
+ruby_lambda_parameters(
+ unique int ruby_lambda: @ruby_lambda ref,
+ unique int parameters: @ruby_lambda_parameters ref
+);
+
+ruby_lambda_def(
+ unique int id: @ruby_lambda,
+ int body: @ruby_lambda_body_type ref
+);
+
+@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier
+
+#keyset[ruby_lambda_parameters, index]
+ruby_lambda_parameters_child(
+ int ruby_lambda_parameters: @ruby_lambda_parameters ref,
+ int index: int ref,
+ unique int child: @ruby_lambda_parameters_child_type ref
+);
+
+ruby_lambda_parameters_def(
+ unique int id: @ruby_lambda_parameters
+);
+
+@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs
+
+#keyset[ruby_left_assignment_list, index]
+ruby_left_assignment_list_child(
+ int ruby_left_assignment_list: @ruby_left_assignment_list ref,
+ int index: int ref,
+ unique int child: @ruby_left_assignment_list_child_type ref
+);
+
+ruby_left_assignment_list_def(
+ unique int id: @ruby_left_assignment_list
+);
+
+ruby_match_pattern_def(
+ unique int id: @ruby_match_pattern,
+ int pattern: @ruby_underscore_pattern_top_expr_body ref,
+ int value: @ruby_underscore_arg ref
+);
+
+@ruby_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg
+
+ruby_method_body(
+ unique int ruby_method: @ruby_method ref,
+ unique int body: @ruby_method_body_type ref
+);
+
+ruby_method_parameters(
+ unique int ruby_method: @ruby_method ref,
+ unique int parameters: @ruby_method_parameters ref
+);
+
+ruby_method_def(
+ unique int id: @ruby_method,
+ int name: @ruby_underscore_method_name ref
+);
+
+@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier
+
+#keyset[ruby_method_parameters, index]
+ruby_method_parameters_child(
+ int ruby_method_parameters: @ruby_method_parameters ref,
+ int index: int ref,
+ unique int child: @ruby_method_parameters_child_type ref
+);
+
+ruby_method_parameters_def(
+ unique int id: @ruby_method_parameters
+);
+
+ruby_module_body(
+ unique int ruby_module: @ruby_module ref,
+ unique int body: @ruby_body_statement ref
+);
+
+@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant
+
+ruby_module_def(
+ unique int id: @ruby_module,
+ int name: @ruby_module_name_type ref
+);
+
+ruby_next_child(
+ unique int ruby_next: @ruby_next ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_next_def(
+ unique int id: @ruby_next
+);
+
+case @ruby_operator_assignment.operator of
+ 0 = @ruby_operator_assignment_percentequal
+| 1 = @ruby_operator_assignment_ampersandampersandequal
+| 2 = @ruby_operator_assignment_ampersandequal
+| 3 = @ruby_operator_assignment_starstarequal
+| 4 = @ruby_operator_assignment_starequal
+| 5 = @ruby_operator_assignment_plusequal
+| 6 = @ruby_operator_assignment_minusequal
+| 7 = @ruby_operator_assignment_slashequal
+| 8 = @ruby_operator_assignment_langlelangleequal
+| 9 = @ruby_operator_assignment_ranglerangleequal
+| 10 = @ruby_operator_assignment_caretequal
+| 11 = @ruby_operator_assignment_pipeequal
+| 12 = @ruby_operator_assignment_pipepipeequal
+;
+
+
+@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression
+
+ruby_operator_assignment_def(
+ unique int id: @ruby_operator_assignment,
+ int left: @ruby_underscore_lhs ref,
+ int operator: int ref,
+ int right: @ruby_operator_assignment_right_type ref
+);
+
+ruby_optional_parameter_def(
+ unique int id: @ruby_optional_parameter,
+ int name: @ruby_token_identifier ref,
+ int value: @ruby_underscore_arg ref
+);
+
+@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg
+
+ruby_pair_value(
+ unique int ruby_pair: @ruby_pair ref,
+ unique int value: @ruby_underscore_arg ref
+);
+
+ruby_pair_def(
+ unique int id: @ruby_pair,
+ int key__: @ruby_pair_key_type ref
+);
+
+ruby_parenthesized_pattern_def(
+ unique int id: @ruby_parenthesized_pattern,
+ int child: @ruby_underscore_pattern_expr ref
+);
+
+@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_parenthesized_statements, index]
+ruby_parenthesized_statements_child(
+ int ruby_parenthesized_statements: @ruby_parenthesized_statements ref,
+ int index: int ref,
+ unique int child: @ruby_parenthesized_statements_child_type ref
+);
+
+ruby_parenthesized_statements_def(
+ unique int id: @ruby_parenthesized_statements
+);
+
+@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg
+
+ruby_pattern_def(
+ unique int id: @ruby_pattern,
+ int child: @ruby_pattern_child_type ref
+);
+
+@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement
+
+#keyset[ruby_program, index]
+ruby_program_child(
+ int ruby_program: @ruby_program ref,
+ int index: int ref,
+ unique int child: @ruby_program_child_type ref
+);
+
+ruby_program_def(
+ unique int id: @ruby_program
+);
+
+@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive
+
+ruby_range_begin(
+ unique int ruby_range: @ruby_range ref,
+ unique int begin: @ruby_range_begin_type ref
+);
+
+@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive
+
+ruby_range_end(
+ unique int ruby_range: @ruby_range ref,
+ unique int end: @ruby_range_end_type ref
+);
+
+case @ruby_range.operator of
+ 0 = @ruby_range_dotdot
+| 1 = @ruby_range_dotdotdot
+;
+
+
+ruby_range_def(
+ unique int id: @ruby_range,
+ int operator: int ref
+);
+
+@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer
+
+ruby_rational_def(
+ unique int id: @ruby_rational,
+ int child: @ruby_rational_child_type ref
+);
+
+ruby_redo_child(
+ unique int ruby_redo: @ruby_redo ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_redo_def(
+ unique int id: @ruby_redo
+);
+
+@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_regex, index]
+ruby_regex_child(
+ int ruby_regex: @ruby_regex ref,
+ int index: int ref,
+ unique int child: @ruby_regex_child_type ref
+);
+
+ruby_regex_def(
+ unique int id: @ruby_regex
+);
+
+ruby_rescue_body(
+ unique int ruby_rescue: @ruby_rescue ref,
+ unique int body: @ruby_then ref
+);
+
+ruby_rescue_exceptions(
+ unique int ruby_rescue: @ruby_rescue ref,
+ unique int exceptions: @ruby_exceptions ref
+);
+
+ruby_rescue_variable(
+ unique int ruby_rescue: @ruby_rescue ref,
+ unique int variable: @ruby_exception_variable ref
+);
+
+ruby_rescue_def(
+ unique int id: @ruby_rescue
+);
+
+@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement
+
+ruby_rescue_modifier_def(
+ unique int id: @ruby_rescue_modifier,
+ int body: @ruby_rescue_modifier_body_type ref,
+ int handler: @ruby_underscore_expression ref
+);
+
+ruby_rest_assignment_child(
+ unique int ruby_rest_assignment: @ruby_rest_assignment ref,
+ unique int child: @ruby_underscore_lhs ref
+);
+
+ruby_rest_assignment_def(
+ unique int id: @ruby_rest_assignment
+);
+
+ruby_retry_child(
+ unique int ruby_retry: @ruby_retry ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_retry_def(
+ unique int id: @ruby_retry
+);
+
+ruby_return_child(
+ unique int ruby_return: @ruby_return ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_return_def(
+ unique int id: @ruby_return
+);
+
+@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg
+
+#keyset[ruby_right_assignment_list, index]
+ruby_right_assignment_list_child(
+ int ruby_right_assignment_list: @ruby_right_assignment_list ref,
+ int index: int ref,
+ unique int child: @ruby_right_assignment_list_child_type ref
+);
+
+ruby_right_assignment_list_def(
+ unique int id: @ruby_right_assignment_list
+);
+
+@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary
+
+ruby_scope_resolution_scope(
+ unique int ruby_scope_resolution: @ruby_scope_resolution ref,
+ unique int scope: @ruby_scope_resolution_scope_type ref
+);
+
+ruby_scope_resolution_def(
+ unique int id: @ruby_scope_resolution,
+ int name: @ruby_token_constant ref
+);
+
+ruby_setter_def(
+ unique int id: @ruby_setter,
+ int name: @ruby_token_identifier ref
+);
+
+ruby_singleton_class_body(
+ unique int ruby_singleton_class: @ruby_singleton_class ref,
+ unique int body: @ruby_body_statement ref
+);
+
+ruby_singleton_class_def(
+ unique int id: @ruby_singleton_class,
+ int value: @ruby_underscore_arg ref
+);
+
+@ruby_singleton_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg
+
+ruby_singleton_method_body(
+ unique int ruby_singleton_method: @ruby_singleton_method ref,
+ unique int body: @ruby_singleton_method_body_type ref
+);
+
+@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable
+
+ruby_singleton_method_parameters(
+ unique int ruby_singleton_method: @ruby_singleton_method ref,
+ unique int parameters: @ruby_method_parameters ref
+);
+
+ruby_singleton_method_def(
+ unique int id: @ruby_singleton_method,
+ int name: @ruby_underscore_method_name ref,
+ int object: @ruby_singleton_method_object_type ref
+);
+
+ruby_splat_argument_child(
+ unique int ruby_splat_argument: @ruby_splat_argument ref,
+ unique int child: @ruby_underscore_arg ref
+);
+
+ruby_splat_argument_def(
+ unique int id: @ruby_splat_argument
+);
+
+ruby_splat_parameter_name(
+ unique int ruby_splat_parameter: @ruby_splat_parameter ref,
+ unique int name: @ruby_token_identifier ref
+);
+
+ruby_splat_parameter_def(
+ unique int id: @ruby_splat_parameter
+);
+
+@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_string__, index]
+ruby_string_child(
+ int ruby_string__: @ruby_string__ ref,
+ int index: int ref,
+ unique int child: @ruby_string_child_type ref
+);
+
+ruby_string_def(
+ unique int id: @ruby_string__
+);
+
+#keyset[ruby_string_array, index]
+ruby_string_array_child(
+ int ruby_string_array: @ruby_string_array ref,
+ int index: int ref,
+ unique int child: @ruby_bare_string ref
+);
+
+ruby_string_array_def(
+ unique int id: @ruby_string_array
+);
+
+@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content
+
+#keyset[ruby_subshell, index]
+ruby_subshell_child(
+ int ruby_subshell: @ruby_subshell ref,
+ int index: int ref,
+ unique int child: @ruby_subshell_child_type ref
+);
+
+ruby_subshell_def(
+ unique int id: @ruby_subshell
+);
+
+ruby_superclass_def(
+ unique int id: @ruby_superclass,
+ int child: @ruby_underscore_expression ref
+);
+
+#keyset[ruby_symbol_array, index]
+ruby_symbol_array_child(
+ int ruby_symbol_array: @ruby_symbol_array ref,
+ int index: int ref,
+ unique int child: @ruby_bare_symbol ref
+);
+
+ruby_symbol_array_def(
+ unique int id: @ruby_symbol_array
+);
+
+ruby_test_pattern_def(
+ unique int id: @ruby_test_pattern,
+ int pattern: @ruby_underscore_pattern_top_expr_body ref,
+ int value: @ruby_underscore_arg ref
+);
+
+@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement
+
+#keyset[ruby_then, index]
+ruby_then_child(
+ int ruby_then: @ruby_then ref,
+ int index: int ref,
+ unique int child: @ruby_then_child_type ref
+);
+
+ruby_then_def(
+ unique int id: @ruby_then
+);
+
+@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric
+
+case @ruby_unary.operator of
+ 0 = @ruby_unary_bang
+| 1 = @ruby_unary_plus
+| 2 = @ruby_unary_minus
+| 3 = @ruby_unary_definedquestion
+| 4 = @ruby_unary_not
+| 5 = @ruby_unary_tilde
+;
+
+
+ruby_unary_def(
+ unique int id: @ruby_unary,
+ int operand: @ruby_unary_operand_type ref,
+ int operator: int ref
+);
+
+#keyset[ruby_undef, index]
+ruby_undef_child(
+ int ruby_undef: @ruby_undef ref,
+ int index: int ref,
+ unique int child: @ruby_underscore_method_name ref
+);
+
+ruby_undef_def(
+ unique int id: @ruby_undef
+);
+
+@ruby_unless_alternative_type = @ruby_else | @ruby_elsif
+
+ruby_unless_alternative(
+ unique int ruby_unless: @ruby_unless ref,
+ unique int alternative: @ruby_unless_alternative_type ref
+);
+
+ruby_unless_consequence(
+ unique int ruby_unless: @ruby_unless ref,
+ unique int consequence: @ruby_then ref
+);
+
+ruby_unless_def(
+ unique int id: @ruby_unless,
+ int condition: @ruby_underscore_statement ref
+);
+
+ruby_unless_guard_def(
+ unique int id: @ruby_unless_guard,
+ int condition: @ruby_underscore_expression ref
+);
+
+ruby_unless_modifier_def(
+ unique int id: @ruby_unless_modifier,
+ int body: @ruby_underscore_statement ref,
+ int condition: @ruby_underscore_expression ref
+);
+
+ruby_until_def(
+ unique int id: @ruby_until,
+ int body: @ruby_do ref,
+ int condition: @ruby_underscore_statement ref
+);
+
+ruby_until_modifier_def(
+ unique int id: @ruby_until_modifier,
+ int body: @ruby_underscore_statement ref,
+ int condition: @ruby_underscore_expression ref
+);
+
+@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable
+
+ruby_variable_reference_pattern_def(
+ unique int id: @ruby_variable_reference_pattern,
+ int name: @ruby_variable_reference_pattern_name_type ref
+);
+
+ruby_when_body(
+ unique int ruby_when: @ruby_when ref,
+ unique int body: @ruby_then ref
+);
+
+#keyset[ruby_when, index]
+ruby_when_pattern(
+ int ruby_when: @ruby_when ref,
+ int index: int ref,
+ unique int pattern: @ruby_pattern ref
+);
+
+ruby_when_def(
+ unique int id: @ruby_when
+);
+
+ruby_while_def(
+ unique int id: @ruby_while,
+ int body: @ruby_do ref,
+ int condition: @ruby_underscore_statement ref
+);
+
+ruby_while_modifier_def(
+ unique int id: @ruby_while_modifier,
+ int body: @ruby_underscore_statement ref,
+ int condition: @ruby_underscore_expression ref
+);
+
+ruby_yield_child(
+ unique int ruby_yield: @ruby_yield ref,
+ unique int child: @ruby_argument_list ref
+);
+
+ruby_yield_def(
+ unique int id: @ruby_yield
+);
+
+ruby_tokeninfo(
+ unique int id: @ruby_token,
+ int kind: int ref,
+ string value: string ref
+);
+
+case @ruby_token.kind of
+ 0 = @ruby_reserved_word
+| 1 = @ruby_token_character
+| 2 = @ruby_token_class_variable
+| 3 = @ruby_token_comment
+| 4 = @ruby_token_constant
+| 5 = @ruby_token_empty_statement
+| 6 = @ruby_token_encoding
+| 7 = @ruby_token_escape_sequence
+| 8 = @ruby_token_false
+| 9 = @ruby_token_file
+| 10 = @ruby_token_float
+| 11 = @ruby_token_forward_argument
+| 12 = @ruby_token_forward_parameter
+| 13 = @ruby_token_global_variable
+| 14 = @ruby_token_hash_key_symbol
+| 15 = @ruby_token_hash_splat_nil
+| 16 = @ruby_token_heredoc_beginning
+| 17 = @ruby_token_heredoc_content
+| 18 = @ruby_token_heredoc_end
+| 19 = @ruby_token_identifier
+| 20 = @ruby_token_instance_variable
+| 21 = @ruby_token_integer
+| 22 = @ruby_token_line
+| 23 = @ruby_token_nil
+| 24 = @ruby_token_operator
+| 25 = @ruby_token_self
+| 26 = @ruby_token_simple_symbol
+| 27 = @ruby_token_string_content
+| 28 = @ruby_token_super
+| 29 = @ruby_token_true
+| 30 = @ruby_token_uninterpreted
+;
+
+
+@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_body | @ruby_block_parameter | @ruby_block_parameters | @ruby_body_statement | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_match_pattern | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_test_pattern | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield
+
+ruby_ast_node_location(
+ unique int node: @ruby_ast_node ref,
+ int loc: @location_default ref
+);
+
+#keyset[parent, parent_index]
+ruby_ast_node_parent(
+ unique int node: @ruby_ast_node ref,
+ int parent: @ruby_ast_node ref,
+ int parent_index: int ref
+);
+
+/*- Erb dbscheme -*/
+erb_comment_directive_child(
+ unique int erb_comment_directive: @erb_comment_directive ref,
+ unique int child: @erb_token_comment ref
+);
+
+erb_comment_directive_def(
+ unique int id: @erb_comment_directive
+);
+
+erb_directive_child(
+ unique int erb_directive: @erb_directive ref,
+ unique int child: @erb_token_code ref
+);
+
+erb_directive_def(
+ unique int id: @erb_directive
+);
+
+erb_graphql_directive_child(
+ unique int erb_graphql_directive: @erb_graphql_directive ref,
+ unique int child: @erb_token_code ref
+);
+
+erb_graphql_directive_def(
+ unique int id: @erb_graphql_directive
+);
+
+erb_output_directive_child(
+ unique int erb_output_directive: @erb_output_directive ref,
+ unique int child: @erb_token_code ref
+);
+
+erb_output_directive_def(
+ unique int id: @erb_output_directive
+);
+
+@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content
+
+#keyset[erb_template, index]
+erb_template_child(
+ int erb_template: @erb_template ref,
+ int index: int ref,
+ unique int child: @erb_template_child_type ref
+);
+
+erb_template_def(
+ unique int id: @erb_template
+);
+
+erb_tokeninfo(
+ unique int id: @erb_token,
+ int kind: int ref,
+ string value: string ref
+);
+
+case @erb_token.kind of
+ 0 = @erb_reserved_word
+| 1 = @erb_token_code
+| 2 = @erb_token_comment
+| 3 = @erb_token_content
+;
+
+
+@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token
+
+erb_ast_node_location(
+ unique int node: @erb_ast_node ref,
+ int loc: @location_default ref
+);
+
+#keyset[parent, parent_index]
+erb_ast_node_parent(
+ unique int node: @erb_ast_node ref,
+ int parent: @erb_ast_node ref,
+ int parent_index: int ref
+);
+
diff --git a/ruby/ql/lib/upgrades/dc51d416301df12df5b70fbc4338de6cc1f82bfd/upgrade.properties b/ruby/ql/lib/upgrades/dc51d416301df12df5b70fbc4338de6cc1f82bfd/upgrade.properties
new file mode 100644
index 000000000000..3199458aa6b3
--- /dev/null
+++ b/ruby/ql/lib/upgrades/dc51d416301df12df5b70fbc4338de6cc1f82bfd/upgrade.properties
@@ -0,0 +1,2 @@
+description: Add overlayChangedFiles relation
+compatibility: full
diff --git a/rust/downgrades/319c933d9615ccf40f363548cafd51d08c74a534/old.dbscheme b/rust/downgrades/319c933d9615ccf40f363548cafd51d08c74a534/old.dbscheme
new file mode 100644
index 000000000000..319c933d9615
--- /dev/null
+++ b/rust/downgrades/319c933d9615ccf40f363548cafd51d08c74a534/old.dbscheme
@@ -0,0 +1,3637 @@
+// generated by codegen, do not edit
+
+// from ../shared/tree-sitter-extractor/src/generator/prefix.dbscheme
+/*- Files and folders -*/
+
+/**
+ * The location of an element.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_default(
+ unique int id: @location_default,
+ int file: @file ref,
+ int beginLine: int ref,
+ int beginColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+files(
+ unique int id: @file,
+ string name: string ref
+);
+
+folders(
+ unique int id: @folder,
+ string name: string ref
+);
+
+@container = @file | @folder
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref
+);
+
+/*- Empty location -*/
+
+empty_location(
+ int location: @location_default ref
+);
+
+/*- Source location prefix -*/
+
+/**
+ * The source location of the snapshot.
+ */
+sourceLocationPrefix(string prefix : string ref);
+
+/*- Diagnostic messages -*/
+
+diagnostics(
+ unique int id: @diagnostic,
+ int severity: int ref,
+ string error_tag: string ref,
+ string error_message: string ref,
+ string full_error_message: string ref,
+ int location: @location_default ref
+);
+
+/*- Diagnostic messages: severity -*/
+
+case @diagnostic.severity of
+ 10 = @diagnostic_debug
+| 20 = @diagnostic_info
+| 30 = @diagnostic_warning
+| 40 = @diagnostic_error
+;
+
+/*- YAML -*/
+
+#keyset[parent, idx]
+yaml (unique int id: @yaml_node,
+ int kind: int ref,
+ int parent: @yaml_node_parent ref,
+ int idx: int ref,
+ string tag: string ref,
+ string tostring: string ref);
+
+case @yaml_node.kind of
+ 0 = @yaml_scalar_node
+| 1 = @yaml_mapping_node
+| 2 = @yaml_sequence_node
+| 3 = @yaml_alias_node
+;
+
+@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node;
+
+@yaml_node_parent = @yaml_collection_node | @file;
+
+yaml_anchors (unique int node: @yaml_node ref,
+ string anchor: string ref);
+
+yaml_aliases (unique int alias: @yaml_alias_node ref,
+ string target: string ref);
+
+yaml_scalars (unique int scalar: @yaml_scalar_node ref,
+ int style: int ref,
+ string value: string ref);
+
+yaml_errors (unique int id: @yaml_error,
+ string message: string ref);
+
+yaml_locations(unique int locatable: @yaml_locatable ref,
+ int location: @location_default ref);
+
+@yaml_locatable = @yaml_node | @yaml_error;
+
+/*- Database metadata -*/
+databaseMetadata(
+ string metadataKey: string ref,
+ string value: string ref
+);
+
+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
+| @arg_list
+| @asm_dir_spec
+| @asm_operand
+| @asm_operand_expr
+| @asm_option
+| @asm_piece
+| @asm_reg_spec
+| @assoc_item_list
+| @attr
+| @callable
+| @closure_binder
+| @expr
+| @extern_item_list
+| @field_list
+| @format_args_arg
+| @generic_arg
+| @generic_arg_list
+| @generic_param
+| @generic_param_list
+| @item_list
+| @label
+| @let_else
+| @macro_items
+| @match_arm
+| @match_arm_list
+| @match_guard
+| @meta
+| @name
+| @param_base
+| @param_list
+| @parenthesized_arg_list
+| @pat
+| @path
+| @path_segment
+| @rename
+| @resolvable
+| @ret_type_repr
+| @return_type_syntax
+| @source_file
+| @stmt
+| @stmt_list
+| @struct_expr_field
+| @struct_expr_field_list
+| @struct_field
+| @struct_pat_field
+| @struct_pat_field_list
+| @token
+| @token_tree
+| @tuple_field
+| @type_bound
+| @type_bound_list
+| @type_repr
+| @use_bound_generic_arg
+| @use_bound_generic_args
+| @use_tree
+| @use_tree_list
+| @variant_list
+| @visibility
+| @where_clause
+| @where_pred
+;
+
+crates(
+ unique int id: @crate
+);
+
+#keyset[id]
+crate_names(
+ int id: @crate ref,
+ string name: string ref
+);
+
+#keyset[id]
+crate_versions(
+ int id: @crate ref,
+ string version: string ref
+);
+
+#keyset[id, index]
+crate_cfg_options(
+ int id: @crate ref,
+ int index: int ref,
+ string cfg_option: string ref
+);
+
+#keyset[id, index]
+crate_named_dependencies(
+ int id: @crate ref,
+ int index: int ref,
+ int named_dependency: @named_crate ref
+);
+
+missings(
+ unique int id: @missing
+);
+
+unimplementeds(
+ unique int id: @unimplemented
+);
+
+abis(
+ unique int id: @abi
+);
+
+#keyset[id]
+abi_abi_strings(
+ int id: @abi ref,
+ string abi_string: string ref
+);
+
+@addressable =
+ @item
+| @variant
+;
+
+#keyset[id]
+addressable_extended_canonical_paths(
+ int id: @addressable ref,
+ string extended_canonical_path: string ref
+);
+
+#keyset[id]
+addressable_crate_origins(
+ int id: @addressable ref,
+ string crate_origin: string ref
+);
+
+arg_lists(
+ unique int id: @arg_list
+);
+
+#keyset[id, index]
+arg_list_args(
+ int id: @arg_list ref,
+ int index: int ref,
+ int arg: @expr ref
+);
+
+asm_dir_specs(
+ unique int id: @asm_dir_spec
+);
+
+@asm_operand =
+ @asm_const
+| @asm_label
+| @asm_reg_operand
+| @asm_sym
+;
+
+asm_operand_exprs(
+ unique int id: @asm_operand_expr
+);
+
+#keyset[id]
+asm_operand_expr_in_exprs(
+ int id: @asm_operand_expr ref,
+ int in_expr: @expr ref
+);
+
+#keyset[id]
+asm_operand_expr_out_exprs(
+ int id: @asm_operand_expr ref,
+ int out_expr: @expr ref
+);
+
+asm_options(
+ unique int id: @asm_option
+);
+
+#keyset[id]
+asm_option_is_raw(
+ int id: @asm_option ref
+);
+
+@asm_piece =
+ @asm_clobber_abi
+| @asm_operand_named
+| @asm_options_list
+;
+
+asm_reg_specs(
+ unique int id: @asm_reg_spec
+);
+
+#keyset[id]
+asm_reg_spec_identifiers(
+ int id: @asm_reg_spec ref,
+ int identifier: @name_ref ref
+);
+
+assoc_item_lists(
+ unique int id: @assoc_item_list
+);
+
+#keyset[id, index]
+assoc_item_list_assoc_items(
+ int id: @assoc_item_list ref,
+ int index: int ref,
+ int assoc_item: @assoc_item ref
+);
+
+#keyset[id, index]
+assoc_item_list_attrs(
+ int id: @assoc_item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+attrs(
+ unique int id: @attr
+);
+
+#keyset[id]
+attr_meta(
+ int id: @attr ref,
+ int meta: @meta ref
+);
+
+@callable =
+ @closure_expr
+| @function
+;
+
+#keyset[id]
+callable_param_lists(
+ int id: @callable ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id, index]
+callable_attrs(
+ int id: @callable ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+closure_binders(
+ unique int id: @closure_binder
+);
+
+#keyset[id]
+closure_binder_generic_param_lists(
+ int id: @closure_binder ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+@expr =
+ @array_expr_internal
+| @asm_expr
+| @await_expr
+| @become_expr
+| @binary_expr
+| @break_expr
+| @call_expr_base
+| @cast_expr
+| @closure_expr
+| @continue_expr
+| @field_expr
+| @format_args_expr
+| @if_expr
+| @index_expr
+| @labelable_expr
+| @let_expr
+| @literal_expr
+| @macro_block_expr
+| @macro_expr
+| @match_expr
+| @offset_of_expr
+| @paren_expr
+| @path_expr_base
+| @prefix_expr
+| @range_expr
+| @ref_expr
+| @return_expr
+| @struct_expr
+| @try_expr
+| @tuple_expr
+| @underscore_expr
+| @yeet_expr
+| @yield_expr
+;
+
+extern_item_lists(
+ unique int id: @extern_item_list
+);
+
+#keyset[id, index]
+extern_item_list_attrs(
+ int id: @extern_item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+extern_item_list_extern_items(
+ int id: @extern_item_list ref,
+ int index: int ref,
+ int extern_item: @extern_item ref
+);
+
+@field_list =
+ @struct_field_list
+| @tuple_field_list
+;
+
+format_args_args(
+ unique int id: @format_args_arg
+);
+
+#keyset[id]
+format_args_arg_exprs(
+ int id: @format_args_arg ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+format_args_arg_names(
+ int id: @format_args_arg ref,
+ int name: @name ref
+);
+
+@generic_arg =
+ @assoc_type_arg
+| @const_arg
+| @lifetime_arg
+| @type_arg
+;
+
+generic_arg_lists(
+ unique int id: @generic_arg_list
+);
+
+#keyset[id, index]
+generic_arg_list_generic_args(
+ int id: @generic_arg_list ref,
+ int index: int ref,
+ int generic_arg: @generic_arg ref
+);
+
+@generic_param =
+ @const_param
+| @lifetime_param
+| @type_param
+;
+
+generic_param_lists(
+ unique int id: @generic_param_list
+);
+
+#keyset[id, index]
+generic_param_list_generic_params(
+ int id: @generic_param_list ref,
+ int index: int ref,
+ int generic_param: @generic_param ref
+);
+
+item_lists(
+ unique int id: @item_list
+);
+
+#keyset[id, index]
+item_list_attrs(
+ int id: @item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+item_list_items(
+ int id: @item_list ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+labels(
+ unique int id: @label
+);
+
+#keyset[id]
+label_lifetimes(
+ int id: @label ref,
+ int lifetime: @lifetime ref
+);
+
+let_elses(
+ unique int id: @let_else
+);
+
+#keyset[id]
+let_else_block_exprs(
+ int id: @let_else ref,
+ int block_expr: @block_expr ref
+);
+
+macro_items(
+ unique int id: @macro_items
+);
+
+#keyset[id, index]
+macro_items_items(
+ int id: @macro_items ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+match_arms(
+ unique int id: @match_arm
+);
+
+#keyset[id, index]
+match_arm_attrs(
+ int id: @match_arm ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+match_arm_exprs(
+ int id: @match_arm ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+match_arm_guards(
+ int id: @match_arm ref,
+ int guard: @match_guard ref
+);
+
+#keyset[id]
+match_arm_pats(
+ int id: @match_arm ref,
+ int pat: @pat ref
+);
+
+match_arm_lists(
+ unique int id: @match_arm_list
+);
+
+#keyset[id, index]
+match_arm_list_arms(
+ int id: @match_arm_list ref,
+ int index: int ref,
+ int arm: @match_arm ref
+);
+
+#keyset[id, index]
+match_arm_list_attrs(
+ int id: @match_arm_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+match_guards(
+ unique int id: @match_guard
+);
+
+#keyset[id]
+match_guard_conditions(
+ int id: @match_guard ref,
+ int condition: @expr ref
+);
+
+meta(
+ unique int id: @meta
+);
+
+#keyset[id]
+meta_exprs(
+ int id: @meta ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+meta_is_unsafe(
+ int id: @meta ref
+);
+
+#keyset[id]
+meta_paths(
+ int id: @meta ref,
+ int path: @path ref
+);
+
+#keyset[id]
+meta_token_trees(
+ int id: @meta ref,
+ int token_tree: @token_tree ref
+);
+
+names(
+ unique int id: @name
+);
+
+#keyset[id]
+name_texts(
+ int id: @name ref,
+ string text: string ref
+);
+
+@param_base =
+ @param
+| @self_param
+;
+
+#keyset[id, index]
+param_base_attrs(
+ int id: @param_base ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+param_base_type_reprs(
+ int id: @param_base ref,
+ int type_repr: @type_repr ref
+);
+
+param_lists(
+ unique int id: @param_list
+);
+
+#keyset[id, index]
+param_list_params(
+ int id: @param_list ref,
+ int index: int ref,
+ int param: @param ref
+);
+
+#keyset[id]
+param_list_self_params(
+ int id: @param_list ref,
+ int self_param: @self_param ref
+);
+
+parenthesized_arg_lists(
+ unique int id: @parenthesized_arg_list
+);
+
+#keyset[id, index]
+parenthesized_arg_list_type_args(
+ int id: @parenthesized_arg_list ref,
+ int index: int ref,
+ int type_arg: @type_arg ref
+);
+
+@pat =
+ @box_pat
+| @const_block_pat
+| @ident_pat
+| @literal_pat
+| @macro_pat
+| @or_pat
+| @paren_pat
+| @path_pat
+| @range_pat
+| @ref_pat
+| @rest_pat
+| @slice_pat
+| @struct_pat
+| @tuple_pat
+| @tuple_struct_pat
+| @wildcard_pat
+;
+
+paths(
+ unique int id: @path
+);
+
+#keyset[id]
+path_qualifiers(
+ int id: @path ref,
+ int qualifier: @path ref
+);
+
+#keyset[id]
+path_segments_(
+ int id: @path ref,
+ int segment: @path_segment ref
+);
+
+path_segments(
+ unique int id: @path_segment
+);
+
+#keyset[id]
+path_segment_generic_arg_lists(
+ int id: @path_segment ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+path_segment_identifiers(
+ int id: @path_segment ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+path_segment_parenthesized_arg_lists(
+ int id: @path_segment ref,
+ int parenthesized_arg_list: @parenthesized_arg_list ref
+);
+
+#keyset[id]
+path_segment_ret_types(
+ int id: @path_segment ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+path_segment_return_type_syntaxes(
+ int id: @path_segment ref,
+ int return_type_syntax: @return_type_syntax ref
+);
+
+#keyset[id]
+path_segment_type_reprs(
+ int id: @path_segment ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+path_segment_trait_type_reprs(
+ int id: @path_segment ref,
+ int trait_type_repr: @path_type_repr ref
+);
+
+renames(
+ unique int id: @rename
+);
+
+#keyset[id]
+rename_names(
+ int id: @rename ref,
+ int name: @name ref
+);
+
+@resolvable =
+ @method_call_expr
+| @path_ast_node
+;
+
+#keyset[id]
+resolvable_resolved_paths(
+ int id: @resolvable ref,
+ string resolved_path: string ref
+);
+
+#keyset[id]
+resolvable_resolved_crate_origins(
+ int id: @resolvable ref,
+ string resolved_crate_origin: string ref
+);
+
+ret_type_reprs(
+ unique int id: @ret_type_repr
+);
+
+#keyset[id]
+ret_type_repr_type_reprs(
+ int id: @ret_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+return_type_syntaxes(
+ unique int id: @return_type_syntax
+);
+
+source_files(
+ unique int id: @source_file
+);
+
+#keyset[id, index]
+source_file_attrs(
+ int id: @source_file ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+source_file_items(
+ int id: @source_file ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+@stmt =
+ @expr_stmt
+| @item
+| @let_stmt
+;
+
+stmt_lists(
+ unique int id: @stmt_list
+);
+
+#keyset[id, index]
+stmt_list_attrs(
+ int id: @stmt_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+stmt_list_statements(
+ int id: @stmt_list ref,
+ int index: int ref,
+ int statement: @stmt ref
+);
+
+#keyset[id]
+stmt_list_tail_exprs(
+ int id: @stmt_list ref,
+ int tail_expr: @expr ref
+);
+
+struct_expr_fields(
+ unique int id: @struct_expr_field
+);
+
+#keyset[id, index]
+struct_expr_field_attrs(
+ int id: @struct_expr_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_expr_field_exprs(
+ int id: @struct_expr_field ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+struct_expr_field_identifiers(
+ int id: @struct_expr_field ref,
+ int identifier: @name_ref ref
+);
+
+struct_expr_field_lists(
+ unique int id: @struct_expr_field_list
+);
+
+#keyset[id, index]
+struct_expr_field_list_attrs(
+ int id: @struct_expr_field_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+struct_expr_field_list_fields(
+ int id: @struct_expr_field_list ref,
+ int index: int ref,
+ int field: @struct_expr_field ref
+);
+
+#keyset[id]
+struct_expr_field_list_spreads(
+ int id: @struct_expr_field_list ref,
+ int spread: @expr ref
+);
+
+struct_fields(
+ unique int id: @struct_field
+);
+
+#keyset[id, index]
+struct_field_attrs(
+ int id: @struct_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_field_defaults(
+ int id: @struct_field ref,
+ int default: @expr ref
+);
+
+#keyset[id]
+struct_field_is_unsafe(
+ int id: @struct_field ref
+);
+
+#keyset[id]
+struct_field_names(
+ int id: @struct_field ref,
+ int name: @name ref
+);
+
+#keyset[id]
+struct_field_type_reprs(
+ int id: @struct_field ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+struct_field_visibilities(
+ int id: @struct_field ref,
+ int visibility: @visibility ref
+);
+
+struct_pat_fields(
+ unique int id: @struct_pat_field
+);
+
+#keyset[id, index]
+struct_pat_field_attrs(
+ int id: @struct_pat_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_pat_field_identifiers(
+ int id: @struct_pat_field ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+struct_pat_field_pats(
+ int id: @struct_pat_field ref,
+ int pat: @pat ref
+);
+
+struct_pat_field_lists(
+ unique int id: @struct_pat_field_list
+);
+
+#keyset[id, index]
+struct_pat_field_list_fields(
+ int id: @struct_pat_field_list ref,
+ int index: int ref,
+ int field: @struct_pat_field ref
+);
+
+#keyset[id]
+struct_pat_field_list_rest_pats(
+ int id: @struct_pat_field_list ref,
+ int rest_pat: @rest_pat ref
+);
+
+@token =
+ @comment
+;
+
+token_trees(
+ unique int id: @token_tree
+);
+
+tuple_fields(
+ unique int id: @tuple_field
+);
+
+#keyset[id, index]
+tuple_field_attrs(
+ int id: @tuple_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+tuple_field_type_reprs(
+ int id: @tuple_field ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+tuple_field_visibilities(
+ int id: @tuple_field ref,
+ int visibility: @visibility ref
+);
+
+type_bounds(
+ unique int id: @type_bound
+);
+
+#keyset[id]
+type_bound_is_async(
+ int id: @type_bound ref
+);
+
+#keyset[id]
+type_bound_is_const(
+ int id: @type_bound ref
+);
+
+#keyset[id]
+type_bound_lifetimes(
+ int id: @type_bound ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+type_bound_type_reprs(
+ int id: @type_bound ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+type_bound_use_bound_generic_args(
+ int id: @type_bound ref,
+ int use_bound_generic_args: @use_bound_generic_args ref
+);
+
+type_bound_lists(
+ unique int id: @type_bound_list
+);
+
+#keyset[id, index]
+type_bound_list_bounds(
+ int id: @type_bound_list ref,
+ int index: int ref,
+ int bound: @type_bound ref
+);
+
+@type_repr =
+ @array_type_repr
+| @dyn_trait_type_repr
+| @fn_ptr_type_repr
+| @for_type_repr
+| @impl_trait_type_repr
+| @infer_type_repr
+| @macro_type_repr
+| @never_type_repr
+| @paren_type_repr
+| @path_type_repr
+| @ptr_type_repr
+| @ref_type_repr
+| @slice_type_repr
+| @tuple_type_repr
+;
+
+@use_bound_generic_arg =
+ @lifetime
+| @name_ref
+;
+
+use_bound_generic_args(
+ unique int id: @use_bound_generic_args
+);
+
+#keyset[id, index]
+use_bound_generic_args_use_bound_generic_args(
+ int id: @use_bound_generic_args ref,
+ int index: int ref,
+ int use_bound_generic_arg: @use_bound_generic_arg ref
+);
+
+use_trees(
+ unique int id: @use_tree
+);
+
+#keyset[id]
+use_tree_is_glob(
+ int id: @use_tree ref
+);
+
+#keyset[id]
+use_tree_paths(
+ int id: @use_tree ref,
+ int path: @path ref
+);
+
+#keyset[id]
+use_tree_renames(
+ int id: @use_tree ref,
+ int rename: @rename ref
+);
+
+#keyset[id]
+use_tree_use_tree_lists(
+ int id: @use_tree ref,
+ int use_tree_list: @use_tree_list ref
+);
+
+use_tree_lists(
+ unique int id: @use_tree_list
+);
+
+#keyset[id, index]
+use_tree_list_use_trees(
+ int id: @use_tree_list ref,
+ int index: int ref,
+ int use_tree: @use_tree ref
+);
+
+variant_lists(
+ unique int id: @variant_list
+);
+
+#keyset[id, index]
+variant_list_variants(
+ int id: @variant_list ref,
+ int index: int ref,
+ int variant: @variant ref
+);
+
+visibilities(
+ unique int id: @visibility
+);
+
+#keyset[id]
+visibility_paths(
+ int id: @visibility ref,
+ int path: @path ref
+);
+
+where_clauses(
+ unique int id: @where_clause
+);
+
+#keyset[id, index]
+where_clause_predicates(
+ int id: @where_clause ref,
+ int index: int ref,
+ int predicate: @where_pred ref
+);
+
+where_preds(
+ unique int id: @where_pred
+);
+
+#keyset[id]
+where_pred_generic_param_lists(
+ int id: @where_pred ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+where_pred_lifetimes(
+ int id: @where_pred ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+where_pred_type_reprs(
+ int id: @where_pred ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+where_pred_type_bound_lists(
+ int id: @where_pred ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+array_expr_internals(
+ unique int id: @array_expr_internal
+);
+
+#keyset[id, index]
+array_expr_internal_attrs(
+ int id: @array_expr_internal ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+array_expr_internal_exprs(
+ int id: @array_expr_internal ref,
+ int index: int ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+array_expr_internal_is_semicolon(
+ int id: @array_expr_internal ref
+);
+
+array_type_reprs(
+ unique int id: @array_type_repr
+);
+
+#keyset[id]
+array_type_repr_const_args(
+ int id: @array_type_repr ref,
+ int const_arg: @const_arg ref
+);
+
+#keyset[id]
+array_type_repr_element_type_reprs(
+ int id: @array_type_repr ref,
+ int element_type_repr: @type_repr ref
+);
+
+asm_clobber_abis(
+ unique int id: @asm_clobber_abi
+);
+
+asm_consts(
+ unique int id: @asm_const
+);
+
+#keyset[id]
+asm_const_exprs(
+ int id: @asm_const ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+asm_const_is_const(
+ int id: @asm_const ref
+);
+
+asm_exprs(
+ unique int id: @asm_expr
+);
+
+#keyset[id, index]
+asm_expr_asm_pieces(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int asm_piece: @asm_piece ref
+);
+
+#keyset[id, index]
+asm_expr_attrs(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+asm_expr_templates(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int template: @expr ref
+);
+
+asm_labels(
+ unique int id: @asm_label
+);
+
+#keyset[id]
+asm_label_block_exprs(
+ int id: @asm_label ref,
+ int block_expr: @block_expr ref
+);
+
+asm_operand_nameds(
+ unique int id: @asm_operand_named
+);
+
+#keyset[id]
+asm_operand_named_asm_operands(
+ int id: @asm_operand_named ref,
+ int asm_operand: @asm_operand ref
+);
+
+#keyset[id]
+asm_operand_named_names(
+ int id: @asm_operand_named ref,
+ int name: @name ref
+);
+
+asm_options_lists(
+ unique int id: @asm_options_list
+);
+
+#keyset[id, index]
+asm_options_list_asm_options(
+ int id: @asm_options_list ref,
+ int index: int ref,
+ int asm_option: @asm_option ref
+);
+
+asm_reg_operands(
+ unique int id: @asm_reg_operand
+);
+
+#keyset[id]
+asm_reg_operand_asm_dir_specs(
+ int id: @asm_reg_operand ref,
+ int asm_dir_spec: @asm_dir_spec ref
+);
+
+#keyset[id]
+asm_reg_operand_asm_operand_exprs(
+ int id: @asm_reg_operand ref,
+ int asm_operand_expr: @asm_operand_expr ref
+);
+
+#keyset[id]
+asm_reg_operand_asm_reg_specs(
+ int id: @asm_reg_operand ref,
+ int asm_reg_spec: @asm_reg_spec ref
+);
+
+asm_syms(
+ unique int id: @asm_sym
+);
+
+#keyset[id]
+asm_sym_paths(
+ int id: @asm_sym ref,
+ int path: @path ref
+);
+
+assoc_type_args(
+ unique int id: @assoc_type_arg
+);
+
+#keyset[id]
+assoc_type_arg_const_args(
+ int id: @assoc_type_arg ref,
+ int const_arg: @const_arg ref
+);
+
+#keyset[id]
+assoc_type_arg_generic_arg_lists(
+ int id: @assoc_type_arg ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+assoc_type_arg_identifiers(
+ int id: @assoc_type_arg ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+assoc_type_arg_param_lists(
+ int id: @assoc_type_arg ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id]
+assoc_type_arg_ret_types(
+ int id: @assoc_type_arg ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+assoc_type_arg_return_type_syntaxes(
+ int id: @assoc_type_arg ref,
+ int return_type_syntax: @return_type_syntax ref
+);
+
+#keyset[id]
+assoc_type_arg_type_reprs(
+ int id: @assoc_type_arg ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+assoc_type_arg_type_bound_lists(
+ int id: @assoc_type_arg ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+await_exprs(
+ unique int id: @await_expr
+);
+
+#keyset[id, index]
+await_expr_attrs(
+ int id: @await_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+await_expr_exprs(
+ int id: @await_expr ref,
+ int expr: @expr ref
+);
+
+become_exprs(
+ unique int id: @become_expr
+);
+
+#keyset[id, index]
+become_expr_attrs(
+ int id: @become_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+become_expr_exprs(
+ int id: @become_expr ref,
+ int expr: @expr ref
+);
+
+binary_exprs(
+ unique int id: @binary_expr
+);
+
+#keyset[id, index]
+binary_expr_attrs(
+ int id: @binary_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+binary_expr_lhs(
+ int id: @binary_expr ref,
+ int lhs: @expr ref
+);
+
+#keyset[id]
+binary_expr_operator_names(
+ int id: @binary_expr ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+binary_expr_rhs(
+ int id: @binary_expr ref,
+ int rhs: @expr ref
+);
+
+box_pats(
+ unique int id: @box_pat
+);
+
+#keyset[id]
+box_pat_pats(
+ int id: @box_pat ref,
+ int pat: @pat ref
+);
+
+break_exprs(
+ unique int id: @break_expr
+);
+
+#keyset[id, index]
+break_expr_attrs(
+ int id: @break_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+break_expr_exprs(
+ int id: @break_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+break_expr_lifetimes(
+ int id: @break_expr ref,
+ int lifetime: @lifetime ref
+);
+
+@call_expr_base =
+ @call_expr
+| @method_call_expr
+;
+
+#keyset[id]
+call_expr_base_arg_lists(
+ int id: @call_expr_base ref,
+ int arg_list: @arg_list ref
+);
+
+#keyset[id, index]
+call_expr_base_attrs(
+ int id: @call_expr_base ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+cast_exprs(
+ unique int id: @cast_expr
+);
+
+#keyset[id, index]
+cast_expr_attrs(
+ int id: @cast_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+cast_expr_exprs(
+ int id: @cast_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+cast_expr_type_reprs(
+ int id: @cast_expr ref,
+ int type_repr: @type_repr ref
+);
+
+closure_exprs(
+ unique int id: @closure_expr
+);
+
+#keyset[id]
+closure_expr_bodies(
+ int id: @closure_expr ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+closure_expr_closure_binders(
+ int id: @closure_expr ref,
+ int closure_binder: @closure_binder ref
+);
+
+#keyset[id]
+closure_expr_is_async(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_const(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_gen(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_move(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_static(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_ret_types(
+ int id: @closure_expr ref,
+ int ret_type: @ret_type_repr ref
+);
+
+comments(
+ unique int id: @comment,
+ int parent: @ast_node ref,
+ string text: string ref
+);
+
+const_args(
+ unique int id: @const_arg
+);
+
+#keyset[id]
+const_arg_exprs(
+ int id: @const_arg ref,
+ int expr: @expr ref
+);
+
+const_block_pats(
+ unique int id: @const_block_pat
+);
+
+#keyset[id]
+const_block_pat_block_exprs(
+ int id: @const_block_pat ref,
+ int block_expr: @block_expr ref
+);
+
+#keyset[id]
+const_block_pat_is_const(
+ int id: @const_block_pat ref
+);
+
+const_params(
+ unique int id: @const_param
+);
+
+#keyset[id, index]
+const_param_attrs(
+ int id: @const_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+const_param_default_vals(
+ int id: @const_param ref,
+ int default_val: @const_arg ref
+);
+
+#keyset[id]
+const_param_is_const(
+ int id: @const_param ref
+);
+
+#keyset[id]
+const_param_names(
+ int id: @const_param ref,
+ int name: @name ref
+);
+
+#keyset[id]
+const_param_type_reprs(
+ int id: @const_param ref,
+ int type_repr: @type_repr ref
+);
+
+continue_exprs(
+ unique int id: @continue_expr
+);
+
+#keyset[id, index]
+continue_expr_attrs(
+ int id: @continue_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+continue_expr_lifetimes(
+ int id: @continue_expr ref,
+ int lifetime: @lifetime ref
+);
+
+dyn_trait_type_reprs(
+ unique int id: @dyn_trait_type_repr
+);
+
+#keyset[id]
+dyn_trait_type_repr_type_bound_lists(
+ int id: @dyn_trait_type_repr ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+expr_stmts(
+ unique int id: @expr_stmt
+);
+
+#keyset[id]
+expr_stmt_exprs(
+ int id: @expr_stmt ref,
+ int expr: @expr ref
+);
+
+field_exprs(
+ unique int id: @field_expr
+);
+
+#keyset[id, index]
+field_expr_attrs(
+ int id: @field_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+field_expr_containers(
+ int id: @field_expr ref,
+ int container: @expr ref
+);
+
+#keyset[id]
+field_expr_identifiers(
+ int id: @field_expr ref,
+ int identifier: @name_ref ref
+);
+
+fn_ptr_type_reprs(
+ unique int id: @fn_ptr_type_repr
+);
+
+#keyset[id]
+fn_ptr_type_repr_abis(
+ int id: @fn_ptr_type_repr ref,
+ int abi: @abi ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_async(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_const(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_unsafe(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_param_lists(
+ int id: @fn_ptr_type_repr ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_ret_types(
+ int id: @fn_ptr_type_repr ref,
+ int ret_type: @ret_type_repr ref
+);
+
+for_type_reprs(
+ unique int id: @for_type_repr
+);
+
+#keyset[id]
+for_type_repr_generic_param_lists(
+ int id: @for_type_repr ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+for_type_repr_type_reprs(
+ int id: @for_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+format_args_exprs(
+ unique int id: @format_args_expr
+);
+
+#keyset[id, index]
+format_args_expr_args(
+ int id: @format_args_expr ref,
+ int index: int ref,
+ int arg: @format_args_arg ref
+);
+
+#keyset[id, index]
+format_args_expr_attrs(
+ int id: @format_args_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+format_args_expr_templates(
+ int id: @format_args_expr ref,
+ int template: @expr ref
+);
+
+ident_pats(
+ unique int id: @ident_pat
+);
+
+#keyset[id, index]
+ident_pat_attrs(
+ int id: @ident_pat ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+ident_pat_is_mut(
+ int id: @ident_pat ref
+);
+
+#keyset[id]
+ident_pat_is_ref(
+ int id: @ident_pat ref
+);
+
+#keyset[id]
+ident_pat_names(
+ int id: @ident_pat ref,
+ int name: @name ref
+);
+
+#keyset[id]
+ident_pat_pats(
+ int id: @ident_pat ref,
+ int pat: @pat ref
+);
+
+if_exprs(
+ unique int id: @if_expr
+);
+
+#keyset[id, index]
+if_expr_attrs(
+ int id: @if_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+if_expr_conditions(
+ int id: @if_expr ref,
+ int condition: @expr ref
+);
+
+#keyset[id]
+if_expr_elses(
+ int id: @if_expr ref,
+ int else: @expr ref
+);
+
+#keyset[id]
+if_expr_thens(
+ int id: @if_expr ref,
+ int then: @block_expr ref
+);
+
+impl_trait_type_reprs(
+ unique int id: @impl_trait_type_repr
+);
+
+#keyset[id]
+impl_trait_type_repr_type_bound_lists(
+ int id: @impl_trait_type_repr ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+index_exprs(
+ unique int id: @index_expr
+);
+
+#keyset[id, index]
+index_expr_attrs(
+ int id: @index_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+index_expr_bases(
+ int id: @index_expr ref,
+ int base: @expr ref
+);
+
+#keyset[id]
+index_expr_indices(
+ int id: @index_expr ref,
+ int index: @expr ref
+);
+
+infer_type_reprs(
+ unique int id: @infer_type_repr
+);
+
+@item =
+ @adt
+| @assoc_item
+| @extern_block
+| @extern_crate
+| @extern_item
+| @impl
+| @macro_def
+| @macro_rules
+| @module
+| @trait
+| @trait_alias
+| @use
+;
+
+#keyset[id]
+item_attribute_macro_expansions(
+ int id: @item ref,
+ int attribute_macro_expansion: @macro_items ref
+);
+
+@labelable_expr =
+ @block_expr
+| @looping_expr
+;
+
+#keyset[id]
+labelable_expr_labels(
+ int id: @labelable_expr ref,
+ int label: @label ref
+);
+
+let_exprs(
+ unique int id: @let_expr
+);
+
+#keyset[id, index]
+let_expr_attrs(
+ int id: @let_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+let_expr_scrutinees(
+ int id: @let_expr ref,
+ int scrutinee: @expr ref
+);
+
+#keyset[id]
+let_expr_pats(
+ int id: @let_expr ref,
+ int pat: @pat ref
+);
+
+let_stmts(
+ unique int id: @let_stmt
+);
+
+#keyset[id, index]
+let_stmt_attrs(
+ int id: @let_stmt ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+let_stmt_initializers(
+ int id: @let_stmt ref,
+ int initializer: @expr ref
+);
+
+#keyset[id]
+let_stmt_let_elses(
+ int id: @let_stmt ref,
+ int let_else: @let_else ref
+);
+
+#keyset[id]
+let_stmt_pats(
+ int id: @let_stmt ref,
+ int pat: @pat ref
+);
+
+#keyset[id]
+let_stmt_type_reprs(
+ int id: @let_stmt ref,
+ int type_repr: @type_repr ref
+);
+
+lifetimes(
+ unique int id: @lifetime
+);
+
+#keyset[id]
+lifetime_texts(
+ int id: @lifetime ref,
+ string text: string ref
+);
+
+lifetime_args(
+ unique int id: @lifetime_arg
+);
+
+#keyset[id]
+lifetime_arg_lifetimes(
+ int id: @lifetime_arg ref,
+ int lifetime: @lifetime ref
+);
+
+lifetime_params(
+ unique int id: @lifetime_param
+);
+
+#keyset[id, index]
+lifetime_param_attrs(
+ int id: @lifetime_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+lifetime_param_lifetimes(
+ int id: @lifetime_param ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+lifetime_param_type_bound_lists(
+ int id: @lifetime_param ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+literal_exprs(
+ unique int id: @literal_expr
+);
+
+#keyset[id, index]
+literal_expr_attrs(
+ int id: @literal_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+literal_expr_text_values(
+ int id: @literal_expr ref,
+ string text_value: string ref
+);
+
+literal_pats(
+ unique int id: @literal_pat
+);
+
+#keyset[id]
+literal_pat_literals(
+ int id: @literal_pat ref,
+ int literal: @literal_expr ref
+);
+
+macro_block_exprs(
+ unique int id: @macro_block_expr
+);
+
+#keyset[id]
+macro_block_expr_tail_exprs(
+ int id: @macro_block_expr ref,
+ int tail_expr: @expr ref
+);
+
+#keyset[id, index]
+macro_block_expr_statements(
+ int id: @macro_block_expr ref,
+ int index: int ref,
+ int statement: @stmt ref
+);
+
+macro_exprs(
+ unique int id: @macro_expr
+);
+
+#keyset[id]
+macro_expr_macro_calls(
+ int id: @macro_expr ref,
+ int macro_call: @macro_call ref
+);
+
+macro_pats(
+ unique int id: @macro_pat
+);
+
+#keyset[id]
+macro_pat_macro_calls(
+ int id: @macro_pat ref,
+ int macro_call: @macro_call ref
+);
+
+macro_type_reprs(
+ unique int id: @macro_type_repr
+);
+
+#keyset[id]
+macro_type_repr_macro_calls(
+ int id: @macro_type_repr ref,
+ int macro_call: @macro_call ref
+);
+
+match_exprs(
+ unique int id: @match_expr
+);
+
+#keyset[id, index]
+match_expr_attrs(
+ int id: @match_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+match_expr_scrutinees(
+ int id: @match_expr ref,
+ int scrutinee: @expr ref
+);
+
+#keyset[id]
+match_expr_match_arm_lists(
+ int id: @match_expr ref,
+ int match_arm_list: @match_arm_list ref
+);
+
+name_refs(
+ unique int id: @name_ref
+);
+
+#keyset[id]
+name_ref_texts(
+ int id: @name_ref ref,
+ string text: string ref
+);
+
+never_type_reprs(
+ unique int id: @never_type_repr
+);
+
+offset_of_exprs(
+ unique int id: @offset_of_expr
+);
+
+#keyset[id, index]
+offset_of_expr_attrs(
+ int id: @offset_of_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+offset_of_expr_fields(
+ int id: @offset_of_expr ref,
+ int index: int ref,
+ int field: @name_ref ref
+);
+
+#keyset[id]
+offset_of_expr_type_reprs(
+ int id: @offset_of_expr ref,
+ int type_repr: @type_repr ref
+);
+
+or_pats(
+ unique int id: @or_pat
+);
+
+#keyset[id, index]
+or_pat_pats(
+ int id: @or_pat ref,
+ int index: int ref,
+ int pat: @pat ref
+);
+
+params(
+ unique int id: @param
+);
+
+#keyset[id]
+param_pats(
+ int id: @param ref,
+ int pat: @pat ref
+);
+
+paren_exprs(
+ unique int id: @paren_expr
+);
+
+#keyset[id, index]
+paren_expr_attrs(
+ int id: @paren_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+paren_expr_exprs(
+ int id: @paren_expr ref,
+ int expr: @expr ref
+);
+
+paren_pats(
+ unique int id: @paren_pat
+);
+
+#keyset[id]
+paren_pat_pats(
+ int id: @paren_pat ref,
+ int pat: @pat ref
+);
+
+paren_type_reprs(
+ unique int id: @paren_type_repr
+);
+
+#keyset[id]
+paren_type_repr_type_reprs(
+ int id: @paren_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+@path_ast_node =
+ @path_expr
+| @path_pat
+| @struct_expr
+| @struct_pat
+| @tuple_struct_pat
+;
+
+#keyset[id]
+path_ast_node_paths(
+ int id: @path_ast_node ref,
+ int path: @path ref
+);
+
+@path_expr_base =
+ @path_expr
+;
+
+path_type_reprs(
+ unique int id: @path_type_repr
+);
+
+#keyset[id]
+path_type_repr_paths(
+ int id: @path_type_repr ref,
+ int path: @path ref
+);
+
+prefix_exprs(
+ unique int id: @prefix_expr
+);
+
+#keyset[id, index]
+prefix_expr_attrs(
+ int id: @prefix_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+prefix_expr_exprs(
+ int id: @prefix_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+prefix_expr_operator_names(
+ int id: @prefix_expr ref,
+ string operator_name: string ref
+);
+
+ptr_type_reprs(
+ unique int id: @ptr_type_repr
+);
+
+#keyset[id]
+ptr_type_repr_is_const(
+ int id: @ptr_type_repr ref
+);
+
+#keyset[id]
+ptr_type_repr_is_mut(
+ int id: @ptr_type_repr ref
+);
+
+#keyset[id]
+ptr_type_repr_type_reprs(
+ int id: @ptr_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+range_exprs(
+ unique int id: @range_expr
+);
+
+#keyset[id, index]
+range_expr_attrs(
+ int id: @range_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+range_expr_ends(
+ int id: @range_expr ref,
+ int end: @expr ref
+);
+
+#keyset[id]
+range_expr_operator_names(
+ int id: @range_expr ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+range_expr_starts(
+ int id: @range_expr ref,
+ int start: @expr ref
+);
+
+range_pats(
+ unique int id: @range_pat
+);
+
+#keyset[id]
+range_pat_ends(
+ int id: @range_pat ref,
+ int end: @pat ref
+);
+
+#keyset[id]
+range_pat_operator_names(
+ int id: @range_pat ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+range_pat_starts(
+ int id: @range_pat ref,
+ int start: @pat ref
+);
+
+ref_exprs(
+ unique int id: @ref_expr
+);
+
+#keyset[id, index]
+ref_expr_attrs(
+ int id: @ref_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+ref_expr_exprs(
+ int id: @ref_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+ref_expr_is_const(
+ int id: @ref_expr ref
+);
+
+#keyset[id]
+ref_expr_is_mut(
+ int id: @ref_expr ref
+);
+
+#keyset[id]
+ref_expr_is_raw(
+ int id: @ref_expr ref
+);
+
+ref_pats(
+ unique int id: @ref_pat
+);
+
+#keyset[id]
+ref_pat_is_mut(
+ int id: @ref_pat ref
+);
+
+#keyset[id]
+ref_pat_pats(
+ int id: @ref_pat ref,
+ int pat: @pat ref
+);
+
+ref_type_reprs(
+ unique int id: @ref_type_repr
+);
+
+#keyset[id]
+ref_type_repr_is_mut(
+ int id: @ref_type_repr ref
+);
+
+#keyset[id]
+ref_type_repr_lifetimes(
+ int id: @ref_type_repr ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+ref_type_repr_type_reprs(
+ int id: @ref_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+rest_pats(
+ unique int id: @rest_pat
+);
+
+#keyset[id, index]
+rest_pat_attrs(
+ int id: @rest_pat ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+return_exprs(
+ unique int id: @return_expr
+);
+
+#keyset[id, index]
+return_expr_attrs(
+ int id: @return_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+return_expr_exprs(
+ int id: @return_expr ref,
+ int expr: @expr ref
+);
+
+self_params(
+ unique int id: @self_param
+);
+
+#keyset[id]
+self_param_is_ref(
+ int id: @self_param ref
+);
+
+#keyset[id]
+self_param_is_mut(
+ int id: @self_param ref
+);
+
+#keyset[id]
+self_param_lifetimes(
+ int id: @self_param ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+self_param_names(
+ int id: @self_param ref,
+ int name: @name ref
+);
+
+slice_pats(
+ unique int id: @slice_pat
+);
+
+#keyset[id, index]
+slice_pat_pats(
+ int id: @slice_pat ref,
+ int index: int ref,
+ int pat: @pat ref
+);
+
+slice_type_reprs(
+ unique int id: @slice_type_repr
+);
+
+#keyset[id]
+slice_type_repr_type_reprs(
+ int id: @slice_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+struct_field_lists(
+ unique int id: @struct_field_list
+);
+
+#keyset[id, index]
+struct_field_list_fields(
+ int id: @struct_field_list ref,
+ int index: int ref,
+ int field: @struct_field ref
+);
+
+try_exprs(
+ unique int id: @try_expr
+);
+
+#keyset[id, index]
+try_expr_attrs(
+ int id: @try_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+try_expr_exprs(
+ int id: @try_expr ref,
+ int expr: @expr ref
+);
+
+tuple_exprs(
+ unique int id: @tuple_expr
+);
+
+#keyset[id, index]
+tuple_expr_attrs(
+ int id: @tuple_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+tuple_expr_fields(
+ int id: @tuple_expr ref,
+ int index: int ref,
+ int field: @expr ref
+);
+
+tuple_field_lists(
+ unique int id: @tuple_field_list
+);
+
+#keyset[id, index]
+tuple_field_list_fields(
+ int id: @tuple_field_list ref,
+ int index: int ref,
+ int field: @tuple_field ref
+);
+
+tuple_pats(
+ unique int id: @tuple_pat
+);
+
+#keyset[id, index]
+tuple_pat_fields(
+ int id: @tuple_pat ref,
+ int index: int ref,
+ int field: @pat ref
+);
+
+tuple_type_reprs(
+ unique int id: @tuple_type_repr
+);
+
+#keyset[id, index]
+tuple_type_repr_fields(
+ int id: @tuple_type_repr ref,
+ int index: int ref,
+ int field: @type_repr ref
+);
+
+type_args(
+ unique int id: @type_arg
+);
+
+#keyset[id]
+type_arg_type_reprs(
+ int id: @type_arg ref,
+ int type_repr: @type_repr ref
+);
+
+type_params(
+ unique int id: @type_param
+);
+
+#keyset[id, index]
+type_param_attrs(
+ int id: @type_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+type_param_default_types(
+ int id: @type_param ref,
+ int default_type: @type_repr ref
+);
+
+#keyset[id]
+type_param_names(
+ int id: @type_param ref,
+ int name: @name ref
+);
+
+#keyset[id]
+type_param_type_bound_lists(
+ int id: @type_param ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+underscore_exprs(
+ unique int id: @underscore_expr
+);
+
+#keyset[id, index]
+underscore_expr_attrs(
+ int id: @underscore_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+variants(
+ unique int id: @variant
+);
+
+#keyset[id, index]
+variant_attrs(
+ int id: @variant ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+variant_discriminants(
+ int id: @variant ref,
+ int discriminant: @expr ref
+);
+
+#keyset[id]
+variant_field_lists(
+ int id: @variant ref,
+ int field_list: @field_list ref
+);
+
+#keyset[id]
+variant_names(
+ int id: @variant ref,
+ int name: @name ref
+);
+
+#keyset[id]
+variant_visibilities(
+ int id: @variant ref,
+ int visibility: @visibility ref
+);
+
+wildcard_pats(
+ unique int id: @wildcard_pat
+);
+
+yeet_exprs(
+ unique int id: @yeet_expr
+);
+
+#keyset[id, index]
+yeet_expr_attrs(
+ int id: @yeet_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+yeet_expr_exprs(
+ int id: @yeet_expr ref,
+ int expr: @expr ref
+);
+
+yield_exprs(
+ unique int id: @yield_expr
+);
+
+#keyset[id, index]
+yield_expr_attrs(
+ int id: @yield_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+yield_expr_exprs(
+ int id: @yield_expr ref,
+ int expr: @expr ref
+);
+
+@adt =
+ @enum
+| @struct
+| @union
+;
+
+#keyset[id, index]
+adt_derive_macro_expansions(
+ int id: @adt ref,
+ int index: int ref,
+ int derive_macro_expansion: @macro_items ref
+);
+
+@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: @attr ref
+);
+
+#keyset[id]
+block_expr_is_async(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_const(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_gen(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_move(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_try(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_unsafe(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_stmt_lists(
+ int id: @block_expr ref,
+ int stmt_list: @stmt_list ref
+);
+
+call_exprs(
+ unique int id: @call_expr
+);
+
+#keyset[id]
+call_expr_functions(
+ int id: @call_expr ref,
+ int function: @expr ref
+);
+
+extern_blocks(
+ unique int id: @extern_block
+);
+
+#keyset[id]
+extern_block_abis(
+ int id: @extern_block ref,
+ int abi: @abi ref
+);
+
+#keyset[id, index]
+extern_block_attrs(
+ int id: @extern_block ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+extern_block_extern_item_lists(
+ int id: @extern_block ref,
+ int extern_item_list: @extern_item_list ref
+);
+
+#keyset[id]
+extern_block_is_unsafe(
+ int id: @extern_block ref
+);
+
+extern_crates(
+ unique int id: @extern_crate
+);
+
+#keyset[id, index]
+extern_crate_attrs(
+ int id: @extern_crate ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+extern_crate_identifiers(
+ int id: @extern_crate ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+extern_crate_renames(
+ int id: @extern_crate ref,
+ int rename: @rename ref
+);
+
+#keyset[id]
+extern_crate_visibilities(
+ int id: @extern_crate ref,
+ int visibility: @visibility ref
+);
+
+@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: @attr ref
+);
+
+#keyset[id]
+impl_generic_param_lists(
+ int id: @impl ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+impl_is_const(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_is_default(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_is_unsafe(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_self_ties(
+ int id: @impl ref,
+ int self_ty: @type_repr ref
+);
+
+#keyset[id]
+impl_traits(
+ int id: @impl ref,
+ int trait: @type_repr ref
+);
+
+#keyset[id]
+impl_visibilities(
+ int id: @impl ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+impl_where_clauses(
+ int id: @impl ref,
+ int where_clause: @where_clause ref
+);
+
+@looping_expr =
+ @for_expr
+| @loop_expr
+| @while_expr
+;
+
+#keyset[id]
+looping_expr_loop_bodies(
+ int id: @looping_expr ref,
+ int loop_body: @block_expr ref
+);
+
+macro_defs(
+ unique int id: @macro_def
+);
+
+#keyset[id]
+macro_def_args(
+ int id: @macro_def ref,
+ int args: @token_tree ref
+);
+
+#keyset[id, index]
+macro_def_attrs(
+ int id: @macro_def ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_def_bodies(
+ int id: @macro_def ref,
+ int body: @token_tree ref
+);
+
+#keyset[id]
+macro_def_names(
+ int id: @macro_def ref,
+ int name: @name ref
+);
+
+#keyset[id]
+macro_def_visibilities(
+ int id: @macro_def ref,
+ int visibility: @visibility ref
+);
+
+macro_rules(
+ unique int id: @macro_rules
+);
+
+#keyset[id, index]
+macro_rules_attrs(
+ int id: @macro_rules ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_rules_names(
+ int id: @macro_rules ref,
+ int name: @name ref
+);
+
+#keyset[id]
+macro_rules_token_trees(
+ int id: @macro_rules ref,
+ int token_tree: @token_tree ref
+);
+
+#keyset[id]
+macro_rules_visibilities(
+ int id: @macro_rules ref,
+ int visibility: @visibility ref
+);
+
+method_call_exprs(
+ unique int id: @method_call_expr
+);
+
+#keyset[id]
+method_call_expr_generic_arg_lists(
+ int id: @method_call_expr ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+method_call_expr_identifiers(
+ int id: @method_call_expr ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+method_call_expr_receivers(
+ int id: @method_call_expr ref,
+ int receiver: @expr ref
+);
+
+modules(
+ unique int id: @module
+);
+
+#keyset[id, index]
+module_attrs(
+ int id: @module ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+module_item_lists(
+ int id: @module ref,
+ int item_list: @item_list ref
+);
+
+#keyset[id]
+module_names(
+ int id: @module ref,
+ int name: @name ref
+);
+
+#keyset[id]
+module_visibilities(
+ int id: @module ref,
+ int visibility: @visibility ref
+);
+
+path_exprs(
+ unique int id: @path_expr
+);
+
+#keyset[id, index]
+path_expr_attrs(
+ int id: @path_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+path_pats(
+ unique int id: @path_pat
+);
+
+struct_exprs(
+ unique int id: @struct_expr
+);
+
+#keyset[id]
+struct_expr_struct_expr_field_lists(
+ int id: @struct_expr ref,
+ int struct_expr_field_list: @struct_expr_field_list ref
+);
+
+struct_pats(
+ unique int id: @struct_pat
+);
+
+#keyset[id]
+struct_pat_struct_pat_field_lists(
+ int id: @struct_pat ref,
+ int struct_pat_field_list: @struct_pat_field_list ref
+);
+
+traits(
+ unique int id: @trait
+);
+
+#keyset[id]
+trait_assoc_item_lists(
+ int id: @trait ref,
+ int assoc_item_list: @assoc_item_list ref
+);
+
+#keyset[id, index]
+trait_attrs(
+ int id: @trait ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+trait_generic_param_lists(
+ int id: @trait ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+trait_is_auto(
+ int id: @trait ref
+);
+
+#keyset[id]
+trait_is_unsafe(
+ int id: @trait ref
+);
+
+#keyset[id]
+trait_names(
+ int id: @trait ref,
+ int name: @name ref
+);
+
+#keyset[id]
+trait_type_bound_lists(
+ int id: @trait ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+trait_visibilities(
+ int id: @trait ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+trait_where_clauses(
+ int id: @trait ref,
+ int where_clause: @where_clause ref
+);
+
+trait_aliases(
+ unique int id: @trait_alias
+);
+
+#keyset[id, index]
+trait_alias_attrs(
+ int id: @trait_alias ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+trait_alias_generic_param_lists(
+ int id: @trait_alias ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+trait_alias_names(
+ int id: @trait_alias ref,
+ int name: @name ref
+);
+
+#keyset[id]
+trait_alias_type_bound_lists(
+ int id: @trait_alias ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+trait_alias_visibilities(
+ int id: @trait_alias ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+trait_alias_where_clauses(
+ int id: @trait_alias ref,
+ int where_clause: @where_clause ref
+);
+
+tuple_struct_pats(
+ unique int id: @tuple_struct_pat
+);
+
+#keyset[id, index]
+tuple_struct_pat_fields(
+ int id: @tuple_struct_pat ref,
+ int index: int ref,
+ int field: @pat ref
+);
+
+uses(
+ unique int id: @use
+);
+
+#keyset[id, index]
+use_attrs(
+ int id: @use ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+use_use_trees(
+ int id: @use ref,
+ int use_tree: @use_tree ref
+);
+
+#keyset[id]
+use_visibilities(
+ int id: @use ref,
+ int visibility: @visibility ref
+);
+
+consts(
+ unique int id: @const
+);
+
+#keyset[id, index]
+const_attrs(
+ int id: @const ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+const_bodies(
+ int id: @const ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+const_generic_param_lists(
+ int id: @const ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+const_is_const(
+ int id: @const ref
+);
+
+#keyset[id]
+const_is_default(
+ int id: @const ref
+);
+
+#keyset[id]
+const_names(
+ int id: @const ref,
+ int name: @name ref
+);
+
+#keyset[id]
+const_type_reprs(
+ int id: @const ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+const_visibilities(
+ int id: @const ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+const_where_clauses(
+ int id: @const ref,
+ int where_clause: @where_clause ref
+);
+
+#keyset[id]
+const_has_implementation(
+ int id: @const ref
+);
+
+enums(
+ unique int id: @enum
+);
+
+#keyset[id, index]
+enum_attrs(
+ int id: @enum ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+enum_generic_param_lists(
+ int id: @enum ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+enum_names(
+ int id: @enum ref,
+ int name: @name ref
+);
+
+#keyset[id]
+enum_variant_lists(
+ int id: @enum ref,
+ int variant_list: @variant_list ref
+);
+
+#keyset[id]
+enum_visibilities(
+ int id: @enum ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+enum_where_clauses(
+ int id: @enum ref,
+ int where_clause: @where_clause ref
+);
+
+for_exprs(
+ unique int id: @for_expr
+);
+
+#keyset[id, index]
+for_expr_attrs(
+ int id: @for_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+for_expr_iterables(
+ int id: @for_expr ref,
+ int iterable: @expr ref
+);
+
+#keyset[id]
+for_expr_pats(
+ int id: @for_expr ref,
+ int pat: @pat ref
+);
+
+functions(
+ unique int id: @function
+);
+
+#keyset[id]
+function_abis(
+ int id: @function ref,
+ int abi: @abi ref
+);
+
+#keyset[id]
+function_bodies(
+ int id: @function ref,
+ int body: @block_expr ref
+);
+
+#keyset[id]
+function_generic_param_lists(
+ int id: @function ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+function_is_async(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_const(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_default(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_gen(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_unsafe(
+ int id: @function ref
+);
+
+#keyset[id]
+function_names(
+ int id: @function ref,
+ int name: @name ref
+);
+
+#keyset[id]
+function_ret_types(
+ int id: @function ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+function_visibilities(
+ int id: @function ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+function_where_clauses(
+ int id: @function ref,
+ int where_clause: @where_clause ref
+);
+
+#keyset[id]
+function_has_implementation(
+ int id: @function ref
+);
+
+loop_exprs(
+ unique int id: @loop_expr
+);
+
+#keyset[id, index]
+loop_expr_attrs(
+ int id: @loop_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+macro_calls(
+ unique int id: @macro_call
+);
+
+#keyset[id, index]
+macro_call_attrs(
+ int id: @macro_call ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_call_paths(
+ int id: @macro_call ref,
+ int path: @path ref
+);
+
+#keyset[id]
+macro_call_token_trees(
+ int id: @macro_call ref,
+ int token_tree: @token_tree ref
+);
+
+#keyset[id]
+macro_call_macro_call_expansions(
+ int id: @macro_call ref,
+ int macro_call_expansion: @ast_node ref
+);
+
+statics(
+ unique int id: @static
+);
+
+#keyset[id, index]
+static_attrs(
+ int id: @static ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+static_bodies(
+ int id: @static ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+static_is_mut(
+ int id: @static ref
+);
+
+#keyset[id]
+static_is_static(
+ int id: @static ref
+);
+
+#keyset[id]
+static_is_unsafe(
+ int id: @static ref
+);
+
+#keyset[id]
+static_names(
+ int id: @static ref,
+ int name: @name ref
+);
+
+#keyset[id]
+static_type_reprs(
+ int id: @static ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+static_visibilities(
+ int id: @static ref,
+ int visibility: @visibility ref
+);
+
+structs(
+ unique int id: @struct
+);
+
+#keyset[id, index]
+struct_attrs(
+ int id: @struct ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_field_lists_(
+ int id: @struct ref,
+ int field_list: @field_list ref
+);
+
+#keyset[id]
+struct_generic_param_lists(
+ int id: @struct ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+struct_names(
+ int id: @struct ref,
+ int name: @name ref
+);
+
+#keyset[id]
+struct_visibilities(
+ int id: @struct ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+struct_where_clauses(
+ int id: @struct ref,
+ int where_clause: @where_clause ref
+);
+
+type_aliases(
+ unique int id: @type_alias
+);
+
+#keyset[id, index]
+type_alias_attrs(
+ int id: @type_alias ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+type_alias_generic_param_lists(
+ int id: @type_alias ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+type_alias_is_default(
+ int id: @type_alias ref
+);
+
+#keyset[id]
+type_alias_names(
+ int id: @type_alias ref,
+ int name: @name ref
+);
+
+#keyset[id]
+type_alias_type_reprs(
+ int id: @type_alias ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+type_alias_type_bound_lists(
+ int id: @type_alias ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+type_alias_visibilities(
+ int id: @type_alias ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+type_alias_where_clauses(
+ int id: @type_alias ref,
+ int where_clause: @where_clause ref
+);
+
+unions(
+ unique int id: @union
+);
+
+#keyset[id, index]
+union_attrs(
+ int id: @union ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+union_generic_param_lists(
+ int id: @union ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+union_names(
+ int id: @union ref,
+ int name: @name ref
+);
+
+#keyset[id]
+union_struct_field_lists(
+ int id: @union ref,
+ int struct_field_list: @struct_field_list ref
+);
+
+#keyset[id]
+union_visibilities(
+ int id: @union ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+union_where_clauses(
+ int id: @union ref,
+ int where_clause: @where_clause ref
+);
+
+while_exprs(
+ unique int id: @while_expr
+);
+
+#keyset[id, index]
+while_expr_attrs(
+ int id: @while_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+while_expr_conditions(
+ int id: @while_expr ref,
+ int condition: @expr ref
+);
diff --git a/rust/downgrades/319c933d9615ccf40f363548cafd51d08c74a534/rust.dbscheme b/rust/downgrades/319c933d9615ccf40f363548cafd51d08c74a534/rust.dbscheme
new file mode 100644
index 000000000000..8e9b0c516ae8
--- /dev/null
+++ b/rust/downgrades/319c933d9615ccf40f363548cafd51d08c74a534/rust.dbscheme
@@ -0,0 +1,3633 @@
+// generated by codegen, do not edit
+
+// from ../shared/tree-sitter-extractor/src/generator/prefix.dbscheme
+/*- Files and folders -*/
+
+/**
+ * The location of an element.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_default(
+ unique int id: @location_default,
+ int file: @file ref,
+ int beginLine: int ref,
+ int beginColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+files(
+ unique int id: @file,
+ string name: string ref
+);
+
+folders(
+ unique int id: @folder,
+ string name: string ref
+);
+
+@container = @file | @folder
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref
+);
+
+/*- Empty location -*/
+
+empty_location(
+ int location: @location_default ref
+);
+
+/*- Source location prefix -*/
+
+/**
+ * The source location of the snapshot.
+ */
+sourceLocationPrefix(string prefix : string ref);
+
+/*- Diagnostic messages -*/
+
+diagnostics(
+ unique int id: @diagnostic,
+ int severity: int ref,
+ string error_tag: string ref,
+ string error_message: string ref,
+ string full_error_message: string ref,
+ int location: @location_default ref
+);
+
+/*- Diagnostic messages: severity -*/
+
+case @diagnostic.severity of
+ 10 = @diagnostic_debug
+| 20 = @diagnostic_info
+| 30 = @diagnostic_warning
+| 40 = @diagnostic_error
+;
+
+/*- YAML -*/
+
+#keyset[parent, idx]
+yaml (unique int id: @yaml_node,
+ int kind: int ref,
+ int parent: @yaml_node_parent ref,
+ int idx: int ref,
+ string tag: string ref,
+ string tostring: string ref);
+
+case @yaml_node.kind of
+ 0 = @yaml_scalar_node
+| 1 = @yaml_mapping_node
+| 2 = @yaml_sequence_node
+| 3 = @yaml_alias_node
+;
+
+@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node;
+
+@yaml_node_parent = @yaml_collection_node | @file;
+
+yaml_anchors (unique int node: @yaml_node ref,
+ string anchor: string ref);
+
+yaml_aliases (unique int alias: @yaml_alias_node ref,
+ string target: string ref);
+
+yaml_scalars (unique int scalar: @yaml_scalar_node ref,
+ int style: int ref,
+ string value: string ref);
+
+yaml_errors (unique int id: @yaml_error,
+ string message: string ref);
+
+yaml_locations(unique int locatable: @yaml_locatable ref,
+ int location: @location_default ref);
+
+@yaml_locatable = @yaml_node | @yaml_error;
+
+/*- Database metadata -*/
+databaseMetadata(
+ string metadataKey: string ref,
+ string value: string ref
+);
+
+
+// from prefix.dbscheme
+#keyset[id]
+locatable_locations(
+ int id: @locatable ref,
+ int location: @location_default ref
+);
+
+
+// from schema
+
+@element =
+ @extractor_step
+| @locatable
+| @named_crate
+| @unextracted
+;
+
+extractor_steps(
+ unique int id: @extractor_step,
+ string action: string ref,
+ int duration_ms: int ref
+);
+
+#keyset[id]
+extractor_step_files(
+ int id: @extractor_step ref,
+ int file: @file ref
+);
+
+@locatable =
+ @ast_node
+| @crate
+;
+
+named_crates(
+ unique int id: @named_crate,
+ string name: string ref,
+ int crate: @crate ref
+);
+
+@unextracted =
+ @missing
+| @unimplemented
+;
+
+@ast_node =
+ @abi
+| @addressable
+| @arg_list
+| @asm_dir_spec
+| @asm_operand
+| @asm_operand_expr
+| @asm_option
+| @asm_piece
+| @asm_reg_spec
+| @assoc_item_list
+| @attr
+| @callable
+| @closure_binder
+| @expr
+| @extern_item_list
+| @field_list
+| @format_args_arg
+| @generic_arg
+| @generic_arg_list
+| @generic_param
+| @generic_param_list
+| @item_list
+| @label
+| @let_else
+| @macro_items
+| @match_arm
+| @match_arm_list
+| @match_guard
+| @meta
+| @name
+| @param_base
+| @param_list
+| @parenthesized_arg_list
+| @pat
+| @path
+| @path_segment
+| @rename
+| @resolvable
+| @ret_type_repr
+| @return_type_syntax
+| @source_file
+| @stmt
+| @stmt_list
+| @struct_expr_field
+| @struct_expr_field_list
+| @struct_field
+| @struct_pat_field
+| @struct_pat_field_list
+| @token
+| @token_tree
+| @tuple_field
+| @type_bound
+| @type_bound_list
+| @type_repr
+| @use_bound_generic_arg
+| @use_bound_generic_args
+| @use_tree
+| @use_tree_list
+| @variant_list
+| @visibility
+| @where_clause
+| @where_pred
+;
+
+crates(
+ unique int id: @crate
+);
+
+#keyset[id]
+crate_names(
+ int id: @crate ref,
+ string name: string ref
+);
+
+#keyset[id]
+crate_versions(
+ int id: @crate ref,
+ string version: string ref
+);
+
+#keyset[id, index]
+crate_cfg_options(
+ int id: @crate ref,
+ int index: int ref,
+ string cfg_option: string ref
+);
+
+#keyset[id, index]
+crate_named_dependencies(
+ int id: @crate ref,
+ int index: int ref,
+ int named_dependency: @named_crate ref
+);
+
+missings(
+ unique int id: @missing
+);
+
+unimplementeds(
+ unique int id: @unimplemented
+);
+
+abis(
+ unique int id: @abi
+);
+
+#keyset[id]
+abi_abi_strings(
+ int id: @abi ref,
+ string abi_string: string ref
+);
+
+@addressable =
+ @item
+| @variant
+;
+
+#keyset[id]
+addressable_extended_canonical_paths(
+ int id: @addressable ref,
+ string extended_canonical_path: string ref
+);
+
+#keyset[id]
+addressable_crate_origins(
+ int id: @addressable ref,
+ string crate_origin: string ref
+);
+
+arg_lists(
+ unique int id: @arg_list
+);
+
+#keyset[id, index]
+arg_list_args(
+ int id: @arg_list ref,
+ int index: int ref,
+ int arg: @expr ref
+);
+
+asm_dir_specs(
+ unique int id: @asm_dir_spec
+);
+
+@asm_operand =
+ @asm_const
+| @asm_label
+| @asm_reg_operand
+| @asm_sym
+;
+
+asm_operand_exprs(
+ unique int id: @asm_operand_expr
+);
+
+#keyset[id]
+asm_operand_expr_in_exprs(
+ int id: @asm_operand_expr ref,
+ int in_expr: @expr ref
+);
+
+#keyset[id]
+asm_operand_expr_out_exprs(
+ int id: @asm_operand_expr ref,
+ int out_expr: @expr ref
+);
+
+asm_options(
+ unique int id: @asm_option
+);
+
+#keyset[id]
+asm_option_is_raw(
+ int id: @asm_option ref
+);
+
+@asm_piece =
+ @asm_clobber_abi
+| @asm_operand_named
+| @asm_options_list
+;
+
+asm_reg_specs(
+ unique int id: @asm_reg_spec
+);
+
+#keyset[id]
+asm_reg_spec_identifiers(
+ int id: @asm_reg_spec ref,
+ int identifier: @name_ref ref
+);
+
+assoc_item_lists(
+ unique int id: @assoc_item_list
+);
+
+#keyset[id, index]
+assoc_item_list_assoc_items(
+ int id: @assoc_item_list ref,
+ int index: int ref,
+ int assoc_item: @assoc_item ref
+);
+
+#keyset[id, index]
+assoc_item_list_attrs(
+ int id: @assoc_item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+attrs(
+ unique int id: @attr
+);
+
+#keyset[id]
+attr_meta(
+ int id: @attr ref,
+ int meta: @meta ref
+);
+
+@callable =
+ @closure_expr
+| @function
+;
+
+#keyset[id]
+callable_param_lists(
+ int id: @callable ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id, index]
+callable_attrs(
+ int id: @callable ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+closure_binders(
+ unique int id: @closure_binder
+);
+
+#keyset[id]
+closure_binder_generic_param_lists(
+ int id: @closure_binder ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+@expr =
+ @array_expr_internal
+| @asm_expr
+| @await_expr
+| @become_expr
+| @binary_expr
+| @break_expr
+| @call_expr_base
+| @cast_expr
+| @closure_expr
+| @continue_expr
+| @field_expr
+| @format_args_expr
+| @if_expr
+| @index_expr
+| @labelable_expr
+| @let_expr
+| @literal_expr
+| @macro_block_expr
+| @macro_expr
+| @match_expr
+| @offset_of_expr
+| @paren_expr
+| @path_expr_base
+| @prefix_expr
+| @range_expr
+| @ref_expr
+| @return_expr
+| @struct_expr
+| @try_expr
+| @tuple_expr
+| @underscore_expr
+| @yeet_expr
+| @yield_expr
+;
+
+extern_item_lists(
+ unique int id: @extern_item_list
+);
+
+#keyset[id, index]
+extern_item_list_attrs(
+ int id: @extern_item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+extern_item_list_extern_items(
+ int id: @extern_item_list ref,
+ int index: int ref,
+ int extern_item: @extern_item ref
+);
+
+@field_list =
+ @struct_field_list
+| @tuple_field_list
+;
+
+format_args_args(
+ unique int id: @format_args_arg
+);
+
+#keyset[id]
+format_args_arg_exprs(
+ int id: @format_args_arg ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+format_args_arg_names(
+ int id: @format_args_arg ref,
+ int name: @name ref
+);
+
+@generic_arg =
+ @assoc_type_arg
+| @const_arg
+| @lifetime_arg
+| @type_arg
+;
+
+generic_arg_lists(
+ unique int id: @generic_arg_list
+);
+
+#keyset[id, index]
+generic_arg_list_generic_args(
+ int id: @generic_arg_list ref,
+ int index: int ref,
+ int generic_arg: @generic_arg ref
+);
+
+@generic_param =
+ @const_param
+| @lifetime_param
+| @type_param
+;
+
+generic_param_lists(
+ unique int id: @generic_param_list
+);
+
+#keyset[id, index]
+generic_param_list_generic_params(
+ int id: @generic_param_list ref,
+ int index: int ref,
+ int generic_param: @generic_param ref
+);
+
+item_lists(
+ unique int id: @item_list
+);
+
+#keyset[id, index]
+item_list_attrs(
+ int id: @item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+item_list_items(
+ int id: @item_list ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+labels(
+ unique int id: @label
+);
+
+#keyset[id]
+label_lifetimes(
+ int id: @label ref,
+ int lifetime: @lifetime ref
+);
+
+let_elses(
+ unique int id: @let_else
+);
+
+#keyset[id]
+let_else_block_exprs(
+ int id: @let_else ref,
+ int block_expr: @block_expr ref
+);
+
+macro_items(
+ unique int id: @macro_items
+);
+
+#keyset[id, index]
+macro_items_items(
+ int id: @macro_items ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+match_arms(
+ unique int id: @match_arm
+);
+
+#keyset[id, index]
+match_arm_attrs(
+ int id: @match_arm ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+match_arm_exprs(
+ int id: @match_arm ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+match_arm_guards(
+ int id: @match_arm ref,
+ int guard: @match_guard ref
+);
+
+#keyset[id]
+match_arm_pats(
+ int id: @match_arm ref,
+ int pat: @pat ref
+);
+
+match_arm_lists(
+ unique int id: @match_arm_list
+);
+
+#keyset[id, index]
+match_arm_list_arms(
+ int id: @match_arm_list ref,
+ int index: int ref,
+ int arm: @match_arm ref
+);
+
+#keyset[id, index]
+match_arm_list_attrs(
+ int id: @match_arm_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+match_guards(
+ unique int id: @match_guard
+);
+
+#keyset[id]
+match_guard_conditions(
+ int id: @match_guard ref,
+ int condition: @expr ref
+);
+
+meta(
+ unique int id: @meta
+);
+
+#keyset[id]
+meta_exprs(
+ int id: @meta ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+meta_is_unsafe(
+ int id: @meta ref
+);
+
+#keyset[id]
+meta_paths(
+ int id: @meta ref,
+ int path: @path ref
+);
+
+#keyset[id]
+meta_token_trees(
+ int id: @meta ref,
+ int token_tree: @token_tree ref
+);
+
+names(
+ unique int id: @name
+);
+
+#keyset[id]
+name_texts(
+ int id: @name ref,
+ string text: string ref
+);
+
+@param_base =
+ @param
+| @self_param
+;
+
+#keyset[id, index]
+param_base_attrs(
+ int id: @param_base ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+param_base_type_reprs(
+ int id: @param_base ref,
+ int type_repr: @type_repr ref
+);
+
+param_lists(
+ unique int id: @param_list
+);
+
+#keyset[id, index]
+param_list_params(
+ int id: @param_list ref,
+ int index: int ref,
+ int param: @param ref
+);
+
+#keyset[id]
+param_list_self_params(
+ int id: @param_list ref,
+ int self_param: @self_param ref
+);
+
+parenthesized_arg_lists(
+ unique int id: @parenthesized_arg_list
+);
+
+#keyset[id, index]
+parenthesized_arg_list_type_args(
+ int id: @parenthesized_arg_list ref,
+ int index: int ref,
+ int type_arg: @type_arg ref
+);
+
+@pat =
+ @box_pat
+| @const_block_pat
+| @ident_pat
+| @literal_pat
+| @macro_pat
+| @or_pat
+| @paren_pat
+| @path_pat
+| @range_pat
+| @ref_pat
+| @rest_pat
+| @slice_pat
+| @struct_pat
+| @tuple_pat
+| @tuple_struct_pat
+| @wildcard_pat
+;
+
+paths(
+ unique int id: @path
+);
+
+#keyset[id]
+path_qualifiers(
+ int id: @path ref,
+ int qualifier: @path ref
+);
+
+#keyset[id]
+path_segments_(
+ int id: @path ref,
+ int segment: @path_segment ref
+);
+
+path_segments(
+ unique int id: @path_segment
+);
+
+#keyset[id]
+path_segment_generic_arg_lists(
+ int id: @path_segment ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+path_segment_identifiers(
+ int id: @path_segment ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+path_segment_parenthesized_arg_lists(
+ int id: @path_segment ref,
+ int parenthesized_arg_list: @parenthesized_arg_list ref
+);
+
+#keyset[id]
+path_segment_ret_types(
+ int id: @path_segment ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+path_segment_return_type_syntaxes(
+ int id: @path_segment ref,
+ int return_type_syntax: @return_type_syntax ref
+);
+
+#keyset[id]
+path_segment_type_reprs(
+ int id: @path_segment ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+path_segment_trait_type_reprs(
+ int id: @path_segment ref,
+ int trait_type_repr: @path_type_repr ref
+);
+
+renames(
+ unique int id: @rename
+);
+
+#keyset[id]
+rename_names(
+ int id: @rename ref,
+ int name: @name ref
+);
+
+@resolvable =
+ @method_call_expr
+| @path_ast_node
+;
+
+#keyset[id]
+resolvable_resolved_paths(
+ int id: @resolvable ref,
+ string resolved_path: string ref
+);
+
+#keyset[id]
+resolvable_resolved_crate_origins(
+ int id: @resolvable ref,
+ string resolved_crate_origin: string ref
+);
+
+ret_type_reprs(
+ unique int id: @ret_type_repr
+);
+
+#keyset[id]
+ret_type_repr_type_reprs(
+ int id: @ret_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+return_type_syntaxes(
+ unique int id: @return_type_syntax
+);
+
+source_files(
+ unique int id: @source_file
+);
+
+#keyset[id, index]
+source_file_attrs(
+ int id: @source_file ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+source_file_items(
+ int id: @source_file ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+@stmt =
+ @expr_stmt
+| @item
+| @let_stmt
+;
+
+stmt_lists(
+ unique int id: @stmt_list
+);
+
+#keyset[id, index]
+stmt_list_attrs(
+ int id: @stmt_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+stmt_list_statements(
+ int id: @stmt_list ref,
+ int index: int ref,
+ int statement: @stmt ref
+);
+
+#keyset[id]
+stmt_list_tail_exprs(
+ int id: @stmt_list ref,
+ int tail_expr: @expr ref
+);
+
+struct_expr_fields(
+ unique int id: @struct_expr_field
+);
+
+#keyset[id, index]
+struct_expr_field_attrs(
+ int id: @struct_expr_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_expr_field_exprs(
+ int id: @struct_expr_field ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+struct_expr_field_identifiers(
+ int id: @struct_expr_field ref,
+ int identifier: @name_ref ref
+);
+
+struct_expr_field_lists(
+ unique int id: @struct_expr_field_list
+);
+
+#keyset[id, index]
+struct_expr_field_list_attrs(
+ int id: @struct_expr_field_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+struct_expr_field_list_fields(
+ int id: @struct_expr_field_list ref,
+ int index: int ref,
+ int field: @struct_expr_field ref
+);
+
+#keyset[id]
+struct_expr_field_list_spreads(
+ int id: @struct_expr_field_list ref,
+ int spread: @expr ref
+);
+
+struct_fields(
+ unique int id: @struct_field
+);
+
+#keyset[id, index]
+struct_field_attrs(
+ int id: @struct_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_field_defaults(
+ int id: @struct_field ref,
+ int default: @expr ref
+);
+
+#keyset[id]
+struct_field_is_unsafe(
+ int id: @struct_field ref
+);
+
+#keyset[id]
+struct_field_names(
+ int id: @struct_field ref,
+ int name: @name ref
+);
+
+#keyset[id]
+struct_field_type_reprs(
+ int id: @struct_field ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+struct_field_visibilities(
+ int id: @struct_field ref,
+ int visibility: @visibility ref
+);
+
+struct_pat_fields(
+ unique int id: @struct_pat_field
+);
+
+#keyset[id, index]
+struct_pat_field_attrs(
+ int id: @struct_pat_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_pat_field_identifiers(
+ int id: @struct_pat_field ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+struct_pat_field_pats(
+ int id: @struct_pat_field ref,
+ int pat: @pat ref
+);
+
+struct_pat_field_lists(
+ unique int id: @struct_pat_field_list
+);
+
+#keyset[id, index]
+struct_pat_field_list_fields(
+ int id: @struct_pat_field_list ref,
+ int index: int ref,
+ int field: @struct_pat_field ref
+);
+
+#keyset[id]
+struct_pat_field_list_rest_pats(
+ int id: @struct_pat_field_list ref,
+ int rest_pat: @rest_pat ref
+);
+
+@token =
+ @comment
+;
+
+token_trees(
+ unique int id: @token_tree
+);
+
+tuple_fields(
+ unique int id: @tuple_field
+);
+
+#keyset[id, index]
+tuple_field_attrs(
+ int id: @tuple_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+tuple_field_type_reprs(
+ int id: @tuple_field ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+tuple_field_visibilities(
+ int id: @tuple_field ref,
+ int visibility: @visibility ref
+);
+
+type_bounds(
+ unique int id: @type_bound
+);
+
+#keyset[id]
+type_bound_is_async(
+ int id: @type_bound ref
+);
+
+#keyset[id]
+type_bound_is_const(
+ int id: @type_bound ref
+);
+
+#keyset[id]
+type_bound_lifetimes(
+ int id: @type_bound ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+type_bound_type_reprs(
+ int id: @type_bound ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+type_bound_use_bound_generic_args(
+ int id: @type_bound ref,
+ int use_bound_generic_args: @use_bound_generic_args ref
+);
+
+type_bound_lists(
+ unique int id: @type_bound_list
+);
+
+#keyset[id, index]
+type_bound_list_bounds(
+ int id: @type_bound_list ref,
+ int index: int ref,
+ int bound: @type_bound ref
+);
+
+@type_repr =
+ @array_type_repr
+| @dyn_trait_type_repr
+| @fn_ptr_type_repr
+| @for_type_repr
+| @impl_trait_type_repr
+| @infer_type_repr
+| @macro_type_repr
+| @never_type_repr
+| @paren_type_repr
+| @path_type_repr
+| @ptr_type_repr
+| @ref_type_repr
+| @slice_type_repr
+| @tuple_type_repr
+;
+
+@use_bound_generic_arg =
+ @lifetime
+| @name_ref
+;
+
+use_bound_generic_args(
+ unique int id: @use_bound_generic_args
+);
+
+#keyset[id, index]
+use_bound_generic_args_use_bound_generic_args(
+ int id: @use_bound_generic_args ref,
+ int index: int ref,
+ int use_bound_generic_arg: @use_bound_generic_arg ref
+);
+
+use_trees(
+ unique int id: @use_tree
+);
+
+#keyset[id]
+use_tree_is_glob(
+ int id: @use_tree ref
+);
+
+#keyset[id]
+use_tree_paths(
+ int id: @use_tree ref,
+ int path: @path ref
+);
+
+#keyset[id]
+use_tree_renames(
+ int id: @use_tree ref,
+ int rename: @rename ref
+);
+
+#keyset[id]
+use_tree_use_tree_lists(
+ int id: @use_tree ref,
+ int use_tree_list: @use_tree_list ref
+);
+
+use_tree_lists(
+ unique int id: @use_tree_list
+);
+
+#keyset[id, index]
+use_tree_list_use_trees(
+ int id: @use_tree_list ref,
+ int index: int ref,
+ int use_tree: @use_tree ref
+);
+
+variant_lists(
+ unique int id: @variant_list
+);
+
+#keyset[id, index]
+variant_list_variants(
+ int id: @variant_list ref,
+ int index: int ref,
+ int variant: @variant ref
+);
+
+visibilities(
+ unique int id: @visibility
+);
+
+#keyset[id]
+visibility_paths(
+ int id: @visibility ref,
+ int path: @path ref
+);
+
+where_clauses(
+ unique int id: @where_clause
+);
+
+#keyset[id, index]
+where_clause_predicates(
+ int id: @where_clause ref,
+ int index: int ref,
+ int predicate: @where_pred ref
+);
+
+where_preds(
+ unique int id: @where_pred
+);
+
+#keyset[id]
+where_pred_generic_param_lists(
+ int id: @where_pred ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+where_pred_lifetimes(
+ int id: @where_pred ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+where_pred_type_reprs(
+ int id: @where_pred ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+where_pred_type_bound_lists(
+ int id: @where_pred ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+array_expr_internals(
+ unique int id: @array_expr_internal
+);
+
+#keyset[id, index]
+array_expr_internal_attrs(
+ int id: @array_expr_internal ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+array_expr_internal_exprs(
+ int id: @array_expr_internal ref,
+ int index: int ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+array_expr_internal_is_semicolon(
+ int id: @array_expr_internal ref
+);
+
+array_type_reprs(
+ unique int id: @array_type_repr
+);
+
+#keyset[id]
+array_type_repr_const_args(
+ int id: @array_type_repr ref,
+ int const_arg: @const_arg ref
+);
+
+#keyset[id]
+array_type_repr_element_type_reprs(
+ int id: @array_type_repr ref,
+ int element_type_repr: @type_repr ref
+);
+
+asm_clobber_abis(
+ unique int id: @asm_clobber_abi
+);
+
+asm_consts(
+ unique int id: @asm_const
+);
+
+#keyset[id]
+asm_const_exprs(
+ int id: @asm_const ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+asm_const_is_const(
+ int id: @asm_const ref
+);
+
+asm_exprs(
+ unique int id: @asm_expr
+);
+
+#keyset[id, index]
+asm_expr_asm_pieces(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int asm_piece: @asm_piece ref
+);
+
+#keyset[id, index]
+asm_expr_attrs(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+asm_expr_templates(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int template: @expr ref
+);
+
+asm_labels(
+ unique int id: @asm_label
+);
+
+#keyset[id]
+asm_label_block_exprs(
+ int id: @asm_label ref,
+ int block_expr: @block_expr ref
+);
+
+asm_operand_nameds(
+ unique int id: @asm_operand_named
+);
+
+#keyset[id]
+asm_operand_named_asm_operands(
+ int id: @asm_operand_named ref,
+ int asm_operand: @asm_operand ref
+);
+
+#keyset[id]
+asm_operand_named_names(
+ int id: @asm_operand_named ref,
+ int name: @name ref
+);
+
+asm_options_lists(
+ unique int id: @asm_options_list
+);
+
+#keyset[id, index]
+asm_options_list_asm_options(
+ int id: @asm_options_list ref,
+ int index: int ref,
+ int asm_option: @asm_option ref
+);
+
+asm_reg_operands(
+ unique int id: @asm_reg_operand
+);
+
+#keyset[id]
+asm_reg_operand_asm_dir_specs(
+ int id: @asm_reg_operand ref,
+ int asm_dir_spec: @asm_dir_spec ref
+);
+
+#keyset[id]
+asm_reg_operand_asm_operand_exprs(
+ int id: @asm_reg_operand ref,
+ int asm_operand_expr: @asm_operand_expr ref
+);
+
+#keyset[id]
+asm_reg_operand_asm_reg_specs(
+ int id: @asm_reg_operand ref,
+ int asm_reg_spec: @asm_reg_spec ref
+);
+
+asm_syms(
+ unique int id: @asm_sym
+);
+
+#keyset[id]
+asm_sym_paths(
+ int id: @asm_sym ref,
+ int path: @path ref
+);
+
+assoc_type_args(
+ unique int id: @assoc_type_arg
+);
+
+#keyset[id]
+assoc_type_arg_const_args(
+ int id: @assoc_type_arg ref,
+ int const_arg: @const_arg ref
+);
+
+#keyset[id]
+assoc_type_arg_generic_arg_lists(
+ int id: @assoc_type_arg ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+assoc_type_arg_identifiers(
+ int id: @assoc_type_arg ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+assoc_type_arg_param_lists(
+ int id: @assoc_type_arg ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id]
+assoc_type_arg_ret_types(
+ int id: @assoc_type_arg ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+assoc_type_arg_return_type_syntaxes(
+ int id: @assoc_type_arg ref,
+ int return_type_syntax: @return_type_syntax ref
+);
+
+#keyset[id]
+assoc_type_arg_type_reprs(
+ int id: @assoc_type_arg ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+assoc_type_arg_type_bound_lists(
+ int id: @assoc_type_arg ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+await_exprs(
+ unique int id: @await_expr
+);
+
+#keyset[id, index]
+await_expr_attrs(
+ int id: @await_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+await_expr_exprs(
+ int id: @await_expr ref,
+ int expr: @expr ref
+);
+
+become_exprs(
+ unique int id: @become_expr
+);
+
+#keyset[id, index]
+become_expr_attrs(
+ int id: @become_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+become_expr_exprs(
+ int id: @become_expr ref,
+ int expr: @expr ref
+);
+
+binary_exprs(
+ unique int id: @binary_expr
+);
+
+#keyset[id, index]
+binary_expr_attrs(
+ int id: @binary_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+binary_expr_lhs(
+ int id: @binary_expr ref,
+ int lhs: @expr ref
+);
+
+#keyset[id]
+binary_expr_operator_names(
+ int id: @binary_expr ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+binary_expr_rhs(
+ int id: @binary_expr ref,
+ int rhs: @expr ref
+);
+
+box_pats(
+ unique int id: @box_pat
+);
+
+#keyset[id]
+box_pat_pats(
+ int id: @box_pat ref,
+ int pat: @pat ref
+);
+
+break_exprs(
+ unique int id: @break_expr
+);
+
+#keyset[id, index]
+break_expr_attrs(
+ int id: @break_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+break_expr_exprs(
+ int id: @break_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+break_expr_lifetimes(
+ int id: @break_expr ref,
+ int lifetime: @lifetime ref
+);
+
+@call_expr_base =
+ @call_expr
+| @method_call_expr
+;
+
+#keyset[id]
+call_expr_base_arg_lists(
+ int id: @call_expr_base ref,
+ int arg_list: @arg_list ref
+);
+
+#keyset[id, index]
+call_expr_base_attrs(
+ int id: @call_expr_base ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+cast_exprs(
+ unique int id: @cast_expr
+);
+
+#keyset[id, index]
+cast_expr_attrs(
+ int id: @cast_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+cast_expr_exprs(
+ int id: @cast_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+cast_expr_type_reprs(
+ int id: @cast_expr ref,
+ int type_repr: @type_repr ref
+);
+
+closure_exprs(
+ unique int id: @closure_expr
+);
+
+#keyset[id]
+closure_expr_bodies(
+ int id: @closure_expr ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+closure_expr_closure_binders(
+ int id: @closure_expr ref,
+ int closure_binder: @closure_binder ref
+);
+
+#keyset[id]
+closure_expr_is_async(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_const(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_gen(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_move(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_static(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_ret_types(
+ int id: @closure_expr ref,
+ int ret_type: @ret_type_repr ref
+);
+
+comments(
+ unique int id: @comment,
+ int parent: @ast_node ref,
+ string text: string ref
+);
+
+const_args(
+ unique int id: @const_arg
+);
+
+#keyset[id]
+const_arg_exprs(
+ int id: @const_arg ref,
+ int expr: @expr ref
+);
+
+const_block_pats(
+ unique int id: @const_block_pat
+);
+
+#keyset[id]
+const_block_pat_block_exprs(
+ int id: @const_block_pat ref,
+ int block_expr: @block_expr ref
+);
+
+#keyset[id]
+const_block_pat_is_const(
+ int id: @const_block_pat ref
+);
+
+const_params(
+ unique int id: @const_param
+);
+
+#keyset[id, index]
+const_param_attrs(
+ int id: @const_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+const_param_default_vals(
+ int id: @const_param ref,
+ int default_val: @const_arg ref
+);
+
+#keyset[id]
+const_param_is_const(
+ int id: @const_param ref
+);
+
+#keyset[id]
+const_param_names(
+ int id: @const_param ref,
+ int name: @name ref
+);
+
+#keyset[id]
+const_param_type_reprs(
+ int id: @const_param ref,
+ int type_repr: @type_repr ref
+);
+
+continue_exprs(
+ unique int id: @continue_expr
+);
+
+#keyset[id, index]
+continue_expr_attrs(
+ int id: @continue_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+continue_expr_lifetimes(
+ int id: @continue_expr ref,
+ int lifetime: @lifetime ref
+);
+
+dyn_trait_type_reprs(
+ unique int id: @dyn_trait_type_repr
+);
+
+#keyset[id]
+dyn_trait_type_repr_type_bound_lists(
+ int id: @dyn_trait_type_repr ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+expr_stmts(
+ unique int id: @expr_stmt
+);
+
+#keyset[id]
+expr_stmt_exprs(
+ int id: @expr_stmt ref,
+ int expr: @expr ref
+);
+
+field_exprs(
+ unique int id: @field_expr
+);
+
+#keyset[id, index]
+field_expr_attrs(
+ int id: @field_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+field_expr_containers(
+ int id: @field_expr ref,
+ int container: @expr ref
+);
+
+#keyset[id]
+field_expr_identifiers(
+ int id: @field_expr ref,
+ int identifier: @name_ref ref
+);
+
+fn_ptr_type_reprs(
+ unique int id: @fn_ptr_type_repr
+);
+
+#keyset[id]
+fn_ptr_type_repr_abis(
+ int id: @fn_ptr_type_repr ref,
+ int abi: @abi ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_async(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_const(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_unsafe(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_param_lists(
+ int id: @fn_ptr_type_repr ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_ret_types(
+ int id: @fn_ptr_type_repr ref,
+ int ret_type: @ret_type_repr ref
+);
+
+for_type_reprs(
+ unique int id: @for_type_repr
+);
+
+#keyset[id]
+for_type_repr_generic_param_lists(
+ int id: @for_type_repr ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+for_type_repr_type_reprs(
+ int id: @for_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+format_args_exprs(
+ unique int id: @format_args_expr
+);
+
+#keyset[id, index]
+format_args_expr_args(
+ int id: @format_args_expr ref,
+ int index: int ref,
+ int arg: @format_args_arg ref
+);
+
+#keyset[id, index]
+format_args_expr_attrs(
+ int id: @format_args_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+format_args_expr_templates(
+ int id: @format_args_expr ref,
+ int template: @expr ref
+);
+
+ident_pats(
+ unique int id: @ident_pat
+);
+
+#keyset[id, index]
+ident_pat_attrs(
+ int id: @ident_pat ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+ident_pat_is_mut(
+ int id: @ident_pat ref
+);
+
+#keyset[id]
+ident_pat_is_ref(
+ int id: @ident_pat ref
+);
+
+#keyset[id]
+ident_pat_names(
+ int id: @ident_pat ref,
+ int name: @name ref
+);
+
+#keyset[id]
+ident_pat_pats(
+ int id: @ident_pat ref,
+ int pat: @pat ref
+);
+
+if_exprs(
+ unique int id: @if_expr
+);
+
+#keyset[id, index]
+if_expr_attrs(
+ int id: @if_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+if_expr_conditions(
+ int id: @if_expr ref,
+ int condition: @expr ref
+);
+
+#keyset[id]
+if_expr_elses(
+ int id: @if_expr ref,
+ int else: @expr ref
+);
+
+#keyset[id]
+if_expr_thens(
+ int id: @if_expr ref,
+ int then: @block_expr ref
+);
+
+impl_trait_type_reprs(
+ unique int id: @impl_trait_type_repr
+);
+
+#keyset[id]
+impl_trait_type_repr_type_bound_lists(
+ int id: @impl_trait_type_repr ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+index_exprs(
+ unique int id: @index_expr
+);
+
+#keyset[id, index]
+index_expr_attrs(
+ int id: @index_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+index_expr_bases(
+ int id: @index_expr ref,
+ int base: @expr ref
+);
+
+#keyset[id]
+index_expr_indices(
+ int id: @index_expr ref,
+ int index: @expr ref
+);
+
+infer_type_reprs(
+ unique int id: @infer_type_repr
+);
+
+@item =
+ @adt
+| @assoc_item
+| @extern_block
+| @extern_crate
+| @extern_item
+| @impl
+| @macro_def
+| @macro_rules
+| @module
+| @trait
+| @trait_alias
+| @use
+;
+
+#keyset[id]
+item_attribute_macro_expansions(
+ int id: @item ref,
+ int attribute_macro_expansion: @macro_items ref
+);
+
+@labelable_expr =
+ @block_expr
+| @looping_expr
+;
+
+#keyset[id]
+labelable_expr_labels(
+ int id: @labelable_expr ref,
+ int label: @label ref
+);
+
+let_exprs(
+ unique int id: @let_expr
+);
+
+#keyset[id, index]
+let_expr_attrs(
+ int id: @let_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+let_expr_scrutinees(
+ int id: @let_expr ref,
+ int scrutinee: @expr ref
+);
+
+#keyset[id]
+let_expr_pats(
+ int id: @let_expr ref,
+ int pat: @pat ref
+);
+
+let_stmts(
+ unique int id: @let_stmt
+);
+
+#keyset[id, index]
+let_stmt_attrs(
+ int id: @let_stmt ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+let_stmt_initializers(
+ int id: @let_stmt ref,
+ int initializer: @expr ref
+);
+
+#keyset[id]
+let_stmt_let_elses(
+ int id: @let_stmt ref,
+ int let_else: @let_else ref
+);
+
+#keyset[id]
+let_stmt_pats(
+ int id: @let_stmt ref,
+ int pat: @pat ref
+);
+
+#keyset[id]
+let_stmt_type_reprs(
+ int id: @let_stmt ref,
+ int type_repr: @type_repr ref
+);
+
+lifetimes(
+ unique int id: @lifetime
+);
+
+#keyset[id]
+lifetime_texts(
+ int id: @lifetime ref,
+ string text: string ref
+);
+
+lifetime_args(
+ unique int id: @lifetime_arg
+);
+
+#keyset[id]
+lifetime_arg_lifetimes(
+ int id: @lifetime_arg ref,
+ int lifetime: @lifetime ref
+);
+
+lifetime_params(
+ unique int id: @lifetime_param
+);
+
+#keyset[id, index]
+lifetime_param_attrs(
+ int id: @lifetime_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+lifetime_param_lifetimes(
+ int id: @lifetime_param ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+lifetime_param_type_bound_lists(
+ int id: @lifetime_param ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+literal_exprs(
+ unique int id: @literal_expr
+);
+
+#keyset[id, index]
+literal_expr_attrs(
+ int id: @literal_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+literal_expr_text_values(
+ int id: @literal_expr ref,
+ string text_value: string ref
+);
+
+literal_pats(
+ unique int id: @literal_pat
+);
+
+#keyset[id]
+literal_pat_literals(
+ int id: @literal_pat ref,
+ int literal: @literal_expr ref
+);
+
+macro_block_exprs(
+ unique int id: @macro_block_expr
+);
+
+#keyset[id]
+macro_block_expr_tail_exprs(
+ int id: @macro_block_expr ref,
+ int tail_expr: @expr ref
+);
+
+#keyset[id, index]
+macro_block_expr_statements(
+ int id: @macro_block_expr ref,
+ int index: int ref,
+ int statement: @stmt ref
+);
+
+macro_exprs(
+ unique int id: @macro_expr
+);
+
+#keyset[id]
+macro_expr_macro_calls(
+ int id: @macro_expr ref,
+ int macro_call: @macro_call ref
+);
+
+macro_pats(
+ unique int id: @macro_pat
+);
+
+#keyset[id]
+macro_pat_macro_calls(
+ int id: @macro_pat ref,
+ int macro_call: @macro_call ref
+);
+
+macro_type_reprs(
+ unique int id: @macro_type_repr
+);
+
+#keyset[id]
+macro_type_repr_macro_calls(
+ int id: @macro_type_repr ref,
+ int macro_call: @macro_call ref
+);
+
+match_exprs(
+ unique int id: @match_expr
+);
+
+#keyset[id, index]
+match_expr_attrs(
+ int id: @match_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+match_expr_scrutinees(
+ int id: @match_expr ref,
+ int scrutinee: @expr ref
+);
+
+#keyset[id]
+match_expr_match_arm_lists(
+ int id: @match_expr ref,
+ int match_arm_list: @match_arm_list ref
+);
+
+name_refs(
+ unique int id: @name_ref
+);
+
+#keyset[id]
+name_ref_texts(
+ int id: @name_ref ref,
+ string text: string ref
+);
+
+never_type_reprs(
+ unique int id: @never_type_repr
+);
+
+offset_of_exprs(
+ unique int id: @offset_of_expr
+);
+
+#keyset[id, index]
+offset_of_expr_attrs(
+ int id: @offset_of_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+offset_of_expr_fields(
+ int id: @offset_of_expr ref,
+ int index: int ref,
+ int field: @name_ref ref
+);
+
+#keyset[id]
+offset_of_expr_type_reprs(
+ int id: @offset_of_expr ref,
+ int type_repr: @type_repr ref
+);
+
+or_pats(
+ unique int id: @or_pat
+);
+
+#keyset[id, index]
+or_pat_pats(
+ int id: @or_pat ref,
+ int index: int ref,
+ int pat: @pat ref
+);
+
+params(
+ unique int id: @param
+);
+
+#keyset[id]
+param_pats(
+ int id: @param ref,
+ int pat: @pat ref
+);
+
+paren_exprs(
+ unique int id: @paren_expr
+);
+
+#keyset[id, index]
+paren_expr_attrs(
+ int id: @paren_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+paren_expr_exprs(
+ int id: @paren_expr ref,
+ int expr: @expr ref
+);
+
+paren_pats(
+ unique int id: @paren_pat
+);
+
+#keyset[id]
+paren_pat_pats(
+ int id: @paren_pat ref,
+ int pat: @pat ref
+);
+
+paren_type_reprs(
+ unique int id: @paren_type_repr
+);
+
+#keyset[id]
+paren_type_repr_type_reprs(
+ int id: @paren_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+@path_ast_node =
+ @path_expr
+| @path_pat
+| @struct_expr
+| @struct_pat
+| @tuple_struct_pat
+;
+
+#keyset[id]
+path_ast_node_paths(
+ int id: @path_ast_node ref,
+ int path: @path ref
+);
+
+@path_expr_base =
+ @path_expr
+;
+
+path_type_reprs(
+ unique int id: @path_type_repr
+);
+
+#keyset[id]
+path_type_repr_paths(
+ int id: @path_type_repr ref,
+ int path: @path ref
+);
+
+prefix_exprs(
+ unique int id: @prefix_expr
+);
+
+#keyset[id, index]
+prefix_expr_attrs(
+ int id: @prefix_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+prefix_expr_exprs(
+ int id: @prefix_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+prefix_expr_operator_names(
+ int id: @prefix_expr ref,
+ string operator_name: string ref
+);
+
+ptr_type_reprs(
+ unique int id: @ptr_type_repr
+);
+
+#keyset[id]
+ptr_type_repr_is_const(
+ int id: @ptr_type_repr ref
+);
+
+#keyset[id]
+ptr_type_repr_is_mut(
+ int id: @ptr_type_repr ref
+);
+
+#keyset[id]
+ptr_type_repr_type_reprs(
+ int id: @ptr_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+range_exprs(
+ unique int id: @range_expr
+);
+
+#keyset[id, index]
+range_expr_attrs(
+ int id: @range_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+range_expr_ends(
+ int id: @range_expr ref,
+ int end: @expr ref
+);
+
+#keyset[id]
+range_expr_operator_names(
+ int id: @range_expr ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+range_expr_starts(
+ int id: @range_expr ref,
+ int start: @expr ref
+);
+
+range_pats(
+ unique int id: @range_pat
+);
+
+#keyset[id]
+range_pat_ends(
+ int id: @range_pat ref,
+ int end: @pat ref
+);
+
+#keyset[id]
+range_pat_operator_names(
+ int id: @range_pat ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+range_pat_starts(
+ int id: @range_pat ref,
+ int start: @pat ref
+);
+
+ref_exprs(
+ unique int id: @ref_expr
+);
+
+#keyset[id, index]
+ref_expr_attrs(
+ int id: @ref_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+ref_expr_exprs(
+ int id: @ref_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+ref_expr_is_const(
+ int id: @ref_expr ref
+);
+
+#keyset[id]
+ref_expr_is_mut(
+ int id: @ref_expr ref
+);
+
+#keyset[id]
+ref_expr_is_raw(
+ int id: @ref_expr ref
+);
+
+ref_pats(
+ unique int id: @ref_pat
+);
+
+#keyset[id]
+ref_pat_is_mut(
+ int id: @ref_pat ref
+);
+
+#keyset[id]
+ref_pat_pats(
+ int id: @ref_pat ref,
+ int pat: @pat ref
+);
+
+ref_type_reprs(
+ unique int id: @ref_type_repr
+);
+
+#keyset[id]
+ref_type_repr_is_mut(
+ int id: @ref_type_repr ref
+);
+
+#keyset[id]
+ref_type_repr_lifetimes(
+ int id: @ref_type_repr ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+ref_type_repr_type_reprs(
+ int id: @ref_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+rest_pats(
+ unique int id: @rest_pat
+);
+
+#keyset[id, index]
+rest_pat_attrs(
+ int id: @rest_pat ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+return_exprs(
+ unique int id: @return_expr
+);
+
+#keyset[id, index]
+return_expr_attrs(
+ int id: @return_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+return_expr_exprs(
+ int id: @return_expr ref,
+ int expr: @expr ref
+);
+
+self_params(
+ unique int id: @self_param
+);
+
+#keyset[id]
+self_param_is_ref(
+ int id: @self_param ref
+);
+
+#keyset[id]
+self_param_is_mut(
+ int id: @self_param ref
+);
+
+#keyset[id]
+self_param_lifetimes(
+ int id: @self_param ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+self_param_names(
+ int id: @self_param ref,
+ int name: @name ref
+);
+
+slice_pats(
+ unique int id: @slice_pat
+);
+
+#keyset[id, index]
+slice_pat_pats(
+ int id: @slice_pat ref,
+ int index: int ref,
+ int pat: @pat ref
+);
+
+slice_type_reprs(
+ unique int id: @slice_type_repr
+);
+
+#keyset[id]
+slice_type_repr_type_reprs(
+ int id: @slice_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+struct_field_lists(
+ unique int id: @struct_field_list
+);
+
+#keyset[id, index]
+struct_field_list_fields(
+ int id: @struct_field_list ref,
+ int index: int ref,
+ int field: @struct_field ref
+);
+
+try_exprs(
+ unique int id: @try_expr
+);
+
+#keyset[id, index]
+try_expr_attrs(
+ int id: @try_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+try_expr_exprs(
+ int id: @try_expr ref,
+ int expr: @expr ref
+);
+
+tuple_exprs(
+ unique int id: @tuple_expr
+);
+
+#keyset[id, index]
+tuple_expr_attrs(
+ int id: @tuple_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+tuple_expr_fields(
+ int id: @tuple_expr ref,
+ int index: int ref,
+ int field: @expr ref
+);
+
+tuple_field_lists(
+ unique int id: @tuple_field_list
+);
+
+#keyset[id, index]
+tuple_field_list_fields(
+ int id: @tuple_field_list ref,
+ int index: int ref,
+ int field: @tuple_field ref
+);
+
+tuple_pats(
+ unique int id: @tuple_pat
+);
+
+#keyset[id, index]
+tuple_pat_fields(
+ int id: @tuple_pat ref,
+ int index: int ref,
+ int field: @pat ref
+);
+
+tuple_type_reprs(
+ unique int id: @tuple_type_repr
+);
+
+#keyset[id, index]
+tuple_type_repr_fields(
+ int id: @tuple_type_repr ref,
+ int index: int ref,
+ int field: @type_repr ref
+);
+
+type_args(
+ unique int id: @type_arg
+);
+
+#keyset[id]
+type_arg_type_reprs(
+ int id: @type_arg ref,
+ int type_repr: @type_repr ref
+);
+
+type_params(
+ unique int id: @type_param
+);
+
+#keyset[id, index]
+type_param_attrs(
+ int id: @type_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+type_param_default_types(
+ int id: @type_param ref,
+ int default_type: @type_repr ref
+);
+
+#keyset[id]
+type_param_names(
+ int id: @type_param ref,
+ int name: @name ref
+);
+
+#keyset[id]
+type_param_type_bound_lists(
+ int id: @type_param ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+underscore_exprs(
+ unique int id: @underscore_expr
+);
+
+#keyset[id, index]
+underscore_expr_attrs(
+ int id: @underscore_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+variants(
+ unique int id: @variant
+);
+
+#keyset[id, index]
+variant_attrs(
+ int id: @variant ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+variant_discriminants(
+ int id: @variant ref,
+ int discriminant: @expr ref
+);
+
+#keyset[id]
+variant_field_lists(
+ int id: @variant ref,
+ int field_list: @field_list ref
+);
+
+#keyset[id]
+variant_names(
+ int id: @variant ref,
+ int name: @name ref
+);
+
+#keyset[id]
+variant_visibilities(
+ int id: @variant ref,
+ int visibility: @visibility ref
+);
+
+wildcard_pats(
+ unique int id: @wildcard_pat
+);
+
+yeet_exprs(
+ unique int id: @yeet_expr
+);
+
+#keyset[id, index]
+yeet_expr_attrs(
+ int id: @yeet_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+yeet_expr_exprs(
+ int id: @yeet_expr ref,
+ int expr: @expr ref
+);
+
+yield_exprs(
+ unique int id: @yield_expr
+);
+
+#keyset[id, index]
+yield_expr_attrs(
+ int id: @yield_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+yield_expr_exprs(
+ int id: @yield_expr ref,
+ int expr: @expr ref
+);
+
+@adt =
+ @enum
+| @struct
+| @union
+;
+
+#keyset[id, index]
+adt_derive_macro_expansions(
+ int id: @adt ref,
+ int index: int ref,
+ int derive_macro_expansion: @macro_items ref
+);
+
+@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: @attr ref
+);
+
+#keyset[id]
+block_expr_is_async(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_const(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_gen(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_move(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_try(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_unsafe(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_stmt_lists(
+ int id: @block_expr ref,
+ int stmt_list: @stmt_list ref
+);
+
+call_exprs(
+ unique int id: @call_expr
+);
+
+#keyset[id]
+call_expr_functions(
+ int id: @call_expr ref,
+ int function: @expr ref
+);
+
+extern_blocks(
+ unique int id: @extern_block
+);
+
+#keyset[id]
+extern_block_abis(
+ int id: @extern_block ref,
+ int abi: @abi ref
+);
+
+#keyset[id, index]
+extern_block_attrs(
+ int id: @extern_block ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+extern_block_extern_item_lists(
+ int id: @extern_block ref,
+ int extern_item_list: @extern_item_list ref
+);
+
+#keyset[id]
+extern_block_is_unsafe(
+ int id: @extern_block ref
+);
+
+extern_crates(
+ unique int id: @extern_crate
+);
+
+#keyset[id, index]
+extern_crate_attrs(
+ int id: @extern_crate ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+extern_crate_identifiers(
+ int id: @extern_crate ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+extern_crate_renames(
+ int id: @extern_crate ref,
+ int rename: @rename ref
+);
+
+#keyset[id]
+extern_crate_visibilities(
+ int id: @extern_crate ref,
+ int visibility: @visibility ref
+);
+
+@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: @attr ref
+);
+
+#keyset[id]
+impl_generic_param_lists(
+ int id: @impl ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+impl_is_const(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_is_default(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_is_unsafe(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_self_ties(
+ int id: @impl ref,
+ int self_ty: @type_repr ref
+);
+
+#keyset[id]
+impl_traits(
+ int id: @impl ref,
+ int trait: @type_repr ref
+);
+
+#keyset[id]
+impl_visibilities(
+ int id: @impl ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+impl_where_clauses(
+ int id: @impl ref,
+ int where_clause: @where_clause ref
+);
+
+@looping_expr =
+ @for_expr
+| @loop_expr
+| @while_expr
+;
+
+#keyset[id]
+looping_expr_loop_bodies(
+ int id: @looping_expr ref,
+ int loop_body: @block_expr ref
+);
+
+macro_defs(
+ unique int id: @macro_def
+);
+
+#keyset[id]
+macro_def_args(
+ int id: @macro_def ref,
+ int args: @token_tree ref
+);
+
+#keyset[id, index]
+macro_def_attrs(
+ int id: @macro_def ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_def_bodies(
+ int id: @macro_def ref,
+ int body: @token_tree ref
+);
+
+#keyset[id]
+macro_def_names(
+ int id: @macro_def ref,
+ int name: @name ref
+);
+
+#keyset[id]
+macro_def_visibilities(
+ int id: @macro_def ref,
+ int visibility: @visibility ref
+);
+
+macro_rules(
+ unique int id: @macro_rules
+);
+
+#keyset[id, index]
+macro_rules_attrs(
+ int id: @macro_rules ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_rules_names(
+ int id: @macro_rules ref,
+ int name: @name ref
+);
+
+#keyset[id]
+macro_rules_token_trees(
+ int id: @macro_rules ref,
+ int token_tree: @token_tree ref
+);
+
+#keyset[id]
+macro_rules_visibilities(
+ int id: @macro_rules ref,
+ int visibility: @visibility ref
+);
+
+method_call_exprs(
+ unique int id: @method_call_expr
+);
+
+#keyset[id]
+method_call_expr_generic_arg_lists(
+ int id: @method_call_expr ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+method_call_expr_identifiers(
+ int id: @method_call_expr ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+method_call_expr_receivers(
+ int id: @method_call_expr ref,
+ int receiver: @expr ref
+);
+
+modules(
+ unique int id: @module
+);
+
+#keyset[id, index]
+module_attrs(
+ int id: @module ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+module_item_lists(
+ int id: @module ref,
+ int item_list: @item_list ref
+);
+
+#keyset[id]
+module_names(
+ int id: @module ref,
+ int name: @name ref
+);
+
+#keyset[id]
+module_visibilities(
+ int id: @module ref,
+ int visibility: @visibility ref
+);
+
+path_exprs(
+ unique int id: @path_expr
+);
+
+#keyset[id, index]
+path_expr_attrs(
+ int id: @path_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+path_pats(
+ unique int id: @path_pat
+);
+
+struct_exprs(
+ unique int id: @struct_expr
+);
+
+#keyset[id]
+struct_expr_struct_expr_field_lists(
+ int id: @struct_expr ref,
+ int struct_expr_field_list: @struct_expr_field_list ref
+);
+
+struct_pats(
+ unique int id: @struct_pat
+);
+
+#keyset[id]
+struct_pat_struct_pat_field_lists(
+ int id: @struct_pat ref,
+ int struct_pat_field_list: @struct_pat_field_list ref
+);
+
+traits(
+ unique int id: @trait
+);
+
+#keyset[id]
+trait_assoc_item_lists(
+ int id: @trait ref,
+ int assoc_item_list: @assoc_item_list ref
+);
+
+#keyset[id, index]
+trait_attrs(
+ int id: @trait ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+trait_generic_param_lists(
+ int id: @trait ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+trait_is_auto(
+ int id: @trait ref
+);
+
+#keyset[id]
+trait_is_unsafe(
+ int id: @trait ref
+);
+
+#keyset[id]
+trait_names(
+ int id: @trait ref,
+ int name: @name ref
+);
+
+#keyset[id]
+trait_type_bound_lists(
+ int id: @trait ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+trait_visibilities(
+ int id: @trait ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+trait_where_clauses(
+ int id: @trait ref,
+ int where_clause: @where_clause ref
+);
+
+trait_aliases(
+ unique int id: @trait_alias
+);
+
+#keyset[id, index]
+trait_alias_attrs(
+ int id: @trait_alias ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+trait_alias_generic_param_lists(
+ int id: @trait_alias ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+trait_alias_names(
+ int id: @trait_alias ref,
+ int name: @name ref
+);
+
+#keyset[id]
+trait_alias_type_bound_lists(
+ int id: @trait_alias ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+trait_alias_visibilities(
+ int id: @trait_alias ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+trait_alias_where_clauses(
+ int id: @trait_alias ref,
+ int where_clause: @where_clause ref
+);
+
+tuple_struct_pats(
+ unique int id: @tuple_struct_pat
+);
+
+#keyset[id, index]
+tuple_struct_pat_fields(
+ int id: @tuple_struct_pat ref,
+ int index: int ref,
+ int field: @pat ref
+);
+
+uses(
+ unique int id: @use
+);
+
+#keyset[id, index]
+use_attrs(
+ int id: @use ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+use_use_trees(
+ int id: @use ref,
+ int use_tree: @use_tree ref
+);
+
+#keyset[id]
+use_visibilities(
+ int id: @use ref,
+ int visibility: @visibility ref
+);
+
+consts(
+ unique int id: @const
+);
+
+#keyset[id, index]
+const_attrs(
+ int id: @const ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+const_bodies(
+ int id: @const ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+const_generic_param_lists(
+ int id: @const ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+const_is_const(
+ int id: @const ref
+);
+
+#keyset[id]
+const_is_default(
+ int id: @const ref
+);
+
+#keyset[id]
+const_names(
+ int id: @const ref,
+ int name: @name ref
+);
+
+#keyset[id]
+const_type_reprs(
+ int id: @const ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+const_visibilities(
+ int id: @const ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+const_where_clauses(
+ int id: @const ref,
+ int where_clause: @where_clause ref
+);
+
+#keyset[id]
+const_has_implementation(
+ int id: @const ref
+);
+
+enums(
+ unique int id: @enum
+);
+
+#keyset[id, index]
+enum_attrs(
+ int id: @enum ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+enum_generic_param_lists(
+ int id: @enum ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+enum_names(
+ int id: @enum ref,
+ int name: @name ref
+);
+
+#keyset[id]
+enum_variant_lists(
+ int id: @enum ref,
+ int variant_list: @variant_list ref
+);
+
+#keyset[id]
+enum_visibilities(
+ int id: @enum ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+enum_where_clauses(
+ int id: @enum ref,
+ int where_clause: @where_clause ref
+);
+
+for_exprs(
+ unique int id: @for_expr
+);
+
+#keyset[id, index]
+for_expr_attrs(
+ int id: @for_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+for_expr_iterables(
+ int id: @for_expr ref,
+ int iterable: @expr ref
+);
+
+#keyset[id]
+for_expr_pats(
+ int id: @for_expr ref,
+ int pat: @pat ref
+);
+
+functions(
+ unique int id: @function
+);
+
+#keyset[id]
+function_abis(
+ int id: @function ref,
+ int abi: @abi ref
+);
+
+#keyset[id]
+function_bodies(
+ int id: @function ref,
+ int body: @block_expr ref
+);
+
+#keyset[id]
+function_generic_param_lists(
+ int id: @function ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+function_is_async(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_const(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_default(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_gen(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_unsafe(
+ int id: @function ref
+);
+
+#keyset[id]
+function_names(
+ int id: @function ref,
+ int name: @name ref
+);
+
+#keyset[id]
+function_ret_types(
+ int id: @function ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+function_visibilities(
+ int id: @function ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+function_where_clauses(
+ int id: @function ref,
+ int where_clause: @where_clause ref
+);
+
+#keyset[id]
+function_has_implementation(
+ int id: @function ref
+);
+
+loop_exprs(
+ unique int id: @loop_expr
+);
+
+#keyset[id, index]
+loop_expr_attrs(
+ int id: @loop_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+macro_calls(
+ unique int id: @macro_call
+);
+
+#keyset[id, index]
+macro_call_attrs(
+ int id: @macro_call ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_call_paths(
+ int id: @macro_call ref,
+ int path: @path ref
+);
+
+#keyset[id]
+macro_call_token_trees(
+ int id: @macro_call ref,
+ int token_tree: @token_tree ref
+);
+
+#keyset[id]
+macro_call_macro_call_expansions(
+ int id: @macro_call ref,
+ int macro_call_expansion: @ast_node ref
+);
+
+statics(
+ unique int id: @static
+);
+
+#keyset[id, index]
+static_attrs(
+ int id: @static ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+static_bodies(
+ int id: @static ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+static_is_mut(
+ int id: @static ref
+);
+
+#keyset[id]
+static_is_static(
+ int id: @static ref
+);
+
+#keyset[id]
+static_is_unsafe(
+ int id: @static ref
+);
+
+#keyset[id]
+static_names(
+ int id: @static ref,
+ int name: @name ref
+);
+
+#keyset[id]
+static_type_reprs(
+ int id: @static ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+static_visibilities(
+ int id: @static ref,
+ int visibility: @visibility ref
+);
+
+structs(
+ unique int id: @struct
+);
+
+#keyset[id, index]
+struct_attrs(
+ int id: @struct ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_field_lists_(
+ int id: @struct ref,
+ int field_list: @field_list ref
+);
+
+#keyset[id]
+struct_generic_param_lists(
+ int id: @struct ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+struct_names(
+ int id: @struct ref,
+ int name: @name ref
+);
+
+#keyset[id]
+struct_visibilities(
+ int id: @struct ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+struct_where_clauses(
+ int id: @struct ref,
+ int where_clause: @where_clause ref
+);
+
+type_aliases(
+ unique int id: @type_alias
+);
+
+#keyset[id, index]
+type_alias_attrs(
+ int id: @type_alias ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+type_alias_generic_param_lists(
+ int id: @type_alias ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+type_alias_is_default(
+ int id: @type_alias ref
+);
+
+#keyset[id]
+type_alias_names(
+ int id: @type_alias ref,
+ int name: @name ref
+);
+
+#keyset[id]
+type_alias_type_reprs(
+ int id: @type_alias ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+type_alias_type_bound_lists(
+ int id: @type_alias ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+type_alias_visibilities(
+ int id: @type_alias ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+type_alias_where_clauses(
+ int id: @type_alias ref,
+ int where_clause: @where_clause ref
+);
+
+unions(
+ unique int id: @union
+);
+
+#keyset[id, index]
+union_attrs(
+ int id: @union ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+union_generic_param_lists(
+ int id: @union ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+union_names(
+ int id: @union ref,
+ int name: @name ref
+);
+
+#keyset[id]
+union_struct_field_lists(
+ int id: @union ref,
+ int struct_field_list: @struct_field_list ref
+);
+
+#keyset[id]
+union_visibilities(
+ int id: @union ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+union_where_clauses(
+ int id: @union ref,
+ int where_clause: @where_clause ref
+);
+
+while_exprs(
+ unique int id: @while_expr
+);
+
+#keyset[id, index]
+while_expr_attrs(
+ int id: @while_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+while_expr_conditions(
+ int id: @while_expr ref,
+ int condition: @expr ref
+);
diff --git a/rust/downgrades/319c933d9615ccf40f363548cafd51d08c74a534/upgrade.properties b/rust/downgrades/319c933d9615ccf40f363548cafd51d08c74a534/upgrade.properties
new file mode 100644
index 000000000000..9ff059c0f813
--- /dev/null
+++ b/rust/downgrades/319c933d9615ccf40f363548cafd51d08c74a534/upgrade.properties
@@ -0,0 +1,3 @@
+description: Add overlayChangedFiles relation
+compatibility: full
+overlayChangedFiles.rel: delete
diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme
index 8e9b0c516ae8..319c933d9615 100644
--- a/rust/ql/lib/rust.dbscheme
+++ b/rust/ql/lib/rust.dbscheme
@@ -114,6 +114,10 @@ databaseMetadata(
string value: string ref
);
+overlayChangedFiles(
+ string path: string ref
+);
+
// from prefix.dbscheme
#keyset[id]
diff --git a/rust/ql/lib/upgrades/8e9b0c516ae822286689672d1020707020128a19/old.dbscheme b/rust/ql/lib/upgrades/8e9b0c516ae822286689672d1020707020128a19/old.dbscheme
new file mode 100644
index 000000000000..8e9b0c516ae8
--- /dev/null
+++ b/rust/ql/lib/upgrades/8e9b0c516ae822286689672d1020707020128a19/old.dbscheme
@@ -0,0 +1,3633 @@
+// generated by codegen, do not edit
+
+// from ../shared/tree-sitter-extractor/src/generator/prefix.dbscheme
+/*- Files and folders -*/
+
+/**
+ * The location of an element.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_default(
+ unique int id: @location_default,
+ int file: @file ref,
+ int beginLine: int ref,
+ int beginColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+files(
+ unique int id: @file,
+ string name: string ref
+);
+
+folders(
+ unique int id: @folder,
+ string name: string ref
+);
+
+@container = @file | @folder
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref
+);
+
+/*- Empty location -*/
+
+empty_location(
+ int location: @location_default ref
+);
+
+/*- Source location prefix -*/
+
+/**
+ * The source location of the snapshot.
+ */
+sourceLocationPrefix(string prefix : string ref);
+
+/*- Diagnostic messages -*/
+
+diagnostics(
+ unique int id: @diagnostic,
+ int severity: int ref,
+ string error_tag: string ref,
+ string error_message: string ref,
+ string full_error_message: string ref,
+ int location: @location_default ref
+);
+
+/*- Diagnostic messages: severity -*/
+
+case @diagnostic.severity of
+ 10 = @diagnostic_debug
+| 20 = @diagnostic_info
+| 30 = @diagnostic_warning
+| 40 = @diagnostic_error
+;
+
+/*- YAML -*/
+
+#keyset[parent, idx]
+yaml (unique int id: @yaml_node,
+ int kind: int ref,
+ int parent: @yaml_node_parent ref,
+ int idx: int ref,
+ string tag: string ref,
+ string tostring: string ref);
+
+case @yaml_node.kind of
+ 0 = @yaml_scalar_node
+| 1 = @yaml_mapping_node
+| 2 = @yaml_sequence_node
+| 3 = @yaml_alias_node
+;
+
+@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node;
+
+@yaml_node_parent = @yaml_collection_node | @file;
+
+yaml_anchors (unique int node: @yaml_node ref,
+ string anchor: string ref);
+
+yaml_aliases (unique int alias: @yaml_alias_node ref,
+ string target: string ref);
+
+yaml_scalars (unique int scalar: @yaml_scalar_node ref,
+ int style: int ref,
+ string value: string ref);
+
+yaml_errors (unique int id: @yaml_error,
+ string message: string ref);
+
+yaml_locations(unique int locatable: @yaml_locatable ref,
+ int location: @location_default ref);
+
+@yaml_locatable = @yaml_node | @yaml_error;
+
+/*- Database metadata -*/
+databaseMetadata(
+ string metadataKey: string ref,
+ string value: string ref
+);
+
+
+// from prefix.dbscheme
+#keyset[id]
+locatable_locations(
+ int id: @locatable ref,
+ int location: @location_default ref
+);
+
+
+// from schema
+
+@element =
+ @extractor_step
+| @locatable
+| @named_crate
+| @unextracted
+;
+
+extractor_steps(
+ unique int id: @extractor_step,
+ string action: string ref,
+ int duration_ms: int ref
+);
+
+#keyset[id]
+extractor_step_files(
+ int id: @extractor_step ref,
+ int file: @file ref
+);
+
+@locatable =
+ @ast_node
+| @crate
+;
+
+named_crates(
+ unique int id: @named_crate,
+ string name: string ref,
+ int crate: @crate ref
+);
+
+@unextracted =
+ @missing
+| @unimplemented
+;
+
+@ast_node =
+ @abi
+| @addressable
+| @arg_list
+| @asm_dir_spec
+| @asm_operand
+| @asm_operand_expr
+| @asm_option
+| @asm_piece
+| @asm_reg_spec
+| @assoc_item_list
+| @attr
+| @callable
+| @closure_binder
+| @expr
+| @extern_item_list
+| @field_list
+| @format_args_arg
+| @generic_arg
+| @generic_arg_list
+| @generic_param
+| @generic_param_list
+| @item_list
+| @label
+| @let_else
+| @macro_items
+| @match_arm
+| @match_arm_list
+| @match_guard
+| @meta
+| @name
+| @param_base
+| @param_list
+| @parenthesized_arg_list
+| @pat
+| @path
+| @path_segment
+| @rename
+| @resolvable
+| @ret_type_repr
+| @return_type_syntax
+| @source_file
+| @stmt
+| @stmt_list
+| @struct_expr_field
+| @struct_expr_field_list
+| @struct_field
+| @struct_pat_field
+| @struct_pat_field_list
+| @token
+| @token_tree
+| @tuple_field
+| @type_bound
+| @type_bound_list
+| @type_repr
+| @use_bound_generic_arg
+| @use_bound_generic_args
+| @use_tree
+| @use_tree_list
+| @variant_list
+| @visibility
+| @where_clause
+| @where_pred
+;
+
+crates(
+ unique int id: @crate
+);
+
+#keyset[id]
+crate_names(
+ int id: @crate ref,
+ string name: string ref
+);
+
+#keyset[id]
+crate_versions(
+ int id: @crate ref,
+ string version: string ref
+);
+
+#keyset[id, index]
+crate_cfg_options(
+ int id: @crate ref,
+ int index: int ref,
+ string cfg_option: string ref
+);
+
+#keyset[id, index]
+crate_named_dependencies(
+ int id: @crate ref,
+ int index: int ref,
+ int named_dependency: @named_crate ref
+);
+
+missings(
+ unique int id: @missing
+);
+
+unimplementeds(
+ unique int id: @unimplemented
+);
+
+abis(
+ unique int id: @abi
+);
+
+#keyset[id]
+abi_abi_strings(
+ int id: @abi ref,
+ string abi_string: string ref
+);
+
+@addressable =
+ @item
+| @variant
+;
+
+#keyset[id]
+addressable_extended_canonical_paths(
+ int id: @addressable ref,
+ string extended_canonical_path: string ref
+);
+
+#keyset[id]
+addressable_crate_origins(
+ int id: @addressable ref,
+ string crate_origin: string ref
+);
+
+arg_lists(
+ unique int id: @arg_list
+);
+
+#keyset[id, index]
+arg_list_args(
+ int id: @arg_list ref,
+ int index: int ref,
+ int arg: @expr ref
+);
+
+asm_dir_specs(
+ unique int id: @asm_dir_spec
+);
+
+@asm_operand =
+ @asm_const
+| @asm_label
+| @asm_reg_operand
+| @asm_sym
+;
+
+asm_operand_exprs(
+ unique int id: @asm_operand_expr
+);
+
+#keyset[id]
+asm_operand_expr_in_exprs(
+ int id: @asm_operand_expr ref,
+ int in_expr: @expr ref
+);
+
+#keyset[id]
+asm_operand_expr_out_exprs(
+ int id: @asm_operand_expr ref,
+ int out_expr: @expr ref
+);
+
+asm_options(
+ unique int id: @asm_option
+);
+
+#keyset[id]
+asm_option_is_raw(
+ int id: @asm_option ref
+);
+
+@asm_piece =
+ @asm_clobber_abi
+| @asm_operand_named
+| @asm_options_list
+;
+
+asm_reg_specs(
+ unique int id: @asm_reg_spec
+);
+
+#keyset[id]
+asm_reg_spec_identifiers(
+ int id: @asm_reg_spec ref,
+ int identifier: @name_ref ref
+);
+
+assoc_item_lists(
+ unique int id: @assoc_item_list
+);
+
+#keyset[id, index]
+assoc_item_list_assoc_items(
+ int id: @assoc_item_list ref,
+ int index: int ref,
+ int assoc_item: @assoc_item ref
+);
+
+#keyset[id, index]
+assoc_item_list_attrs(
+ int id: @assoc_item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+attrs(
+ unique int id: @attr
+);
+
+#keyset[id]
+attr_meta(
+ int id: @attr ref,
+ int meta: @meta ref
+);
+
+@callable =
+ @closure_expr
+| @function
+;
+
+#keyset[id]
+callable_param_lists(
+ int id: @callable ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id, index]
+callable_attrs(
+ int id: @callable ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+closure_binders(
+ unique int id: @closure_binder
+);
+
+#keyset[id]
+closure_binder_generic_param_lists(
+ int id: @closure_binder ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+@expr =
+ @array_expr_internal
+| @asm_expr
+| @await_expr
+| @become_expr
+| @binary_expr
+| @break_expr
+| @call_expr_base
+| @cast_expr
+| @closure_expr
+| @continue_expr
+| @field_expr
+| @format_args_expr
+| @if_expr
+| @index_expr
+| @labelable_expr
+| @let_expr
+| @literal_expr
+| @macro_block_expr
+| @macro_expr
+| @match_expr
+| @offset_of_expr
+| @paren_expr
+| @path_expr_base
+| @prefix_expr
+| @range_expr
+| @ref_expr
+| @return_expr
+| @struct_expr
+| @try_expr
+| @tuple_expr
+| @underscore_expr
+| @yeet_expr
+| @yield_expr
+;
+
+extern_item_lists(
+ unique int id: @extern_item_list
+);
+
+#keyset[id, index]
+extern_item_list_attrs(
+ int id: @extern_item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+extern_item_list_extern_items(
+ int id: @extern_item_list ref,
+ int index: int ref,
+ int extern_item: @extern_item ref
+);
+
+@field_list =
+ @struct_field_list
+| @tuple_field_list
+;
+
+format_args_args(
+ unique int id: @format_args_arg
+);
+
+#keyset[id]
+format_args_arg_exprs(
+ int id: @format_args_arg ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+format_args_arg_names(
+ int id: @format_args_arg ref,
+ int name: @name ref
+);
+
+@generic_arg =
+ @assoc_type_arg
+| @const_arg
+| @lifetime_arg
+| @type_arg
+;
+
+generic_arg_lists(
+ unique int id: @generic_arg_list
+);
+
+#keyset[id, index]
+generic_arg_list_generic_args(
+ int id: @generic_arg_list ref,
+ int index: int ref,
+ int generic_arg: @generic_arg ref
+);
+
+@generic_param =
+ @const_param
+| @lifetime_param
+| @type_param
+;
+
+generic_param_lists(
+ unique int id: @generic_param_list
+);
+
+#keyset[id, index]
+generic_param_list_generic_params(
+ int id: @generic_param_list ref,
+ int index: int ref,
+ int generic_param: @generic_param ref
+);
+
+item_lists(
+ unique int id: @item_list
+);
+
+#keyset[id, index]
+item_list_attrs(
+ int id: @item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+item_list_items(
+ int id: @item_list ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+labels(
+ unique int id: @label
+);
+
+#keyset[id]
+label_lifetimes(
+ int id: @label ref,
+ int lifetime: @lifetime ref
+);
+
+let_elses(
+ unique int id: @let_else
+);
+
+#keyset[id]
+let_else_block_exprs(
+ int id: @let_else ref,
+ int block_expr: @block_expr ref
+);
+
+macro_items(
+ unique int id: @macro_items
+);
+
+#keyset[id, index]
+macro_items_items(
+ int id: @macro_items ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+match_arms(
+ unique int id: @match_arm
+);
+
+#keyset[id, index]
+match_arm_attrs(
+ int id: @match_arm ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+match_arm_exprs(
+ int id: @match_arm ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+match_arm_guards(
+ int id: @match_arm ref,
+ int guard: @match_guard ref
+);
+
+#keyset[id]
+match_arm_pats(
+ int id: @match_arm ref,
+ int pat: @pat ref
+);
+
+match_arm_lists(
+ unique int id: @match_arm_list
+);
+
+#keyset[id, index]
+match_arm_list_arms(
+ int id: @match_arm_list ref,
+ int index: int ref,
+ int arm: @match_arm ref
+);
+
+#keyset[id, index]
+match_arm_list_attrs(
+ int id: @match_arm_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+match_guards(
+ unique int id: @match_guard
+);
+
+#keyset[id]
+match_guard_conditions(
+ int id: @match_guard ref,
+ int condition: @expr ref
+);
+
+meta(
+ unique int id: @meta
+);
+
+#keyset[id]
+meta_exprs(
+ int id: @meta ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+meta_is_unsafe(
+ int id: @meta ref
+);
+
+#keyset[id]
+meta_paths(
+ int id: @meta ref,
+ int path: @path ref
+);
+
+#keyset[id]
+meta_token_trees(
+ int id: @meta ref,
+ int token_tree: @token_tree ref
+);
+
+names(
+ unique int id: @name
+);
+
+#keyset[id]
+name_texts(
+ int id: @name ref,
+ string text: string ref
+);
+
+@param_base =
+ @param
+| @self_param
+;
+
+#keyset[id, index]
+param_base_attrs(
+ int id: @param_base ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+param_base_type_reprs(
+ int id: @param_base ref,
+ int type_repr: @type_repr ref
+);
+
+param_lists(
+ unique int id: @param_list
+);
+
+#keyset[id, index]
+param_list_params(
+ int id: @param_list ref,
+ int index: int ref,
+ int param: @param ref
+);
+
+#keyset[id]
+param_list_self_params(
+ int id: @param_list ref,
+ int self_param: @self_param ref
+);
+
+parenthesized_arg_lists(
+ unique int id: @parenthesized_arg_list
+);
+
+#keyset[id, index]
+parenthesized_arg_list_type_args(
+ int id: @parenthesized_arg_list ref,
+ int index: int ref,
+ int type_arg: @type_arg ref
+);
+
+@pat =
+ @box_pat
+| @const_block_pat
+| @ident_pat
+| @literal_pat
+| @macro_pat
+| @or_pat
+| @paren_pat
+| @path_pat
+| @range_pat
+| @ref_pat
+| @rest_pat
+| @slice_pat
+| @struct_pat
+| @tuple_pat
+| @tuple_struct_pat
+| @wildcard_pat
+;
+
+paths(
+ unique int id: @path
+);
+
+#keyset[id]
+path_qualifiers(
+ int id: @path ref,
+ int qualifier: @path ref
+);
+
+#keyset[id]
+path_segments_(
+ int id: @path ref,
+ int segment: @path_segment ref
+);
+
+path_segments(
+ unique int id: @path_segment
+);
+
+#keyset[id]
+path_segment_generic_arg_lists(
+ int id: @path_segment ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+path_segment_identifiers(
+ int id: @path_segment ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+path_segment_parenthesized_arg_lists(
+ int id: @path_segment ref,
+ int parenthesized_arg_list: @parenthesized_arg_list ref
+);
+
+#keyset[id]
+path_segment_ret_types(
+ int id: @path_segment ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+path_segment_return_type_syntaxes(
+ int id: @path_segment ref,
+ int return_type_syntax: @return_type_syntax ref
+);
+
+#keyset[id]
+path_segment_type_reprs(
+ int id: @path_segment ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+path_segment_trait_type_reprs(
+ int id: @path_segment ref,
+ int trait_type_repr: @path_type_repr ref
+);
+
+renames(
+ unique int id: @rename
+);
+
+#keyset[id]
+rename_names(
+ int id: @rename ref,
+ int name: @name ref
+);
+
+@resolvable =
+ @method_call_expr
+| @path_ast_node
+;
+
+#keyset[id]
+resolvable_resolved_paths(
+ int id: @resolvable ref,
+ string resolved_path: string ref
+);
+
+#keyset[id]
+resolvable_resolved_crate_origins(
+ int id: @resolvable ref,
+ string resolved_crate_origin: string ref
+);
+
+ret_type_reprs(
+ unique int id: @ret_type_repr
+);
+
+#keyset[id]
+ret_type_repr_type_reprs(
+ int id: @ret_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+return_type_syntaxes(
+ unique int id: @return_type_syntax
+);
+
+source_files(
+ unique int id: @source_file
+);
+
+#keyset[id, index]
+source_file_attrs(
+ int id: @source_file ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+source_file_items(
+ int id: @source_file ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+@stmt =
+ @expr_stmt
+| @item
+| @let_stmt
+;
+
+stmt_lists(
+ unique int id: @stmt_list
+);
+
+#keyset[id, index]
+stmt_list_attrs(
+ int id: @stmt_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+stmt_list_statements(
+ int id: @stmt_list ref,
+ int index: int ref,
+ int statement: @stmt ref
+);
+
+#keyset[id]
+stmt_list_tail_exprs(
+ int id: @stmt_list ref,
+ int tail_expr: @expr ref
+);
+
+struct_expr_fields(
+ unique int id: @struct_expr_field
+);
+
+#keyset[id, index]
+struct_expr_field_attrs(
+ int id: @struct_expr_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_expr_field_exprs(
+ int id: @struct_expr_field ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+struct_expr_field_identifiers(
+ int id: @struct_expr_field ref,
+ int identifier: @name_ref ref
+);
+
+struct_expr_field_lists(
+ unique int id: @struct_expr_field_list
+);
+
+#keyset[id, index]
+struct_expr_field_list_attrs(
+ int id: @struct_expr_field_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+struct_expr_field_list_fields(
+ int id: @struct_expr_field_list ref,
+ int index: int ref,
+ int field: @struct_expr_field ref
+);
+
+#keyset[id]
+struct_expr_field_list_spreads(
+ int id: @struct_expr_field_list ref,
+ int spread: @expr ref
+);
+
+struct_fields(
+ unique int id: @struct_field
+);
+
+#keyset[id, index]
+struct_field_attrs(
+ int id: @struct_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_field_defaults(
+ int id: @struct_field ref,
+ int default: @expr ref
+);
+
+#keyset[id]
+struct_field_is_unsafe(
+ int id: @struct_field ref
+);
+
+#keyset[id]
+struct_field_names(
+ int id: @struct_field ref,
+ int name: @name ref
+);
+
+#keyset[id]
+struct_field_type_reprs(
+ int id: @struct_field ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+struct_field_visibilities(
+ int id: @struct_field ref,
+ int visibility: @visibility ref
+);
+
+struct_pat_fields(
+ unique int id: @struct_pat_field
+);
+
+#keyset[id, index]
+struct_pat_field_attrs(
+ int id: @struct_pat_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_pat_field_identifiers(
+ int id: @struct_pat_field ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+struct_pat_field_pats(
+ int id: @struct_pat_field ref,
+ int pat: @pat ref
+);
+
+struct_pat_field_lists(
+ unique int id: @struct_pat_field_list
+);
+
+#keyset[id, index]
+struct_pat_field_list_fields(
+ int id: @struct_pat_field_list ref,
+ int index: int ref,
+ int field: @struct_pat_field ref
+);
+
+#keyset[id]
+struct_pat_field_list_rest_pats(
+ int id: @struct_pat_field_list ref,
+ int rest_pat: @rest_pat ref
+);
+
+@token =
+ @comment
+;
+
+token_trees(
+ unique int id: @token_tree
+);
+
+tuple_fields(
+ unique int id: @tuple_field
+);
+
+#keyset[id, index]
+tuple_field_attrs(
+ int id: @tuple_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+tuple_field_type_reprs(
+ int id: @tuple_field ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+tuple_field_visibilities(
+ int id: @tuple_field ref,
+ int visibility: @visibility ref
+);
+
+type_bounds(
+ unique int id: @type_bound
+);
+
+#keyset[id]
+type_bound_is_async(
+ int id: @type_bound ref
+);
+
+#keyset[id]
+type_bound_is_const(
+ int id: @type_bound ref
+);
+
+#keyset[id]
+type_bound_lifetimes(
+ int id: @type_bound ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+type_bound_type_reprs(
+ int id: @type_bound ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+type_bound_use_bound_generic_args(
+ int id: @type_bound ref,
+ int use_bound_generic_args: @use_bound_generic_args ref
+);
+
+type_bound_lists(
+ unique int id: @type_bound_list
+);
+
+#keyset[id, index]
+type_bound_list_bounds(
+ int id: @type_bound_list ref,
+ int index: int ref,
+ int bound: @type_bound ref
+);
+
+@type_repr =
+ @array_type_repr
+| @dyn_trait_type_repr
+| @fn_ptr_type_repr
+| @for_type_repr
+| @impl_trait_type_repr
+| @infer_type_repr
+| @macro_type_repr
+| @never_type_repr
+| @paren_type_repr
+| @path_type_repr
+| @ptr_type_repr
+| @ref_type_repr
+| @slice_type_repr
+| @tuple_type_repr
+;
+
+@use_bound_generic_arg =
+ @lifetime
+| @name_ref
+;
+
+use_bound_generic_args(
+ unique int id: @use_bound_generic_args
+);
+
+#keyset[id, index]
+use_bound_generic_args_use_bound_generic_args(
+ int id: @use_bound_generic_args ref,
+ int index: int ref,
+ int use_bound_generic_arg: @use_bound_generic_arg ref
+);
+
+use_trees(
+ unique int id: @use_tree
+);
+
+#keyset[id]
+use_tree_is_glob(
+ int id: @use_tree ref
+);
+
+#keyset[id]
+use_tree_paths(
+ int id: @use_tree ref,
+ int path: @path ref
+);
+
+#keyset[id]
+use_tree_renames(
+ int id: @use_tree ref,
+ int rename: @rename ref
+);
+
+#keyset[id]
+use_tree_use_tree_lists(
+ int id: @use_tree ref,
+ int use_tree_list: @use_tree_list ref
+);
+
+use_tree_lists(
+ unique int id: @use_tree_list
+);
+
+#keyset[id, index]
+use_tree_list_use_trees(
+ int id: @use_tree_list ref,
+ int index: int ref,
+ int use_tree: @use_tree ref
+);
+
+variant_lists(
+ unique int id: @variant_list
+);
+
+#keyset[id, index]
+variant_list_variants(
+ int id: @variant_list ref,
+ int index: int ref,
+ int variant: @variant ref
+);
+
+visibilities(
+ unique int id: @visibility
+);
+
+#keyset[id]
+visibility_paths(
+ int id: @visibility ref,
+ int path: @path ref
+);
+
+where_clauses(
+ unique int id: @where_clause
+);
+
+#keyset[id, index]
+where_clause_predicates(
+ int id: @where_clause ref,
+ int index: int ref,
+ int predicate: @where_pred ref
+);
+
+where_preds(
+ unique int id: @where_pred
+);
+
+#keyset[id]
+where_pred_generic_param_lists(
+ int id: @where_pred ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+where_pred_lifetimes(
+ int id: @where_pred ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+where_pred_type_reprs(
+ int id: @where_pred ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+where_pred_type_bound_lists(
+ int id: @where_pred ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+array_expr_internals(
+ unique int id: @array_expr_internal
+);
+
+#keyset[id, index]
+array_expr_internal_attrs(
+ int id: @array_expr_internal ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+array_expr_internal_exprs(
+ int id: @array_expr_internal ref,
+ int index: int ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+array_expr_internal_is_semicolon(
+ int id: @array_expr_internal ref
+);
+
+array_type_reprs(
+ unique int id: @array_type_repr
+);
+
+#keyset[id]
+array_type_repr_const_args(
+ int id: @array_type_repr ref,
+ int const_arg: @const_arg ref
+);
+
+#keyset[id]
+array_type_repr_element_type_reprs(
+ int id: @array_type_repr ref,
+ int element_type_repr: @type_repr ref
+);
+
+asm_clobber_abis(
+ unique int id: @asm_clobber_abi
+);
+
+asm_consts(
+ unique int id: @asm_const
+);
+
+#keyset[id]
+asm_const_exprs(
+ int id: @asm_const ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+asm_const_is_const(
+ int id: @asm_const ref
+);
+
+asm_exprs(
+ unique int id: @asm_expr
+);
+
+#keyset[id, index]
+asm_expr_asm_pieces(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int asm_piece: @asm_piece ref
+);
+
+#keyset[id, index]
+asm_expr_attrs(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+asm_expr_templates(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int template: @expr ref
+);
+
+asm_labels(
+ unique int id: @asm_label
+);
+
+#keyset[id]
+asm_label_block_exprs(
+ int id: @asm_label ref,
+ int block_expr: @block_expr ref
+);
+
+asm_operand_nameds(
+ unique int id: @asm_operand_named
+);
+
+#keyset[id]
+asm_operand_named_asm_operands(
+ int id: @asm_operand_named ref,
+ int asm_operand: @asm_operand ref
+);
+
+#keyset[id]
+asm_operand_named_names(
+ int id: @asm_operand_named ref,
+ int name: @name ref
+);
+
+asm_options_lists(
+ unique int id: @asm_options_list
+);
+
+#keyset[id, index]
+asm_options_list_asm_options(
+ int id: @asm_options_list ref,
+ int index: int ref,
+ int asm_option: @asm_option ref
+);
+
+asm_reg_operands(
+ unique int id: @asm_reg_operand
+);
+
+#keyset[id]
+asm_reg_operand_asm_dir_specs(
+ int id: @asm_reg_operand ref,
+ int asm_dir_spec: @asm_dir_spec ref
+);
+
+#keyset[id]
+asm_reg_operand_asm_operand_exprs(
+ int id: @asm_reg_operand ref,
+ int asm_operand_expr: @asm_operand_expr ref
+);
+
+#keyset[id]
+asm_reg_operand_asm_reg_specs(
+ int id: @asm_reg_operand ref,
+ int asm_reg_spec: @asm_reg_spec ref
+);
+
+asm_syms(
+ unique int id: @asm_sym
+);
+
+#keyset[id]
+asm_sym_paths(
+ int id: @asm_sym ref,
+ int path: @path ref
+);
+
+assoc_type_args(
+ unique int id: @assoc_type_arg
+);
+
+#keyset[id]
+assoc_type_arg_const_args(
+ int id: @assoc_type_arg ref,
+ int const_arg: @const_arg ref
+);
+
+#keyset[id]
+assoc_type_arg_generic_arg_lists(
+ int id: @assoc_type_arg ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+assoc_type_arg_identifiers(
+ int id: @assoc_type_arg ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+assoc_type_arg_param_lists(
+ int id: @assoc_type_arg ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id]
+assoc_type_arg_ret_types(
+ int id: @assoc_type_arg ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+assoc_type_arg_return_type_syntaxes(
+ int id: @assoc_type_arg ref,
+ int return_type_syntax: @return_type_syntax ref
+);
+
+#keyset[id]
+assoc_type_arg_type_reprs(
+ int id: @assoc_type_arg ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+assoc_type_arg_type_bound_lists(
+ int id: @assoc_type_arg ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+await_exprs(
+ unique int id: @await_expr
+);
+
+#keyset[id, index]
+await_expr_attrs(
+ int id: @await_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+await_expr_exprs(
+ int id: @await_expr ref,
+ int expr: @expr ref
+);
+
+become_exprs(
+ unique int id: @become_expr
+);
+
+#keyset[id, index]
+become_expr_attrs(
+ int id: @become_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+become_expr_exprs(
+ int id: @become_expr ref,
+ int expr: @expr ref
+);
+
+binary_exprs(
+ unique int id: @binary_expr
+);
+
+#keyset[id, index]
+binary_expr_attrs(
+ int id: @binary_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+binary_expr_lhs(
+ int id: @binary_expr ref,
+ int lhs: @expr ref
+);
+
+#keyset[id]
+binary_expr_operator_names(
+ int id: @binary_expr ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+binary_expr_rhs(
+ int id: @binary_expr ref,
+ int rhs: @expr ref
+);
+
+box_pats(
+ unique int id: @box_pat
+);
+
+#keyset[id]
+box_pat_pats(
+ int id: @box_pat ref,
+ int pat: @pat ref
+);
+
+break_exprs(
+ unique int id: @break_expr
+);
+
+#keyset[id, index]
+break_expr_attrs(
+ int id: @break_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+break_expr_exprs(
+ int id: @break_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+break_expr_lifetimes(
+ int id: @break_expr ref,
+ int lifetime: @lifetime ref
+);
+
+@call_expr_base =
+ @call_expr
+| @method_call_expr
+;
+
+#keyset[id]
+call_expr_base_arg_lists(
+ int id: @call_expr_base ref,
+ int arg_list: @arg_list ref
+);
+
+#keyset[id, index]
+call_expr_base_attrs(
+ int id: @call_expr_base ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+cast_exprs(
+ unique int id: @cast_expr
+);
+
+#keyset[id, index]
+cast_expr_attrs(
+ int id: @cast_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+cast_expr_exprs(
+ int id: @cast_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+cast_expr_type_reprs(
+ int id: @cast_expr ref,
+ int type_repr: @type_repr ref
+);
+
+closure_exprs(
+ unique int id: @closure_expr
+);
+
+#keyset[id]
+closure_expr_bodies(
+ int id: @closure_expr ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+closure_expr_closure_binders(
+ int id: @closure_expr ref,
+ int closure_binder: @closure_binder ref
+);
+
+#keyset[id]
+closure_expr_is_async(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_const(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_gen(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_move(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_static(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_ret_types(
+ int id: @closure_expr ref,
+ int ret_type: @ret_type_repr ref
+);
+
+comments(
+ unique int id: @comment,
+ int parent: @ast_node ref,
+ string text: string ref
+);
+
+const_args(
+ unique int id: @const_arg
+);
+
+#keyset[id]
+const_arg_exprs(
+ int id: @const_arg ref,
+ int expr: @expr ref
+);
+
+const_block_pats(
+ unique int id: @const_block_pat
+);
+
+#keyset[id]
+const_block_pat_block_exprs(
+ int id: @const_block_pat ref,
+ int block_expr: @block_expr ref
+);
+
+#keyset[id]
+const_block_pat_is_const(
+ int id: @const_block_pat ref
+);
+
+const_params(
+ unique int id: @const_param
+);
+
+#keyset[id, index]
+const_param_attrs(
+ int id: @const_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+const_param_default_vals(
+ int id: @const_param ref,
+ int default_val: @const_arg ref
+);
+
+#keyset[id]
+const_param_is_const(
+ int id: @const_param ref
+);
+
+#keyset[id]
+const_param_names(
+ int id: @const_param ref,
+ int name: @name ref
+);
+
+#keyset[id]
+const_param_type_reprs(
+ int id: @const_param ref,
+ int type_repr: @type_repr ref
+);
+
+continue_exprs(
+ unique int id: @continue_expr
+);
+
+#keyset[id, index]
+continue_expr_attrs(
+ int id: @continue_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+continue_expr_lifetimes(
+ int id: @continue_expr ref,
+ int lifetime: @lifetime ref
+);
+
+dyn_trait_type_reprs(
+ unique int id: @dyn_trait_type_repr
+);
+
+#keyset[id]
+dyn_trait_type_repr_type_bound_lists(
+ int id: @dyn_trait_type_repr ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+expr_stmts(
+ unique int id: @expr_stmt
+);
+
+#keyset[id]
+expr_stmt_exprs(
+ int id: @expr_stmt ref,
+ int expr: @expr ref
+);
+
+field_exprs(
+ unique int id: @field_expr
+);
+
+#keyset[id, index]
+field_expr_attrs(
+ int id: @field_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+field_expr_containers(
+ int id: @field_expr ref,
+ int container: @expr ref
+);
+
+#keyset[id]
+field_expr_identifiers(
+ int id: @field_expr ref,
+ int identifier: @name_ref ref
+);
+
+fn_ptr_type_reprs(
+ unique int id: @fn_ptr_type_repr
+);
+
+#keyset[id]
+fn_ptr_type_repr_abis(
+ int id: @fn_ptr_type_repr ref,
+ int abi: @abi ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_async(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_const(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_unsafe(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_param_lists(
+ int id: @fn_ptr_type_repr ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_ret_types(
+ int id: @fn_ptr_type_repr ref,
+ int ret_type: @ret_type_repr ref
+);
+
+for_type_reprs(
+ unique int id: @for_type_repr
+);
+
+#keyset[id]
+for_type_repr_generic_param_lists(
+ int id: @for_type_repr ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+for_type_repr_type_reprs(
+ int id: @for_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+format_args_exprs(
+ unique int id: @format_args_expr
+);
+
+#keyset[id, index]
+format_args_expr_args(
+ int id: @format_args_expr ref,
+ int index: int ref,
+ int arg: @format_args_arg ref
+);
+
+#keyset[id, index]
+format_args_expr_attrs(
+ int id: @format_args_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+format_args_expr_templates(
+ int id: @format_args_expr ref,
+ int template: @expr ref
+);
+
+ident_pats(
+ unique int id: @ident_pat
+);
+
+#keyset[id, index]
+ident_pat_attrs(
+ int id: @ident_pat ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+ident_pat_is_mut(
+ int id: @ident_pat ref
+);
+
+#keyset[id]
+ident_pat_is_ref(
+ int id: @ident_pat ref
+);
+
+#keyset[id]
+ident_pat_names(
+ int id: @ident_pat ref,
+ int name: @name ref
+);
+
+#keyset[id]
+ident_pat_pats(
+ int id: @ident_pat ref,
+ int pat: @pat ref
+);
+
+if_exprs(
+ unique int id: @if_expr
+);
+
+#keyset[id, index]
+if_expr_attrs(
+ int id: @if_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+if_expr_conditions(
+ int id: @if_expr ref,
+ int condition: @expr ref
+);
+
+#keyset[id]
+if_expr_elses(
+ int id: @if_expr ref,
+ int else: @expr ref
+);
+
+#keyset[id]
+if_expr_thens(
+ int id: @if_expr ref,
+ int then: @block_expr ref
+);
+
+impl_trait_type_reprs(
+ unique int id: @impl_trait_type_repr
+);
+
+#keyset[id]
+impl_trait_type_repr_type_bound_lists(
+ int id: @impl_trait_type_repr ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+index_exprs(
+ unique int id: @index_expr
+);
+
+#keyset[id, index]
+index_expr_attrs(
+ int id: @index_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+index_expr_bases(
+ int id: @index_expr ref,
+ int base: @expr ref
+);
+
+#keyset[id]
+index_expr_indices(
+ int id: @index_expr ref,
+ int index: @expr ref
+);
+
+infer_type_reprs(
+ unique int id: @infer_type_repr
+);
+
+@item =
+ @adt
+| @assoc_item
+| @extern_block
+| @extern_crate
+| @extern_item
+| @impl
+| @macro_def
+| @macro_rules
+| @module
+| @trait
+| @trait_alias
+| @use
+;
+
+#keyset[id]
+item_attribute_macro_expansions(
+ int id: @item ref,
+ int attribute_macro_expansion: @macro_items ref
+);
+
+@labelable_expr =
+ @block_expr
+| @looping_expr
+;
+
+#keyset[id]
+labelable_expr_labels(
+ int id: @labelable_expr ref,
+ int label: @label ref
+);
+
+let_exprs(
+ unique int id: @let_expr
+);
+
+#keyset[id, index]
+let_expr_attrs(
+ int id: @let_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+let_expr_scrutinees(
+ int id: @let_expr ref,
+ int scrutinee: @expr ref
+);
+
+#keyset[id]
+let_expr_pats(
+ int id: @let_expr ref,
+ int pat: @pat ref
+);
+
+let_stmts(
+ unique int id: @let_stmt
+);
+
+#keyset[id, index]
+let_stmt_attrs(
+ int id: @let_stmt ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+let_stmt_initializers(
+ int id: @let_stmt ref,
+ int initializer: @expr ref
+);
+
+#keyset[id]
+let_stmt_let_elses(
+ int id: @let_stmt ref,
+ int let_else: @let_else ref
+);
+
+#keyset[id]
+let_stmt_pats(
+ int id: @let_stmt ref,
+ int pat: @pat ref
+);
+
+#keyset[id]
+let_stmt_type_reprs(
+ int id: @let_stmt ref,
+ int type_repr: @type_repr ref
+);
+
+lifetimes(
+ unique int id: @lifetime
+);
+
+#keyset[id]
+lifetime_texts(
+ int id: @lifetime ref,
+ string text: string ref
+);
+
+lifetime_args(
+ unique int id: @lifetime_arg
+);
+
+#keyset[id]
+lifetime_arg_lifetimes(
+ int id: @lifetime_arg ref,
+ int lifetime: @lifetime ref
+);
+
+lifetime_params(
+ unique int id: @lifetime_param
+);
+
+#keyset[id, index]
+lifetime_param_attrs(
+ int id: @lifetime_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+lifetime_param_lifetimes(
+ int id: @lifetime_param ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+lifetime_param_type_bound_lists(
+ int id: @lifetime_param ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+literal_exprs(
+ unique int id: @literal_expr
+);
+
+#keyset[id, index]
+literal_expr_attrs(
+ int id: @literal_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+literal_expr_text_values(
+ int id: @literal_expr ref,
+ string text_value: string ref
+);
+
+literal_pats(
+ unique int id: @literal_pat
+);
+
+#keyset[id]
+literal_pat_literals(
+ int id: @literal_pat ref,
+ int literal: @literal_expr ref
+);
+
+macro_block_exprs(
+ unique int id: @macro_block_expr
+);
+
+#keyset[id]
+macro_block_expr_tail_exprs(
+ int id: @macro_block_expr ref,
+ int tail_expr: @expr ref
+);
+
+#keyset[id, index]
+macro_block_expr_statements(
+ int id: @macro_block_expr ref,
+ int index: int ref,
+ int statement: @stmt ref
+);
+
+macro_exprs(
+ unique int id: @macro_expr
+);
+
+#keyset[id]
+macro_expr_macro_calls(
+ int id: @macro_expr ref,
+ int macro_call: @macro_call ref
+);
+
+macro_pats(
+ unique int id: @macro_pat
+);
+
+#keyset[id]
+macro_pat_macro_calls(
+ int id: @macro_pat ref,
+ int macro_call: @macro_call ref
+);
+
+macro_type_reprs(
+ unique int id: @macro_type_repr
+);
+
+#keyset[id]
+macro_type_repr_macro_calls(
+ int id: @macro_type_repr ref,
+ int macro_call: @macro_call ref
+);
+
+match_exprs(
+ unique int id: @match_expr
+);
+
+#keyset[id, index]
+match_expr_attrs(
+ int id: @match_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+match_expr_scrutinees(
+ int id: @match_expr ref,
+ int scrutinee: @expr ref
+);
+
+#keyset[id]
+match_expr_match_arm_lists(
+ int id: @match_expr ref,
+ int match_arm_list: @match_arm_list ref
+);
+
+name_refs(
+ unique int id: @name_ref
+);
+
+#keyset[id]
+name_ref_texts(
+ int id: @name_ref ref,
+ string text: string ref
+);
+
+never_type_reprs(
+ unique int id: @never_type_repr
+);
+
+offset_of_exprs(
+ unique int id: @offset_of_expr
+);
+
+#keyset[id, index]
+offset_of_expr_attrs(
+ int id: @offset_of_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+offset_of_expr_fields(
+ int id: @offset_of_expr ref,
+ int index: int ref,
+ int field: @name_ref ref
+);
+
+#keyset[id]
+offset_of_expr_type_reprs(
+ int id: @offset_of_expr ref,
+ int type_repr: @type_repr ref
+);
+
+or_pats(
+ unique int id: @or_pat
+);
+
+#keyset[id, index]
+or_pat_pats(
+ int id: @or_pat ref,
+ int index: int ref,
+ int pat: @pat ref
+);
+
+params(
+ unique int id: @param
+);
+
+#keyset[id]
+param_pats(
+ int id: @param ref,
+ int pat: @pat ref
+);
+
+paren_exprs(
+ unique int id: @paren_expr
+);
+
+#keyset[id, index]
+paren_expr_attrs(
+ int id: @paren_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+paren_expr_exprs(
+ int id: @paren_expr ref,
+ int expr: @expr ref
+);
+
+paren_pats(
+ unique int id: @paren_pat
+);
+
+#keyset[id]
+paren_pat_pats(
+ int id: @paren_pat ref,
+ int pat: @pat ref
+);
+
+paren_type_reprs(
+ unique int id: @paren_type_repr
+);
+
+#keyset[id]
+paren_type_repr_type_reprs(
+ int id: @paren_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+@path_ast_node =
+ @path_expr
+| @path_pat
+| @struct_expr
+| @struct_pat
+| @tuple_struct_pat
+;
+
+#keyset[id]
+path_ast_node_paths(
+ int id: @path_ast_node ref,
+ int path: @path ref
+);
+
+@path_expr_base =
+ @path_expr
+;
+
+path_type_reprs(
+ unique int id: @path_type_repr
+);
+
+#keyset[id]
+path_type_repr_paths(
+ int id: @path_type_repr ref,
+ int path: @path ref
+);
+
+prefix_exprs(
+ unique int id: @prefix_expr
+);
+
+#keyset[id, index]
+prefix_expr_attrs(
+ int id: @prefix_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+prefix_expr_exprs(
+ int id: @prefix_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+prefix_expr_operator_names(
+ int id: @prefix_expr ref,
+ string operator_name: string ref
+);
+
+ptr_type_reprs(
+ unique int id: @ptr_type_repr
+);
+
+#keyset[id]
+ptr_type_repr_is_const(
+ int id: @ptr_type_repr ref
+);
+
+#keyset[id]
+ptr_type_repr_is_mut(
+ int id: @ptr_type_repr ref
+);
+
+#keyset[id]
+ptr_type_repr_type_reprs(
+ int id: @ptr_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+range_exprs(
+ unique int id: @range_expr
+);
+
+#keyset[id, index]
+range_expr_attrs(
+ int id: @range_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+range_expr_ends(
+ int id: @range_expr ref,
+ int end: @expr ref
+);
+
+#keyset[id]
+range_expr_operator_names(
+ int id: @range_expr ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+range_expr_starts(
+ int id: @range_expr ref,
+ int start: @expr ref
+);
+
+range_pats(
+ unique int id: @range_pat
+);
+
+#keyset[id]
+range_pat_ends(
+ int id: @range_pat ref,
+ int end: @pat ref
+);
+
+#keyset[id]
+range_pat_operator_names(
+ int id: @range_pat ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+range_pat_starts(
+ int id: @range_pat ref,
+ int start: @pat ref
+);
+
+ref_exprs(
+ unique int id: @ref_expr
+);
+
+#keyset[id, index]
+ref_expr_attrs(
+ int id: @ref_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+ref_expr_exprs(
+ int id: @ref_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+ref_expr_is_const(
+ int id: @ref_expr ref
+);
+
+#keyset[id]
+ref_expr_is_mut(
+ int id: @ref_expr ref
+);
+
+#keyset[id]
+ref_expr_is_raw(
+ int id: @ref_expr ref
+);
+
+ref_pats(
+ unique int id: @ref_pat
+);
+
+#keyset[id]
+ref_pat_is_mut(
+ int id: @ref_pat ref
+);
+
+#keyset[id]
+ref_pat_pats(
+ int id: @ref_pat ref,
+ int pat: @pat ref
+);
+
+ref_type_reprs(
+ unique int id: @ref_type_repr
+);
+
+#keyset[id]
+ref_type_repr_is_mut(
+ int id: @ref_type_repr ref
+);
+
+#keyset[id]
+ref_type_repr_lifetimes(
+ int id: @ref_type_repr ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+ref_type_repr_type_reprs(
+ int id: @ref_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+rest_pats(
+ unique int id: @rest_pat
+);
+
+#keyset[id, index]
+rest_pat_attrs(
+ int id: @rest_pat ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+return_exprs(
+ unique int id: @return_expr
+);
+
+#keyset[id, index]
+return_expr_attrs(
+ int id: @return_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+return_expr_exprs(
+ int id: @return_expr ref,
+ int expr: @expr ref
+);
+
+self_params(
+ unique int id: @self_param
+);
+
+#keyset[id]
+self_param_is_ref(
+ int id: @self_param ref
+);
+
+#keyset[id]
+self_param_is_mut(
+ int id: @self_param ref
+);
+
+#keyset[id]
+self_param_lifetimes(
+ int id: @self_param ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+self_param_names(
+ int id: @self_param ref,
+ int name: @name ref
+);
+
+slice_pats(
+ unique int id: @slice_pat
+);
+
+#keyset[id, index]
+slice_pat_pats(
+ int id: @slice_pat ref,
+ int index: int ref,
+ int pat: @pat ref
+);
+
+slice_type_reprs(
+ unique int id: @slice_type_repr
+);
+
+#keyset[id]
+slice_type_repr_type_reprs(
+ int id: @slice_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+struct_field_lists(
+ unique int id: @struct_field_list
+);
+
+#keyset[id, index]
+struct_field_list_fields(
+ int id: @struct_field_list ref,
+ int index: int ref,
+ int field: @struct_field ref
+);
+
+try_exprs(
+ unique int id: @try_expr
+);
+
+#keyset[id, index]
+try_expr_attrs(
+ int id: @try_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+try_expr_exprs(
+ int id: @try_expr ref,
+ int expr: @expr ref
+);
+
+tuple_exprs(
+ unique int id: @tuple_expr
+);
+
+#keyset[id, index]
+tuple_expr_attrs(
+ int id: @tuple_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+tuple_expr_fields(
+ int id: @tuple_expr ref,
+ int index: int ref,
+ int field: @expr ref
+);
+
+tuple_field_lists(
+ unique int id: @tuple_field_list
+);
+
+#keyset[id, index]
+tuple_field_list_fields(
+ int id: @tuple_field_list ref,
+ int index: int ref,
+ int field: @tuple_field ref
+);
+
+tuple_pats(
+ unique int id: @tuple_pat
+);
+
+#keyset[id, index]
+tuple_pat_fields(
+ int id: @tuple_pat ref,
+ int index: int ref,
+ int field: @pat ref
+);
+
+tuple_type_reprs(
+ unique int id: @tuple_type_repr
+);
+
+#keyset[id, index]
+tuple_type_repr_fields(
+ int id: @tuple_type_repr ref,
+ int index: int ref,
+ int field: @type_repr ref
+);
+
+type_args(
+ unique int id: @type_arg
+);
+
+#keyset[id]
+type_arg_type_reprs(
+ int id: @type_arg ref,
+ int type_repr: @type_repr ref
+);
+
+type_params(
+ unique int id: @type_param
+);
+
+#keyset[id, index]
+type_param_attrs(
+ int id: @type_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+type_param_default_types(
+ int id: @type_param ref,
+ int default_type: @type_repr ref
+);
+
+#keyset[id]
+type_param_names(
+ int id: @type_param ref,
+ int name: @name ref
+);
+
+#keyset[id]
+type_param_type_bound_lists(
+ int id: @type_param ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+underscore_exprs(
+ unique int id: @underscore_expr
+);
+
+#keyset[id, index]
+underscore_expr_attrs(
+ int id: @underscore_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+variants(
+ unique int id: @variant
+);
+
+#keyset[id, index]
+variant_attrs(
+ int id: @variant ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+variant_discriminants(
+ int id: @variant ref,
+ int discriminant: @expr ref
+);
+
+#keyset[id]
+variant_field_lists(
+ int id: @variant ref,
+ int field_list: @field_list ref
+);
+
+#keyset[id]
+variant_names(
+ int id: @variant ref,
+ int name: @name ref
+);
+
+#keyset[id]
+variant_visibilities(
+ int id: @variant ref,
+ int visibility: @visibility ref
+);
+
+wildcard_pats(
+ unique int id: @wildcard_pat
+);
+
+yeet_exprs(
+ unique int id: @yeet_expr
+);
+
+#keyset[id, index]
+yeet_expr_attrs(
+ int id: @yeet_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+yeet_expr_exprs(
+ int id: @yeet_expr ref,
+ int expr: @expr ref
+);
+
+yield_exprs(
+ unique int id: @yield_expr
+);
+
+#keyset[id, index]
+yield_expr_attrs(
+ int id: @yield_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+yield_expr_exprs(
+ int id: @yield_expr ref,
+ int expr: @expr ref
+);
+
+@adt =
+ @enum
+| @struct
+| @union
+;
+
+#keyset[id, index]
+adt_derive_macro_expansions(
+ int id: @adt ref,
+ int index: int ref,
+ int derive_macro_expansion: @macro_items ref
+);
+
+@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: @attr ref
+);
+
+#keyset[id]
+block_expr_is_async(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_const(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_gen(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_move(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_try(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_unsafe(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_stmt_lists(
+ int id: @block_expr ref,
+ int stmt_list: @stmt_list ref
+);
+
+call_exprs(
+ unique int id: @call_expr
+);
+
+#keyset[id]
+call_expr_functions(
+ int id: @call_expr ref,
+ int function: @expr ref
+);
+
+extern_blocks(
+ unique int id: @extern_block
+);
+
+#keyset[id]
+extern_block_abis(
+ int id: @extern_block ref,
+ int abi: @abi ref
+);
+
+#keyset[id, index]
+extern_block_attrs(
+ int id: @extern_block ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+extern_block_extern_item_lists(
+ int id: @extern_block ref,
+ int extern_item_list: @extern_item_list ref
+);
+
+#keyset[id]
+extern_block_is_unsafe(
+ int id: @extern_block ref
+);
+
+extern_crates(
+ unique int id: @extern_crate
+);
+
+#keyset[id, index]
+extern_crate_attrs(
+ int id: @extern_crate ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+extern_crate_identifiers(
+ int id: @extern_crate ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+extern_crate_renames(
+ int id: @extern_crate ref,
+ int rename: @rename ref
+);
+
+#keyset[id]
+extern_crate_visibilities(
+ int id: @extern_crate ref,
+ int visibility: @visibility ref
+);
+
+@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: @attr ref
+);
+
+#keyset[id]
+impl_generic_param_lists(
+ int id: @impl ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+impl_is_const(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_is_default(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_is_unsafe(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_self_ties(
+ int id: @impl ref,
+ int self_ty: @type_repr ref
+);
+
+#keyset[id]
+impl_traits(
+ int id: @impl ref,
+ int trait: @type_repr ref
+);
+
+#keyset[id]
+impl_visibilities(
+ int id: @impl ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+impl_where_clauses(
+ int id: @impl ref,
+ int where_clause: @where_clause ref
+);
+
+@looping_expr =
+ @for_expr
+| @loop_expr
+| @while_expr
+;
+
+#keyset[id]
+looping_expr_loop_bodies(
+ int id: @looping_expr ref,
+ int loop_body: @block_expr ref
+);
+
+macro_defs(
+ unique int id: @macro_def
+);
+
+#keyset[id]
+macro_def_args(
+ int id: @macro_def ref,
+ int args: @token_tree ref
+);
+
+#keyset[id, index]
+macro_def_attrs(
+ int id: @macro_def ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_def_bodies(
+ int id: @macro_def ref,
+ int body: @token_tree ref
+);
+
+#keyset[id]
+macro_def_names(
+ int id: @macro_def ref,
+ int name: @name ref
+);
+
+#keyset[id]
+macro_def_visibilities(
+ int id: @macro_def ref,
+ int visibility: @visibility ref
+);
+
+macro_rules(
+ unique int id: @macro_rules
+);
+
+#keyset[id, index]
+macro_rules_attrs(
+ int id: @macro_rules ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_rules_names(
+ int id: @macro_rules ref,
+ int name: @name ref
+);
+
+#keyset[id]
+macro_rules_token_trees(
+ int id: @macro_rules ref,
+ int token_tree: @token_tree ref
+);
+
+#keyset[id]
+macro_rules_visibilities(
+ int id: @macro_rules ref,
+ int visibility: @visibility ref
+);
+
+method_call_exprs(
+ unique int id: @method_call_expr
+);
+
+#keyset[id]
+method_call_expr_generic_arg_lists(
+ int id: @method_call_expr ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+method_call_expr_identifiers(
+ int id: @method_call_expr ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+method_call_expr_receivers(
+ int id: @method_call_expr ref,
+ int receiver: @expr ref
+);
+
+modules(
+ unique int id: @module
+);
+
+#keyset[id, index]
+module_attrs(
+ int id: @module ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+module_item_lists(
+ int id: @module ref,
+ int item_list: @item_list ref
+);
+
+#keyset[id]
+module_names(
+ int id: @module ref,
+ int name: @name ref
+);
+
+#keyset[id]
+module_visibilities(
+ int id: @module ref,
+ int visibility: @visibility ref
+);
+
+path_exprs(
+ unique int id: @path_expr
+);
+
+#keyset[id, index]
+path_expr_attrs(
+ int id: @path_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+path_pats(
+ unique int id: @path_pat
+);
+
+struct_exprs(
+ unique int id: @struct_expr
+);
+
+#keyset[id]
+struct_expr_struct_expr_field_lists(
+ int id: @struct_expr ref,
+ int struct_expr_field_list: @struct_expr_field_list ref
+);
+
+struct_pats(
+ unique int id: @struct_pat
+);
+
+#keyset[id]
+struct_pat_struct_pat_field_lists(
+ int id: @struct_pat ref,
+ int struct_pat_field_list: @struct_pat_field_list ref
+);
+
+traits(
+ unique int id: @trait
+);
+
+#keyset[id]
+trait_assoc_item_lists(
+ int id: @trait ref,
+ int assoc_item_list: @assoc_item_list ref
+);
+
+#keyset[id, index]
+trait_attrs(
+ int id: @trait ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+trait_generic_param_lists(
+ int id: @trait ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+trait_is_auto(
+ int id: @trait ref
+);
+
+#keyset[id]
+trait_is_unsafe(
+ int id: @trait ref
+);
+
+#keyset[id]
+trait_names(
+ int id: @trait ref,
+ int name: @name ref
+);
+
+#keyset[id]
+trait_type_bound_lists(
+ int id: @trait ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+trait_visibilities(
+ int id: @trait ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+trait_where_clauses(
+ int id: @trait ref,
+ int where_clause: @where_clause ref
+);
+
+trait_aliases(
+ unique int id: @trait_alias
+);
+
+#keyset[id, index]
+trait_alias_attrs(
+ int id: @trait_alias ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+trait_alias_generic_param_lists(
+ int id: @trait_alias ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+trait_alias_names(
+ int id: @trait_alias ref,
+ int name: @name ref
+);
+
+#keyset[id]
+trait_alias_type_bound_lists(
+ int id: @trait_alias ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+trait_alias_visibilities(
+ int id: @trait_alias ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+trait_alias_where_clauses(
+ int id: @trait_alias ref,
+ int where_clause: @where_clause ref
+);
+
+tuple_struct_pats(
+ unique int id: @tuple_struct_pat
+);
+
+#keyset[id, index]
+tuple_struct_pat_fields(
+ int id: @tuple_struct_pat ref,
+ int index: int ref,
+ int field: @pat ref
+);
+
+uses(
+ unique int id: @use
+);
+
+#keyset[id, index]
+use_attrs(
+ int id: @use ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+use_use_trees(
+ int id: @use ref,
+ int use_tree: @use_tree ref
+);
+
+#keyset[id]
+use_visibilities(
+ int id: @use ref,
+ int visibility: @visibility ref
+);
+
+consts(
+ unique int id: @const
+);
+
+#keyset[id, index]
+const_attrs(
+ int id: @const ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+const_bodies(
+ int id: @const ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+const_generic_param_lists(
+ int id: @const ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+const_is_const(
+ int id: @const ref
+);
+
+#keyset[id]
+const_is_default(
+ int id: @const ref
+);
+
+#keyset[id]
+const_names(
+ int id: @const ref,
+ int name: @name ref
+);
+
+#keyset[id]
+const_type_reprs(
+ int id: @const ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+const_visibilities(
+ int id: @const ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+const_where_clauses(
+ int id: @const ref,
+ int where_clause: @where_clause ref
+);
+
+#keyset[id]
+const_has_implementation(
+ int id: @const ref
+);
+
+enums(
+ unique int id: @enum
+);
+
+#keyset[id, index]
+enum_attrs(
+ int id: @enum ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+enum_generic_param_lists(
+ int id: @enum ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+enum_names(
+ int id: @enum ref,
+ int name: @name ref
+);
+
+#keyset[id]
+enum_variant_lists(
+ int id: @enum ref,
+ int variant_list: @variant_list ref
+);
+
+#keyset[id]
+enum_visibilities(
+ int id: @enum ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+enum_where_clauses(
+ int id: @enum ref,
+ int where_clause: @where_clause ref
+);
+
+for_exprs(
+ unique int id: @for_expr
+);
+
+#keyset[id, index]
+for_expr_attrs(
+ int id: @for_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+for_expr_iterables(
+ int id: @for_expr ref,
+ int iterable: @expr ref
+);
+
+#keyset[id]
+for_expr_pats(
+ int id: @for_expr ref,
+ int pat: @pat ref
+);
+
+functions(
+ unique int id: @function
+);
+
+#keyset[id]
+function_abis(
+ int id: @function ref,
+ int abi: @abi ref
+);
+
+#keyset[id]
+function_bodies(
+ int id: @function ref,
+ int body: @block_expr ref
+);
+
+#keyset[id]
+function_generic_param_lists(
+ int id: @function ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+function_is_async(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_const(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_default(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_gen(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_unsafe(
+ int id: @function ref
+);
+
+#keyset[id]
+function_names(
+ int id: @function ref,
+ int name: @name ref
+);
+
+#keyset[id]
+function_ret_types(
+ int id: @function ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+function_visibilities(
+ int id: @function ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+function_where_clauses(
+ int id: @function ref,
+ int where_clause: @where_clause ref
+);
+
+#keyset[id]
+function_has_implementation(
+ int id: @function ref
+);
+
+loop_exprs(
+ unique int id: @loop_expr
+);
+
+#keyset[id, index]
+loop_expr_attrs(
+ int id: @loop_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+macro_calls(
+ unique int id: @macro_call
+);
+
+#keyset[id, index]
+macro_call_attrs(
+ int id: @macro_call ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_call_paths(
+ int id: @macro_call ref,
+ int path: @path ref
+);
+
+#keyset[id]
+macro_call_token_trees(
+ int id: @macro_call ref,
+ int token_tree: @token_tree ref
+);
+
+#keyset[id]
+macro_call_macro_call_expansions(
+ int id: @macro_call ref,
+ int macro_call_expansion: @ast_node ref
+);
+
+statics(
+ unique int id: @static
+);
+
+#keyset[id, index]
+static_attrs(
+ int id: @static ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+static_bodies(
+ int id: @static ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+static_is_mut(
+ int id: @static ref
+);
+
+#keyset[id]
+static_is_static(
+ int id: @static ref
+);
+
+#keyset[id]
+static_is_unsafe(
+ int id: @static ref
+);
+
+#keyset[id]
+static_names(
+ int id: @static ref,
+ int name: @name ref
+);
+
+#keyset[id]
+static_type_reprs(
+ int id: @static ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+static_visibilities(
+ int id: @static ref,
+ int visibility: @visibility ref
+);
+
+structs(
+ unique int id: @struct
+);
+
+#keyset[id, index]
+struct_attrs(
+ int id: @struct ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_field_lists_(
+ int id: @struct ref,
+ int field_list: @field_list ref
+);
+
+#keyset[id]
+struct_generic_param_lists(
+ int id: @struct ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+struct_names(
+ int id: @struct ref,
+ int name: @name ref
+);
+
+#keyset[id]
+struct_visibilities(
+ int id: @struct ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+struct_where_clauses(
+ int id: @struct ref,
+ int where_clause: @where_clause ref
+);
+
+type_aliases(
+ unique int id: @type_alias
+);
+
+#keyset[id, index]
+type_alias_attrs(
+ int id: @type_alias ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+type_alias_generic_param_lists(
+ int id: @type_alias ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+type_alias_is_default(
+ int id: @type_alias ref
+);
+
+#keyset[id]
+type_alias_names(
+ int id: @type_alias ref,
+ int name: @name ref
+);
+
+#keyset[id]
+type_alias_type_reprs(
+ int id: @type_alias ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+type_alias_type_bound_lists(
+ int id: @type_alias ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+type_alias_visibilities(
+ int id: @type_alias ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+type_alias_where_clauses(
+ int id: @type_alias ref,
+ int where_clause: @where_clause ref
+);
+
+unions(
+ unique int id: @union
+);
+
+#keyset[id, index]
+union_attrs(
+ int id: @union ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+union_generic_param_lists(
+ int id: @union ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+union_names(
+ int id: @union ref,
+ int name: @name ref
+);
+
+#keyset[id]
+union_struct_field_lists(
+ int id: @union ref,
+ int struct_field_list: @struct_field_list ref
+);
+
+#keyset[id]
+union_visibilities(
+ int id: @union ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+union_where_clauses(
+ int id: @union ref,
+ int where_clause: @where_clause ref
+);
+
+while_exprs(
+ unique int id: @while_expr
+);
+
+#keyset[id, index]
+while_expr_attrs(
+ int id: @while_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+while_expr_conditions(
+ int id: @while_expr ref,
+ int condition: @expr ref
+);
diff --git a/rust/ql/lib/upgrades/8e9b0c516ae822286689672d1020707020128a19/rust.dbscheme b/rust/ql/lib/upgrades/8e9b0c516ae822286689672d1020707020128a19/rust.dbscheme
new file mode 100644
index 000000000000..319c933d9615
--- /dev/null
+++ b/rust/ql/lib/upgrades/8e9b0c516ae822286689672d1020707020128a19/rust.dbscheme
@@ -0,0 +1,3637 @@
+// generated by codegen, do not edit
+
+// from ../shared/tree-sitter-extractor/src/generator/prefix.dbscheme
+/*- Files and folders -*/
+
+/**
+ * The location of an element.
+ * The location spans column `startcolumn` of line `startline` to
+ * column `endcolumn` of line `endline` in file `file`.
+ * For more information, see
+ * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
+ */
+locations_default(
+ unique int id: @location_default,
+ int file: @file ref,
+ int beginLine: int ref,
+ int beginColumn: int ref,
+ int endLine: int ref,
+ int endColumn: int ref
+);
+
+files(
+ unique int id: @file,
+ string name: string ref
+);
+
+folders(
+ unique int id: @folder,
+ string name: string ref
+);
+
+@container = @file | @folder
+
+containerparent(
+ int parent: @container ref,
+ unique int child: @container ref
+);
+
+/*- Empty location -*/
+
+empty_location(
+ int location: @location_default ref
+);
+
+/*- Source location prefix -*/
+
+/**
+ * The source location of the snapshot.
+ */
+sourceLocationPrefix(string prefix : string ref);
+
+/*- Diagnostic messages -*/
+
+diagnostics(
+ unique int id: @diagnostic,
+ int severity: int ref,
+ string error_tag: string ref,
+ string error_message: string ref,
+ string full_error_message: string ref,
+ int location: @location_default ref
+);
+
+/*- Diagnostic messages: severity -*/
+
+case @diagnostic.severity of
+ 10 = @diagnostic_debug
+| 20 = @diagnostic_info
+| 30 = @diagnostic_warning
+| 40 = @diagnostic_error
+;
+
+/*- YAML -*/
+
+#keyset[parent, idx]
+yaml (unique int id: @yaml_node,
+ int kind: int ref,
+ int parent: @yaml_node_parent ref,
+ int idx: int ref,
+ string tag: string ref,
+ string tostring: string ref);
+
+case @yaml_node.kind of
+ 0 = @yaml_scalar_node
+| 1 = @yaml_mapping_node
+| 2 = @yaml_sequence_node
+| 3 = @yaml_alias_node
+;
+
+@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node;
+
+@yaml_node_parent = @yaml_collection_node | @file;
+
+yaml_anchors (unique int node: @yaml_node ref,
+ string anchor: string ref);
+
+yaml_aliases (unique int alias: @yaml_alias_node ref,
+ string target: string ref);
+
+yaml_scalars (unique int scalar: @yaml_scalar_node ref,
+ int style: int ref,
+ string value: string ref);
+
+yaml_errors (unique int id: @yaml_error,
+ string message: string ref);
+
+yaml_locations(unique int locatable: @yaml_locatable ref,
+ int location: @location_default ref);
+
+@yaml_locatable = @yaml_node | @yaml_error;
+
+/*- Database metadata -*/
+databaseMetadata(
+ string metadataKey: string ref,
+ string value: string ref
+);
+
+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
+| @arg_list
+| @asm_dir_spec
+| @asm_operand
+| @asm_operand_expr
+| @asm_option
+| @asm_piece
+| @asm_reg_spec
+| @assoc_item_list
+| @attr
+| @callable
+| @closure_binder
+| @expr
+| @extern_item_list
+| @field_list
+| @format_args_arg
+| @generic_arg
+| @generic_arg_list
+| @generic_param
+| @generic_param_list
+| @item_list
+| @label
+| @let_else
+| @macro_items
+| @match_arm
+| @match_arm_list
+| @match_guard
+| @meta
+| @name
+| @param_base
+| @param_list
+| @parenthesized_arg_list
+| @pat
+| @path
+| @path_segment
+| @rename
+| @resolvable
+| @ret_type_repr
+| @return_type_syntax
+| @source_file
+| @stmt
+| @stmt_list
+| @struct_expr_field
+| @struct_expr_field_list
+| @struct_field
+| @struct_pat_field
+| @struct_pat_field_list
+| @token
+| @token_tree
+| @tuple_field
+| @type_bound
+| @type_bound_list
+| @type_repr
+| @use_bound_generic_arg
+| @use_bound_generic_args
+| @use_tree
+| @use_tree_list
+| @variant_list
+| @visibility
+| @where_clause
+| @where_pred
+;
+
+crates(
+ unique int id: @crate
+);
+
+#keyset[id]
+crate_names(
+ int id: @crate ref,
+ string name: string ref
+);
+
+#keyset[id]
+crate_versions(
+ int id: @crate ref,
+ string version: string ref
+);
+
+#keyset[id, index]
+crate_cfg_options(
+ int id: @crate ref,
+ int index: int ref,
+ string cfg_option: string ref
+);
+
+#keyset[id, index]
+crate_named_dependencies(
+ int id: @crate ref,
+ int index: int ref,
+ int named_dependency: @named_crate ref
+);
+
+missings(
+ unique int id: @missing
+);
+
+unimplementeds(
+ unique int id: @unimplemented
+);
+
+abis(
+ unique int id: @abi
+);
+
+#keyset[id]
+abi_abi_strings(
+ int id: @abi ref,
+ string abi_string: string ref
+);
+
+@addressable =
+ @item
+| @variant
+;
+
+#keyset[id]
+addressable_extended_canonical_paths(
+ int id: @addressable ref,
+ string extended_canonical_path: string ref
+);
+
+#keyset[id]
+addressable_crate_origins(
+ int id: @addressable ref,
+ string crate_origin: string ref
+);
+
+arg_lists(
+ unique int id: @arg_list
+);
+
+#keyset[id, index]
+arg_list_args(
+ int id: @arg_list ref,
+ int index: int ref,
+ int arg: @expr ref
+);
+
+asm_dir_specs(
+ unique int id: @asm_dir_spec
+);
+
+@asm_operand =
+ @asm_const
+| @asm_label
+| @asm_reg_operand
+| @asm_sym
+;
+
+asm_operand_exprs(
+ unique int id: @asm_operand_expr
+);
+
+#keyset[id]
+asm_operand_expr_in_exprs(
+ int id: @asm_operand_expr ref,
+ int in_expr: @expr ref
+);
+
+#keyset[id]
+asm_operand_expr_out_exprs(
+ int id: @asm_operand_expr ref,
+ int out_expr: @expr ref
+);
+
+asm_options(
+ unique int id: @asm_option
+);
+
+#keyset[id]
+asm_option_is_raw(
+ int id: @asm_option ref
+);
+
+@asm_piece =
+ @asm_clobber_abi
+| @asm_operand_named
+| @asm_options_list
+;
+
+asm_reg_specs(
+ unique int id: @asm_reg_spec
+);
+
+#keyset[id]
+asm_reg_spec_identifiers(
+ int id: @asm_reg_spec ref,
+ int identifier: @name_ref ref
+);
+
+assoc_item_lists(
+ unique int id: @assoc_item_list
+);
+
+#keyset[id, index]
+assoc_item_list_assoc_items(
+ int id: @assoc_item_list ref,
+ int index: int ref,
+ int assoc_item: @assoc_item ref
+);
+
+#keyset[id, index]
+assoc_item_list_attrs(
+ int id: @assoc_item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+attrs(
+ unique int id: @attr
+);
+
+#keyset[id]
+attr_meta(
+ int id: @attr ref,
+ int meta: @meta ref
+);
+
+@callable =
+ @closure_expr
+| @function
+;
+
+#keyset[id]
+callable_param_lists(
+ int id: @callable ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id, index]
+callable_attrs(
+ int id: @callable ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+closure_binders(
+ unique int id: @closure_binder
+);
+
+#keyset[id]
+closure_binder_generic_param_lists(
+ int id: @closure_binder ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+@expr =
+ @array_expr_internal
+| @asm_expr
+| @await_expr
+| @become_expr
+| @binary_expr
+| @break_expr
+| @call_expr_base
+| @cast_expr
+| @closure_expr
+| @continue_expr
+| @field_expr
+| @format_args_expr
+| @if_expr
+| @index_expr
+| @labelable_expr
+| @let_expr
+| @literal_expr
+| @macro_block_expr
+| @macro_expr
+| @match_expr
+| @offset_of_expr
+| @paren_expr
+| @path_expr_base
+| @prefix_expr
+| @range_expr
+| @ref_expr
+| @return_expr
+| @struct_expr
+| @try_expr
+| @tuple_expr
+| @underscore_expr
+| @yeet_expr
+| @yield_expr
+;
+
+extern_item_lists(
+ unique int id: @extern_item_list
+);
+
+#keyset[id, index]
+extern_item_list_attrs(
+ int id: @extern_item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+extern_item_list_extern_items(
+ int id: @extern_item_list ref,
+ int index: int ref,
+ int extern_item: @extern_item ref
+);
+
+@field_list =
+ @struct_field_list
+| @tuple_field_list
+;
+
+format_args_args(
+ unique int id: @format_args_arg
+);
+
+#keyset[id]
+format_args_arg_exprs(
+ int id: @format_args_arg ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+format_args_arg_names(
+ int id: @format_args_arg ref,
+ int name: @name ref
+);
+
+@generic_arg =
+ @assoc_type_arg
+| @const_arg
+| @lifetime_arg
+| @type_arg
+;
+
+generic_arg_lists(
+ unique int id: @generic_arg_list
+);
+
+#keyset[id, index]
+generic_arg_list_generic_args(
+ int id: @generic_arg_list ref,
+ int index: int ref,
+ int generic_arg: @generic_arg ref
+);
+
+@generic_param =
+ @const_param
+| @lifetime_param
+| @type_param
+;
+
+generic_param_lists(
+ unique int id: @generic_param_list
+);
+
+#keyset[id, index]
+generic_param_list_generic_params(
+ int id: @generic_param_list ref,
+ int index: int ref,
+ int generic_param: @generic_param ref
+);
+
+item_lists(
+ unique int id: @item_list
+);
+
+#keyset[id, index]
+item_list_attrs(
+ int id: @item_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+item_list_items(
+ int id: @item_list ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+labels(
+ unique int id: @label
+);
+
+#keyset[id]
+label_lifetimes(
+ int id: @label ref,
+ int lifetime: @lifetime ref
+);
+
+let_elses(
+ unique int id: @let_else
+);
+
+#keyset[id]
+let_else_block_exprs(
+ int id: @let_else ref,
+ int block_expr: @block_expr ref
+);
+
+macro_items(
+ unique int id: @macro_items
+);
+
+#keyset[id, index]
+macro_items_items(
+ int id: @macro_items ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+match_arms(
+ unique int id: @match_arm
+);
+
+#keyset[id, index]
+match_arm_attrs(
+ int id: @match_arm ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+match_arm_exprs(
+ int id: @match_arm ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+match_arm_guards(
+ int id: @match_arm ref,
+ int guard: @match_guard ref
+);
+
+#keyset[id]
+match_arm_pats(
+ int id: @match_arm ref,
+ int pat: @pat ref
+);
+
+match_arm_lists(
+ unique int id: @match_arm_list
+);
+
+#keyset[id, index]
+match_arm_list_arms(
+ int id: @match_arm_list ref,
+ int index: int ref,
+ int arm: @match_arm ref
+);
+
+#keyset[id, index]
+match_arm_list_attrs(
+ int id: @match_arm_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+match_guards(
+ unique int id: @match_guard
+);
+
+#keyset[id]
+match_guard_conditions(
+ int id: @match_guard ref,
+ int condition: @expr ref
+);
+
+meta(
+ unique int id: @meta
+);
+
+#keyset[id]
+meta_exprs(
+ int id: @meta ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+meta_is_unsafe(
+ int id: @meta ref
+);
+
+#keyset[id]
+meta_paths(
+ int id: @meta ref,
+ int path: @path ref
+);
+
+#keyset[id]
+meta_token_trees(
+ int id: @meta ref,
+ int token_tree: @token_tree ref
+);
+
+names(
+ unique int id: @name
+);
+
+#keyset[id]
+name_texts(
+ int id: @name ref,
+ string text: string ref
+);
+
+@param_base =
+ @param
+| @self_param
+;
+
+#keyset[id, index]
+param_base_attrs(
+ int id: @param_base ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+param_base_type_reprs(
+ int id: @param_base ref,
+ int type_repr: @type_repr ref
+);
+
+param_lists(
+ unique int id: @param_list
+);
+
+#keyset[id, index]
+param_list_params(
+ int id: @param_list ref,
+ int index: int ref,
+ int param: @param ref
+);
+
+#keyset[id]
+param_list_self_params(
+ int id: @param_list ref,
+ int self_param: @self_param ref
+);
+
+parenthesized_arg_lists(
+ unique int id: @parenthesized_arg_list
+);
+
+#keyset[id, index]
+parenthesized_arg_list_type_args(
+ int id: @parenthesized_arg_list ref,
+ int index: int ref,
+ int type_arg: @type_arg ref
+);
+
+@pat =
+ @box_pat
+| @const_block_pat
+| @ident_pat
+| @literal_pat
+| @macro_pat
+| @or_pat
+| @paren_pat
+| @path_pat
+| @range_pat
+| @ref_pat
+| @rest_pat
+| @slice_pat
+| @struct_pat
+| @tuple_pat
+| @tuple_struct_pat
+| @wildcard_pat
+;
+
+paths(
+ unique int id: @path
+);
+
+#keyset[id]
+path_qualifiers(
+ int id: @path ref,
+ int qualifier: @path ref
+);
+
+#keyset[id]
+path_segments_(
+ int id: @path ref,
+ int segment: @path_segment ref
+);
+
+path_segments(
+ unique int id: @path_segment
+);
+
+#keyset[id]
+path_segment_generic_arg_lists(
+ int id: @path_segment ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+path_segment_identifiers(
+ int id: @path_segment ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+path_segment_parenthesized_arg_lists(
+ int id: @path_segment ref,
+ int parenthesized_arg_list: @parenthesized_arg_list ref
+);
+
+#keyset[id]
+path_segment_ret_types(
+ int id: @path_segment ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+path_segment_return_type_syntaxes(
+ int id: @path_segment ref,
+ int return_type_syntax: @return_type_syntax ref
+);
+
+#keyset[id]
+path_segment_type_reprs(
+ int id: @path_segment ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+path_segment_trait_type_reprs(
+ int id: @path_segment ref,
+ int trait_type_repr: @path_type_repr ref
+);
+
+renames(
+ unique int id: @rename
+);
+
+#keyset[id]
+rename_names(
+ int id: @rename ref,
+ int name: @name ref
+);
+
+@resolvable =
+ @method_call_expr
+| @path_ast_node
+;
+
+#keyset[id]
+resolvable_resolved_paths(
+ int id: @resolvable ref,
+ string resolved_path: string ref
+);
+
+#keyset[id]
+resolvable_resolved_crate_origins(
+ int id: @resolvable ref,
+ string resolved_crate_origin: string ref
+);
+
+ret_type_reprs(
+ unique int id: @ret_type_repr
+);
+
+#keyset[id]
+ret_type_repr_type_reprs(
+ int id: @ret_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+return_type_syntaxes(
+ unique int id: @return_type_syntax
+);
+
+source_files(
+ unique int id: @source_file
+);
+
+#keyset[id, index]
+source_file_attrs(
+ int id: @source_file ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+source_file_items(
+ int id: @source_file ref,
+ int index: int ref,
+ int item: @item ref
+);
+
+@stmt =
+ @expr_stmt
+| @item
+| @let_stmt
+;
+
+stmt_lists(
+ unique int id: @stmt_list
+);
+
+#keyset[id, index]
+stmt_list_attrs(
+ int id: @stmt_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+stmt_list_statements(
+ int id: @stmt_list ref,
+ int index: int ref,
+ int statement: @stmt ref
+);
+
+#keyset[id]
+stmt_list_tail_exprs(
+ int id: @stmt_list ref,
+ int tail_expr: @expr ref
+);
+
+struct_expr_fields(
+ unique int id: @struct_expr_field
+);
+
+#keyset[id, index]
+struct_expr_field_attrs(
+ int id: @struct_expr_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_expr_field_exprs(
+ int id: @struct_expr_field ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+struct_expr_field_identifiers(
+ int id: @struct_expr_field ref,
+ int identifier: @name_ref ref
+);
+
+struct_expr_field_lists(
+ unique int id: @struct_expr_field_list
+);
+
+#keyset[id, index]
+struct_expr_field_list_attrs(
+ int id: @struct_expr_field_list ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+struct_expr_field_list_fields(
+ int id: @struct_expr_field_list ref,
+ int index: int ref,
+ int field: @struct_expr_field ref
+);
+
+#keyset[id]
+struct_expr_field_list_spreads(
+ int id: @struct_expr_field_list ref,
+ int spread: @expr ref
+);
+
+struct_fields(
+ unique int id: @struct_field
+);
+
+#keyset[id, index]
+struct_field_attrs(
+ int id: @struct_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_field_defaults(
+ int id: @struct_field ref,
+ int default: @expr ref
+);
+
+#keyset[id]
+struct_field_is_unsafe(
+ int id: @struct_field ref
+);
+
+#keyset[id]
+struct_field_names(
+ int id: @struct_field ref,
+ int name: @name ref
+);
+
+#keyset[id]
+struct_field_type_reprs(
+ int id: @struct_field ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+struct_field_visibilities(
+ int id: @struct_field ref,
+ int visibility: @visibility ref
+);
+
+struct_pat_fields(
+ unique int id: @struct_pat_field
+);
+
+#keyset[id, index]
+struct_pat_field_attrs(
+ int id: @struct_pat_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_pat_field_identifiers(
+ int id: @struct_pat_field ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+struct_pat_field_pats(
+ int id: @struct_pat_field ref,
+ int pat: @pat ref
+);
+
+struct_pat_field_lists(
+ unique int id: @struct_pat_field_list
+);
+
+#keyset[id, index]
+struct_pat_field_list_fields(
+ int id: @struct_pat_field_list ref,
+ int index: int ref,
+ int field: @struct_pat_field ref
+);
+
+#keyset[id]
+struct_pat_field_list_rest_pats(
+ int id: @struct_pat_field_list ref,
+ int rest_pat: @rest_pat ref
+);
+
+@token =
+ @comment
+;
+
+token_trees(
+ unique int id: @token_tree
+);
+
+tuple_fields(
+ unique int id: @tuple_field
+);
+
+#keyset[id, index]
+tuple_field_attrs(
+ int id: @tuple_field ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+tuple_field_type_reprs(
+ int id: @tuple_field ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+tuple_field_visibilities(
+ int id: @tuple_field ref,
+ int visibility: @visibility ref
+);
+
+type_bounds(
+ unique int id: @type_bound
+);
+
+#keyset[id]
+type_bound_is_async(
+ int id: @type_bound ref
+);
+
+#keyset[id]
+type_bound_is_const(
+ int id: @type_bound ref
+);
+
+#keyset[id]
+type_bound_lifetimes(
+ int id: @type_bound ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+type_bound_type_reprs(
+ int id: @type_bound ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+type_bound_use_bound_generic_args(
+ int id: @type_bound ref,
+ int use_bound_generic_args: @use_bound_generic_args ref
+);
+
+type_bound_lists(
+ unique int id: @type_bound_list
+);
+
+#keyset[id, index]
+type_bound_list_bounds(
+ int id: @type_bound_list ref,
+ int index: int ref,
+ int bound: @type_bound ref
+);
+
+@type_repr =
+ @array_type_repr
+| @dyn_trait_type_repr
+| @fn_ptr_type_repr
+| @for_type_repr
+| @impl_trait_type_repr
+| @infer_type_repr
+| @macro_type_repr
+| @never_type_repr
+| @paren_type_repr
+| @path_type_repr
+| @ptr_type_repr
+| @ref_type_repr
+| @slice_type_repr
+| @tuple_type_repr
+;
+
+@use_bound_generic_arg =
+ @lifetime
+| @name_ref
+;
+
+use_bound_generic_args(
+ unique int id: @use_bound_generic_args
+);
+
+#keyset[id, index]
+use_bound_generic_args_use_bound_generic_args(
+ int id: @use_bound_generic_args ref,
+ int index: int ref,
+ int use_bound_generic_arg: @use_bound_generic_arg ref
+);
+
+use_trees(
+ unique int id: @use_tree
+);
+
+#keyset[id]
+use_tree_is_glob(
+ int id: @use_tree ref
+);
+
+#keyset[id]
+use_tree_paths(
+ int id: @use_tree ref,
+ int path: @path ref
+);
+
+#keyset[id]
+use_tree_renames(
+ int id: @use_tree ref,
+ int rename: @rename ref
+);
+
+#keyset[id]
+use_tree_use_tree_lists(
+ int id: @use_tree ref,
+ int use_tree_list: @use_tree_list ref
+);
+
+use_tree_lists(
+ unique int id: @use_tree_list
+);
+
+#keyset[id, index]
+use_tree_list_use_trees(
+ int id: @use_tree_list ref,
+ int index: int ref,
+ int use_tree: @use_tree ref
+);
+
+variant_lists(
+ unique int id: @variant_list
+);
+
+#keyset[id, index]
+variant_list_variants(
+ int id: @variant_list ref,
+ int index: int ref,
+ int variant: @variant ref
+);
+
+visibilities(
+ unique int id: @visibility
+);
+
+#keyset[id]
+visibility_paths(
+ int id: @visibility ref,
+ int path: @path ref
+);
+
+where_clauses(
+ unique int id: @where_clause
+);
+
+#keyset[id, index]
+where_clause_predicates(
+ int id: @where_clause ref,
+ int index: int ref,
+ int predicate: @where_pred ref
+);
+
+where_preds(
+ unique int id: @where_pred
+);
+
+#keyset[id]
+where_pred_generic_param_lists(
+ int id: @where_pred ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+where_pred_lifetimes(
+ int id: @where_pred ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+where_pred_type_reprs(
+ int id: @where_pred ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+where_pred_type_bound_lists(
+ int id: @where_pred ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+array_expr_internals(
+ unique int id: @array_expr_internal
+);
+
+#keyset[id, index]
+array_expr_internal_attrs(
+ int id: @array_expr_internal ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+array_expr_internal_exprs(
+ int id: @array_expr_internal ref,
+ int index: int ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+array_expr_internal_is_semicolon(
+ int id: @array_expr_internal ref
+);
+
+array_type_reprs(
+ unique int id: @array_type_repr
+);
+
+#keyset[id]
+array_type_repr_const_args(
+ int id: @array_type_repr ref,
+ int const_arg: @const_arg ref
+);
+
+#keyset[id]
+array_type_repr_element_type_reprs(
+ int id: @array_type_repr ref,
+ int element_type_repr: @type_repr ref
+);
+
+asm_clobber_abis(
+ unique int id: @asm_clobber_abi
+);
+
+asm_consts(
+ unique int id: @asm_const
+);
+
+#keyset[id]
+asm_const_exprs(
+ int id: @asm_const ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+asm_const_is_const(
+ int id: @asm_const ref
+);
+
+asm_exprs(
+ unique int id: @asm_expr
+);
+
+#keyset[id, index]
+asm_expr_asm_pieces(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int asm_piece: @asm_piece ref
+);
+
+#keyset[id, index]
+asm_expr_attrs(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+asm_expr_templates(
+ int id: @asm_expr ref,
+ int index: int ref,
+ int template: @expr ref
+);
+
+asm_labels(
+ unique int id: @asm_label
+);
+
+#keyset[id]
+asm_label_block_exprs(
+ int id: @asm_label ref,
+ int block_expr: @block_expr ref
+);
+
+asm_operand_nameds(
+ unique int id: @asm_operand_named
+);
+
+#keyset[id]
+asm_operand_named_asm_operands(
+ int id: @asm_operand_named ref,
+ int asm_operand: @asm_operand ref
+);
+
+#keyset[id]
+asm_operand_named_names(
+ int id: @asm_operand_named ref,
+ int name: @name ref
+);
+
+asm_options_lists(
+ unique int id: @asm_options_list
+);
+
+#keyset[id, index]
+asm_options_list_asm_options(
+ int id: @asm_options_list ref,
+ int index: int ref,
+ int asm_option: @asm_option ref
+);
+
+asm_reg_operands(
+ unique int id: @asm_reg_operand
+);
+
+#keyset[id]
+asm_reg_operand_asm_dir_specs(
+ int id: @asm_reg_operand ref,
+ int asm_dir_spec: @asm_dir_spec ref
+);
+
+#keyset[id]
+asm_reg_operand_asm_operand_exprs(
+ int id: @asm_reg_operand ref,
+ int asm_operand_expr: @asm_operand_expr ref
+);
+
+#keyset[id]
+asm_reg_operand_asm_reg_specs(
+ int id: @asm_reg_operand ref,
+ int asm_reg_spec: @asm_reg_spec ref
+);
+
+asm_syms(
+ unique int id: @asm_sym
+);
+
+#keyset[id]
+asm_sym_paths(
+ int id: @asm_sym ref,
+ int path: @path ref
+);
+
+assoc_type_args(
+ unique int id: @assoc_type_arg
+);
+
+#keyset[id]
+assoc_type_arg_const_args(
+ int id: @assoc_type_arg ref,
+ int const_arg: @const_arg ref
+);
+
+#keyset[id]
+assoc_type_arg_generic_arg_lists(
+ int id: @assoc_type_arg ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+assoc_type_arg_identifiers(
+ int id: @assoc_type_arg ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+assoc_type_arg_param_lists(
+ int id: @assoc_type_arg ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id]
+assoc_type_arg_ret_types(
+ int id: @assoc_type_arg ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+assoc_type_arg_return_type_syntaxes(
+ int id: @assoc_type_arg ref,
+ int return_type_syntax: @return_type_syntax ref
+);
+
+#keyset[id]
+assoc_type_arg_type_reprs(
+ int id: @assoc_type_arg ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+assoc_type_arg_type_bound_lists(
+ int id: @assoc_type_arg ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+await_exprs(
+ unique int id: @await_expr
+);
+
+#keyset[id, index]
+await_expr_attrs(
+ int id: @await_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+await_expr_exprs(
+ int id: @await_expr ref,
+ int expr: @expr ref
+);
+
+become_exprs(
+ unique int id: @become_expr
+);
+
+#keyset[id, index]
+become_expr_attrs(
+ int id: @become_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+become_expr_exprs(
+ int id: @become_expr ref,
+ int expr: @expr ref
+);
+
+binary_exprs(
+ unique int id: @binary_expr
+);
+
+#keyset[id, index]
+binary_expr_attrs(
+ int id: @binary_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+binary_expr_lhs(
+ int id: @binary_expr ref,
+ int lhs: @expr ref
+);
+
+#keyset[id]
+binary_expr_operator_names(
+ int id: @binary_expr ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+binary_expr_rhs(
+ int id: @binary_expr ref,
+ int rhs: @expr ref
+);
+
+box_pats(
+ unique int id: @box_pat
+);
+
+#keyset[id]
+box_pat_pats(
+ int id: @box_pat ref,
+ int pat: @pat ref
+);
+
+break_exprs(
+ unique int id: @break_expr
+);
+
+#keyset[id, index]
+break_expr_attrs(
+ int id: @break_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+break_expr_exprs(
+ int id: @break_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+break_expr_lifetimes(
+ int id: @break_expr ref,
+ int lifetime: @lifetime ref
+);
+
+@call_expr_base =
+ @call_expr
+| @method_call_expr
+;
+
+#keyset[id]
+call_expr_base_arg_lists(
+ int id: @call_expr_base ref,
+ int arg_list: @arg_list ref
+);
+
+#keyset[id, index]
+call_expr_base_attrs(
+ int id: @call_expr_base ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+cast_exprs(
+ unique int id: @cast_expr
+);
+
+#keyset[id, index]
+cast_expr_attrs(
+ int id: @cast_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+cast_expr_exprs(
+ int id: @cast_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+cast_expr_type_reprs(
+ int id: @cast_expr ref,
+ int type_repr: @type_repr ref
+);
+
+closure_exprs(
+ unique int id: @closure_expr
+);
+
+#keyset[id]
+closure_expr_bodies(
+ int id: @closure_expr ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+closure_expr_closure_binders(
+ int id: @closure_expr ref,
+ int closure_binder: @closure_binder ref
+);
+
+#keyset[id]
+closure_expr_is_async(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_const(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_gen(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_move(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_is_static(
+ int id: @closure_expr ref
+);
+
+#keyset[id]
+closure_expr_ret_types(
+ int id: @closure_expr ref,
+ int ret_type: @ret_type_repr ref
+);
+
+comments(
+ unique int id: @comment,
+ int parent: @ast_node ref,
+ string text: string ref
+);
+
+const_args(
+ unique int id: @const_arg
+);
+
+#keyset[id]
+const_arg_exprs(
+ int id: @const_arg ref,
+ int expr: @expr ref
+);
+
+const_block_pats(
+ unique int id: @const_block_pat
+);
+
+#keyset[id]
+const_block_pat_block_exprs(
+ int id: @const_block_pat ref,
+ int block_expr: @block_expr ref
+);
+
+#keyset[id]
+const_block_pat_is_const(
+ int id: @const_block_pat ref
+);
+
+const_params(
+ unique int id: @const_param
+);
+
+#keyset[id, index]
+const_param_attrs(
+ int id: @const_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+const_param_default_vals(
+ int id: @const_param ref,
+ int default_val: @const_arg ref
+);
+
+#keyset[id]
+const_param_is_const(
+ int id: @const_param ref
+);
+
+#keyset[id]
+const_param_names(
+ int id: @const_param ref,
+ int name: @name ref
+);
+
+#keyset[id]
+const_param_type_reprs(
+ int id: @const_param ref,
+ int type_repr: @type_repr ref
+);
+
+continue_exprs(
+ unique int id: @continue_expr
+);
+
+#keyset[id, index]
+continue_expr_attrs(
+ int id: @continue_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+continue_expr_lifetimes(
+ int id: @continue_expr ref,
+ int lifetime: @lifetime ref
+);
+
+dyn_trait_type_reprs(
+ unique int id: @dyn_trait_type_repr
+);
+
+#keyset[id]
+dyn_trait_type_repr_type_bound_lists(
+ int id: @dyn_trait_type_repr ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+expr_stmts(
+ unique int id: @expr_stmt
+);
+
+#keyset[id]
+expr_stmt_exprs(
+ int id: @expr_stmt ref,
+ int expr: @expr ref
+);
+
+field_exprs(
+ unique int id: @field_expr
+);
+
+#keyset[id, index]
+field_expr_attrs(
+ int id: @field_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+field_expr_containers(
+ int id: @field_expr ref,
+ int container: @expr ref
+);
+
+#keyset[id]
+field_expr_identifiers(
+ int id: @field_expr ref,
+ int identifier: @name_ref ref
+);
+
+fn_ptr_type_reprs(
+ unique int id: @fn_ptr_type_repr
+);
+
+#keyset[id]
+fn_ptr_type_repr_abis(
+ int id: @fn_ptr_type_repr ref,
+ int abi: @abi ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_async(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_const(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_is_unsafe(
+ int id: @fn_ptr_type_repr ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_param_lists(
+ int id: @fn_ptr_type_repr ref,
+ int param_list: @param_list ref
+);
+
+#keyset[id]
+fn_ptr_type_repr_ret_types(
+ int id: @fn_ptr_type_repr ref,
+ int ret_type: @ret_type_repr ref
+);
+
+for_type_reprs(
+ unique int id: @for_type_repr
+);
+
+#keyset[id]
+for_type_repr_generic_param_lists(
+ int id: @for_type_repr ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+for_type_repr_type_reprs(
+ int id: @for_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+format_args_exprs(
+ unique int id: @format_args_expr
+);
+
+#keyset[id, index]
+format_args_expr_args(
+ int id: @format_args_expr ref,
+ int index: int ref,
+ int arg: @format_args_arg ref
+);
+
+#keyset[id, index]
+format_args_expr_attrs(
+ int id: @format_args_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+format_args_expr_templates(
+ int id: @format_args_expr ref,
+ int template: @expr ref
+);
+
+ident_pats(
+ unique int id: @ident_pat
+);
+
+#keyset[id, index]
+ident_pat_attrs(
+ int id: @ident_pat ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+ident_pat_is_mut(
+ int id: @ident_pat ref
+);
+
+#keyset[id]
+ident_pat_is_ref(
+ int id: @ident_pat ref
+);
+
+#keyset[id]
+ident_pat_names(
+ int id: @ident_pat ref,
+ int name: @name ref
+);
+
+#keyset[id]
+ident_pat_pats(
+ int id: @ident_pat ref,
+ int pat: @pat ref
+);
+
+if_exprs(
+ unique int id: @if_expr
+);
+
+#keyset[id, index]
+if_expr_attrs(
+ int id: @if_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+if_expr_conditions(
+ int id: @if_expr ref,
+ int condition: @expr ref
+);
+
+#keyset[id]
+if_expr_elses(
+ int id: @if_expr ref,
+ int else: @expr ref
+);
+
+#keyset[id]
+if_expr_thens(
+ int id: @if_expr ref,
+ int then: @block_expr ref
+);
+
+impl_trait_type_reprs(
+ unique int id: @impl_trait_type_repr
+);
+
+#keyset[id]
+impl_trait_type_repr_type_bound_lists(
+ int id: @impl_trait_type_repr ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+index_exprs(
+ unique int id: @index_expr
+);
+
+#keyset[id, index]
+index_expr_attrs(
+ int id: @index_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+index_expr_bases(
+ int id: @index_expr ref,
+ int base: @expr ref
+);
+
+#keyset[id]
+index_expr_indices(
+ int id: @index_expr ref,
+ int index: @expr ref
+);
+
+infer_type_reprs(
+ unique int id: @infer_type_repr
+);
+
+@item =
+ @adt
+| @assoc_item
+| @extern_block
+| @extern_crate
+| @extern_item
+| @impl
+| @macro_def
+| @macro_rules
+| @module
+| @trait
+| @trait_alias
+| @use
+;
+
+#keyset[id]
+item_attribute_macro_expansions(
+ int id: @item ref,
+ int attribute_macro_expansion: @macro_items ref
+);
+
+@labelable_expr =
+ @block_expr
+| @looping_expr
+;
+
+#keyset[id]
+labelable_expr_labels(
+ int id: @labelable_expr ref,
+ int label: @label ref
+);
+
+let_exprs(
+ unique int id: @let_expr
+);
+
+#keyset[id, index]
+let_expr_attrs(
+ int id: @let_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+let_expr_scrutinees(
+ int id: @let_expr ref,
+ int scrutinee: @expr ref
+);
+
+#keyset[id]
+let_expr_pats(
+ int id: @let_expr ref,
+ int pat: @pat ref
+);
+
+let_stmts(
+ unique int id: @let_stmt
+);
+
+#keyset[id, index]
+let_stmt_attrs(
+ int id: @let_stmt ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+let_stmt_initializers(
+ int id: @let_stmt ref,
+ int initializer: @expr ref
+);
+
+#keyset[id]
+let_stmt_let_elses(
+ int id: @let_stmt ref,
+ int let_else: @let_else ref
+);
+
+#keyset[id]
+let_stmt_pats(
+ int id: @let_stmt ref,
+ int pat: @pat ref
+);
+
+#keyset[id]
+let_stmt_type_reprs(
+ int id: @let_stmt ref,
+ int type_repr: @type_repr ref
+);
+
+lifetimes(
+ unique int id: @lifetime
+);
+
+#keyset[id]
+lifetime_texts(
+ int id: @lifetime ref,
+ string text: string ref
+);
+
+lifetime_args(
+ unique int id: @lifetime_arg
+);
+
+#keyset[id]
+lifetime_arg_lifetimes(
+ int id: @lifetime_arg ref,
+ int lifetime: @lifetime ref
+);
+
+lifetime_params(
+ unique int id: @lifetime_param
+);
+
+#keyset[id, index]
+lifetime_param_attrs(
+ int id: @lifetime_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+lifetime_param_lifetimes(
+ int id: @lifetime_param ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+lifetime_param_type_bound_lists(
+ int id: @lifetime_param ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+literal_exprs(
+ unique int id: @literal_expr
+);
+
+#keyset[id, index]
+literal_expr_attrs(
+ int id: @literal_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+literal_expr_text_values(
+ int id: @literal_expr ref,
+ string text_value: string ref
+);
+
+literal_pats(
+ unique int id: @literal_pat
+);
+
+#keyset[id]
+literal_pat_literals(
+ int id: @literal_pat ref,
+ int literal: @literal_expr ref
+);
+
+macro_block_exprs(
+ unique int id: @macro_block_expr
+);
+
+#keyset[id]
+macro_block_expr_tail_exprs(
+ int id: @macro_block_expr ref,
+ int tail_expr: @expr ref
+);
+
+#keyset[id, index]
+macro_block_expr_statements(
+ int id: @macro_block_expr ref,
+ int index: int ref,
+ int statement: @stmt ref
+);
+
+macro_exprs(
+ unique int id: @macro_expr
+);
+
+#keyset[id]
+macro_expr_macro_calls(
+ int id: @macro_expr ref,
+ int macro_call: @macro_call ref
+);
+
+macro_pats(
+ unique int id: @macro_pat
+);
+
+#keyset[id]
+macro_pat_macro_calls(
+ int id: @macro_pat ref,
+ int macro_call: @macro_call ref
+);
+
+macro_type_reprs(
+ unique int id: @macro_type_repr
+);
+
+#keyset[id]
+macro_type_repr_macro_calls(
+ int id: @macro_type_repr ref,
+ int macro_call: @macro_call ref
+);
+
+match_exprs(
+ unique int id: @match_expr
+);
+
+#keyset[id, index]
+match_expr_attrs(
+ int id: @match_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+match_expr_scrutinees(
+ int id: @match_expr ref,
+ int scrutinee: @expr ref
+);
+
+#keyset[id]
+match_expr_match_arm_lists(
+ int id: @match_expr ref,
+ int match_arm_list: @match_arm_list ref
+);
+
+name_refs(
+ unique int id: @name_ref
+);
+
+#keyset[id]
+name_ref_texts(
+ int id: @name_ref ref,
+ string text: string ref
+);
+
+never_type_reprs(
+ unique int id: @never_type_repr
+);
+
+offset_of_exprs(
+ unique int id: @offset_of_expr
+);
+
+#keyset[id, index]
+offset_of_expr_attrs(
+ int id: @offset_of_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+offset_of_expr_fields(
+ int id: @offset_of_expr ref,
+ int index: int ref,
+ int field: @name_ref ref
+);
+
+#keyset[id]
+offset_of_expr_type_reprs(
+ int id: @offset_of_expr ref,
+ int type_repr: @type_repr ref
+);
+
+or_pats(
+ unique int id: @or_pat
+);
+
+#keyset[id, index]
+or_pat_pats(
+ int id: @or_pat ref,
+ int index: int ref,
+ int pat: @pat ref
+);
+
+params(
+ unique int id: @param
+);
+
+#keyset[id]
+param_pats(
+ int id: @param ref,
+ int pat: @pat ref
+);
+
+paren_exprs(
+ unique int id: @paren_expr
+);
+
+#keyset[id, index]
+paren_expr_attrs(
+ int id: @paren_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+paren_expr_exprs(
+ int id: @paren_expr ref,
+ int expr: @expr ref
+);
+
+paren_pats(
+ unique int id: @paren_pat
+);
+
+#keyset[id]
+paren_pat_pats(
+ int id: @paren_pat ref,
+ int pat: @pat ref
+);
+
+paren_type_reprs(
+ unique int id: @paren_type_repr
+);
+
+#keyset[id]
+paren_type_repr_type_reprs(
+ int id: @paren_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+@path_ast_node =
+ @path_expr
+| @path_pat
+| @struct_expr
+| @struct_pat
+| @tuple_struct_pat
+;
+
+#keyset[id]
+path_ast_node_paths(
+ int id: @path_ast_node ref,
+ int path: @path ref
+);
+
+@path_expr_base =
+ @path_expr
+;
+
+path_type_reprs(
+ unique int id: @path_type_repr
+);
+
+#keyset[id]
+path_type_repr_paths(
+ int id: @path_type_repr ref,
+ int path: @path ref
+);
+
+prefix_exprs(
+ unique int id: @prefix_expr
+);
+
+#keyset[id, index]
+prefix_expr_attrs(
+ int id: @prefix_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+prefix_expr_exprs(
+ int id: @prefix_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+prefix_expr_operator_names(
+ int id: @prefix_expr ref,
+ string operator_name: string ref
+);
+
+ptr_type_reprs(
+ unique int id: @ptr_type_repr
+);
+
+#keyset[id]
+ptr_type_repr_is_const(
+ int id: @ptr_type_repr ref
+);
+
+#keyset[id]
+ptr_type_repr_is_mut(
+ int id: @ptr_type_repr ref
+);
+
+#keyset[id]
+ptr_type_repr_type_reprs(
+ int id: @ptr_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+range_exprs(
+ unique int id: @range_expr
+);
+
+#keyset[id, index]
+range_expr_attrs(
+ int id: @range_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+range_expr_ends(
+ int id: @range_expr ref,
+ int end: @expr ref
+);
+
+#keyset[id]
+range_expr_operator_names(
+ int id: @range_expr ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+range_expr_starts(
+ int id: @range_expr ref,
+ int start: @expr ref
+);
+
+range_pats(
+ unique int id: @range_pat
+);
+
+#keyset[id]
+range_pat_ends(
+ int id: @range_pat ref,
+ int end: @pat ref
+);
+
+#keyset[id]
+range_pat_operator_names(
+ int id: @range_pat ref,
+ string operator_name: string ref
+);
+
+#keyset[id]
+range_pat_starts(
+ int id: @range_pat ref,
+ int start: @pat ref
+);
+
+ref_exprs(
+ unique int id: @ref_expr
+);
+
+#keyset[id, index]
+ref_expr_attrs(
+ int id: @ref_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+ref_expr_exprs(
+ int id: @ref_expr ref,
+ int expr: @expr ref
+);
+
+#keyset[id]
+ref_expr_is_const(
+ int id: @ref_expr ref
+);
+
+#keyset[id]
+ref_expr_is_mut(
+ int id: @ref_expr ref
+);
+
+#keyset[id]
+ref_expr_is_raw(
+ int id: @ref_expr ref
+);
+
+ref_pats(
+ unique int id: @ref_pat
+);
+
+#keyset[id]
+ref_pat_is_mut(
+ int id: @ref_pat ref
+);
+
+#keyset[id]
+ref_pat_pats(
+ int id: @ref_pat ref,
+ int pat: @pat ref
+);
+
+ref_type_reprs(
+ unique int id: @ref_type_repr
+);
+
+#keyset[id]
+ref_type_repr_is_mut(
+ int id: @ref_type_repr ref
+);
+
+#keyset[id]
+ref_type_repr_lifetimes(
+ int id: @ref_type_repr ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+ref_type_repr_type_reprs(
+ int id: @ref_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+rest_pats(
+ unique int id: @rest_pat
+);
+
+#keyset[id, index]
+rest_pat_attrs(
+ int id: @rest_pat ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+return_exprs(
+ unique int id: @return_expr
+);
+
+#keyset[id, index]
+return_expr_attrs(
+ int id: @return_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+return_expr_exprs(
+ int id: @return_expr ref,
+ int expr: @expr ref
+);
+
+self_params(
+ unique int id: @self_param
+);
+
+#keyset[id]
+self_param_is_ref(
+ int id: @self_param ref
+);
+
+#keyset[id]
+self_param_is_mut(
+ int id: @self_param ref
+);
+
+#keyset[id]
+self_param_lifetimes(
+ int id: @self_param ref,
+ int lifetime: @lifetime ref
+);
+
+#keyset[id]
+self_param_names(
+ int id: @self_param ref,
+ int name: @name ref
+);
+
+slice_pats(
+ unique int id: @slice_pat
+);
+
+#keyset[id, index]
+slice_pat_pats(
+ int id: @slice_pat ref,
+ int index: int ref,
+ int pat: @pat ref
+);
+
+slice_type_reprs(
+ unique int id: @slice_type_repr
+);
+
+#keyset[id]
+slice_type_repr_type_reprs(
+ int id: @slice_type_repr ref,
+ int type_repr: @type_repr ref
+);
+
+struct_field_lists(
+ unique int id: @struct_field_list
+);
+
+#keyset[id, index]
+struct_field_list_fields(
+ int id: @struct_field_list ref,
+ int index: int ref,
+ int field: @struct_field ref
+);
+
+try_exprs(
+ unique int id: @try_expr
+);
+
+#keyset[id, index]
+try_expr_attrs(
+ int id: @try_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+try_expr_exprs(
+ int id: @try_expr ref,
+ int expr: @expr ref
+);
+
+tuple_exprs(
+ unique int id: @tuple_expr
+);
+
+#keyset[id, index]
+tuple_expr_attrs(
+ int id: @tuple_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id, index]
+tuple_expr_fields(
+ int id: @tuple_expr ref,
+ int index: int ref,
+ int field: @expr ref
+);
+
+tuple_field_lists(
+ unique int id: @tuple_field_list
+);
+
+#keyset[id, index]
+tuple_field_list_fields(
+ int id: @tuple_field_list ref,
+ int index: int ref,
+ int field: @tuple_field ref
+);
+
+tuple_pats(
+ unique int id: @tuple_pat
+);
+
+#keyset[id, index]
+tuple_pat_fields(
+ int id: @tuple_pat ref,
+ int index: int ref,
+ int field: @pat ref
+);
+
+tuple_type_reprs(
+ unique int id: @tuple_type_repr
+);
+
+#keyset[id, index]
+tuple_type_repr_fields(
+ int id: @tuple_type_repr ref,
+ int index: int ref,
+ int field: @type_repr ref
+);
+
+type_args(
+ unique int id: @type_arg
+);
+
+#keyset[id]
+type_arg_type_reprs(
+ int id: @type_arg ref,
+ int type_repr: @type_repr ref
+);
+
+type_params(
+ unique int id: @type_param
+);
+
+#keyset[id, index]
+type_param_attrs(
+ int id: @type_param ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+type_param_default_types(
+ int id: @type_param ref,
+ int default_type: @type_repr ref
+);
+
+#keyset[id]
+type_param_names(
+ int id: @type_param ref,
+ int name: @name ref
+);
+
+#keyset[id]
+type_param_type_bound_lists(
+ int id: @type_param ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+underscore_exprs(
+ unique int id: @underscore_expr
+);
+
+#keyset[id, index]
+underscore_expr_attrs(
+ int id: @underscore_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+variants(
+ unique int id: @variant
+);
+
+#keyset[id, index]
+variant_attrs(
+ int id: @variant ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+variant_discriminants(
+ int id: @variant ref,
+ int discriminant: @expr ref
+);
+
+#keyset[id]
+variant_field_lists(
+ int id: @variant ref,
+ int field_list: @field_list ref
+);
+
+#keyset[id]
+variant_names(
+ int id: @variant ref,
+ int name: @name ref
+);
+
+#keyset[id]
+variant_visibilities(
+ int id: @variant ref,
+ int visibility: @visibility ref
+);
+
+wildcard_pats(
+ unique int id: @wildcard_pat
+);
+
+yeet_exprs(
+ unique int id: @yeet_expr
+);
+
+#keyset[id, index]
+yeet_expr_attrs(
+ int id: @yeet_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+yeet_expr_exprs(
+ int id: @yeet_expr ref,
+ int expr: @expr ref
+);
+
+yield_exprs(
+ unique int id: @yield_expr
+);
+
+#keyset[id, index]
+yield_expr_attrs(
+ int id: @yield_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+yield_expr_exprs(
+ int id: @yield_expr ref,
+ int expr: @expr ref
+);
+
+@adt =
+ @enum
+| @struct
+| @union
+;
+
+#keyset[id, index]
+adt_derive_macro_expansions(
+ int id: @adt ref,
+ int index: int ref,
+ int derive_macro_expansion: @macro_items ref
+);
+
+@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: @attr ref
+);
+
+#keyset[id]
+block_expr_is_async(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_const(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_gen(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_move(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_try(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_is_unsafe(
+ int id: @block_expr ref
+);
+
+#keyset[id]
+block_expr_stmt_lists(
+ int id: @block_expr ref,
+ int stmt_list: @stmt_list ref
+);
+
+call_exprs(
+ unique int id: @call_expr
+);
+
+#keyset[id]
+call_expr_functions(
+ int id: @call_expr ref,
+ int function: @expr ref
+);
+
+extern_blocks(
+ unique int id: @extern_block
+);
+
+#keyset[id]
+extern_block_abis(
+ int id: @extern_block ref,
+ int abi: @abi ref
+);
+
+#keyset[id, index]
+extern_block_attrs(
+ int id: @extern_block ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+extern_block_extern_item_lists(
+ int id: @extern_block ref,
+ int extern_item_list: @extern_item_list ref
+);
+
+#keyset[id]
+extern_block_is_unsafe(
+ int id: @extern_block ref
+);
+
+extern_crates(
+ unique int id: @extern_crate
+);
+
+#keyset[id, index]
+extern_crate_attrs(
+ int id: @extern_crate ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+extern_crate_identifiers(
+ int id: @extern_crate ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+extern_crate_renames(
+ int id: @extern_crate ref,
+ int rename: @rename ref
+);
+
+#keyset[id]
+extern_crate_visibilities(
+ int id: @extern_crate ref,
+ int visibility: @visibility ref
+);
+
+@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: @attr ref
+);
+
+#keyset[id]
+impl_generic_param_lists(
+ int id: @impl ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+impl_is_const(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_is_default(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_is_unsafe(
+ int id: @impl ref
+);
+
+#keyset[id]
+impl_self_ties(
+ int id: @impl ref,
+ int self_ty: @type_repr ref
+);
+
+#keyset[id]
+impl_traits(
+ int id: @impl ref,
+ int trait: @type_repr ref
+);
+
+#keyset[id]
+impl_visibilities(
+ int id: @impl ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+impl_where_clauses(
+ int id: @impl ref,
+ int where_clause: @where_clause ref
+);
+
+@looping_expr =
+ @for_expr
+| @loop_expr
+| @while_expr
+;
+
+#keyset[id]
+looping_expr_loop_bodies(
+ int id: @looping_expr ref,
+ int loop_body: @block_expr ref
+);
+
+macro_defs(
+ unique int id: @macro_def
+);
+
+#keyset[id]
+macro_def_args(
+ int id: @macro_def ref,
+ int args: @token_tree ref
+);
+
+#keyset[id, index]
+macro_def_attrs(
+ int id: @macro_def ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_def_bodies(
+ int id: @macro_def ref,
+ int body: @token_tree ref
+);
+
+#keyset[id]
+macro_def_names(
+ int id: @macro_def ref,
+ int name: @name ref
+);
+
+#keyset[id]
+macro_def_visibilities(
+ int id: @macro_def ref,
+ int visibility: @visibility ref
+);
+
+macro_rules(
+ unique int id: @macro_rules
+);
+
+#keyset[id, index]
+macro_rules_attrs(
+ int id: @macro_rules ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_rules_names(
+ int id: @macro_rules ref,
+ int name: @name ref
+);
+
+#keyset[id]
+macro_rules_token_trees(
+ int id: @macro_rules ref,
+ int token_tree: @token_tree ref
+);
+
+#keyset[id]
+macro_rules_visibilities(
+ int id: @macro_rules ref,
+ int visibility: @visibility ref
+);
+
+method_call_exprs(
+ unique int id: @method_call_expr
+);
+
+#keyset[id]
+method_call_expr_generic_arg_lists(
+ int id: @method_call_expr ref,
+ int generic_arg_list: @generic_arg_list ref
+);
+
+#keyset[id]
+method_call_expr_identifiers(
+ int id: @method_call_expr ref,
+ int identifier: @name_ref ref
+);
+
+#keyset[id]
+method_call_expr_receivers(
+ int id: @method_call_expr ref,
+ int receiver: @expr ref
+);
+
+modules(
+ unique int id: @module
+);
+
+#keyset[id, index]
+module_attrs(
+ int id: @module ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+module_item_lists(
+ int id: @module ref,
+ int item_list: @item_list ref
+);
+
+#keyset[id]
+module_names(
+ int id: @module ref,
+ int name: @name ref
+);
+
+#keyset[id]
+module_visibilities(
+ int id: @module ref,
+ int visibility: @visibility ref
+);
+
+path_exprs(
+ unique int id: @path_expr
+);
+
+#keyset[id, index]
+path_expr_attrs(
+ int id: @path_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+path_pats(
+ unique int id: @path_pat
+);
+
+struct_exprs(
+ unique int id: @struct_expr
+);
+
+#keyset[id]
+struct_expr_struct_expr_field_lists(
+ int id: @struct_expr ref,
+ int struct_expr_field_list: @struct_expr_field_list ref
+);
+
+struct_pats(
+ unique int id: @struct_pat
+);
+
+#keyset[id]
+struct_pat_struct_pat_field_lists(
+ int id: @struct_pat ref,
+ int struct_pat_field_list: @struct_pat_field_list ref
+);
+
+traits(
+ unique int id: @trait
+);
+
+#keyset[id]
+trait_assoc_item_lists(
+ int id: @trait ref,
+ int assoc_item_list: @assoc_item_list ref
+);
+
+#keyset[id, index]
+trait_attrs(
+ int id: @trait ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+trait_generic_param_lists(
+ int id: @trait ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+trait_is_auto(
+ int id: @trait ref
+);
+
+#keyset[id]
+trait_is_unsafe(
+ int id: @trait ref
+);
+
+#keyset[id]
+trait_names(
+ int id: @trait ref,
+ int name: @name ref
+);
+
+#keyset[id]
+trait_type_bound_lists(
+ int id: @trait ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+trait_visibilities(
+ int id: @trait ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+trait_where_clauses(
+ int id: @trait ref,
+ int where_clause: @where_clause ref
+);
+
+trait_aliases(
+ unique int id: @trait_alias
+);
+
+#keyset[id, index]
+trait_alias_attrs(
+ int id: @trait_alias ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+trait_alias_generic_param_lists(
+ int id: @trait_alias ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+trait_alias_names(
+ int id: @trait_alias ref,
+ int name: @name ref
+);
+
+#keyset[id]
+trait_alias_type_bound_lists(
+ int id: @trait_alias ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+trait_alias_visibilities(
+ int id: @trait_alias ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+trait_alias_where_clauses(
+ int id: @trait_alias ref,
+ int where_clause: @where_clause ref
+);
+
+tuple_struct_pats(
+ unique int id: @tuple_struct_pat
+);
+
+#keyset[id, index]
+tuple_struct_pat_fields(
+ int id: @tuple_struct_pat ref,
+ int index: int ref,
+ int field: @pat ref
+);
+
+uses(
+ unique int id: @use
+);
+
+#keyset[id, index]
+use_attrs(
+ int id: @use ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+use_use_trees(
+ int id: @use ref,
+ int use_tree: @use_tree ref
+);
+
+#keyset[id]
+use_visibilities(
+ int id: @use ref,
+ int visibility: @visibility ref
+);
+
+consts(
+ unique int id: @const
+);
+
+#keyset[id, index]
+const_attrs(
+ int id: @const ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+const_bodies(
+ int id: @const ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+const_generic_param_lists(
+ int id: @const ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+const_is_const(
+ int id: @const ref
+);
+
+#keyset[id]
+const_is_default(
+ int id: @const ref
+);
+
+#keyset[id]
+const_names(
+ int id: @const ref,
+ int name: @name ref
+);
+
+#keyset[id]
+const_type_reprs(
+ int id: @const ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+const_visibilities(
+ int id: @const ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+const_where_clauses(
+ int id: @const ref,
+ int where_clause: @where_clause ref
+);
+
+#keyset[id]
+const_has_implementation(
+ int id: @const ref
+);
+
+enums(
+ unique int id: @enum
+);
+
+#keyset[id, index]
+enum_attrs(
+ int id: @enum ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+enum_generic_param_lists(
+ int id: @enum ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+enum_names(
+ int id: @enum ref,
+ int name: @name ref
+);
+
+#keyset[id]
+enum_variant_lists(
+ int id: @enum ref,
+ int variant_list: @variant_list ref
+);
+
+#keyset[id]
+enum_visibilities(
+ int id: @enum ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+enum_where_clauses(
+ int id: @enum ref,
+ int where_clause: @where_clause ref
+);
+
+for_exprs(
+ unique int id: @for_expr
+);
+
+#keyset[id, index]
+for_expr_attrs(
+ int id: @for_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+for_expr_iterables(
+ int id: @for_expr ref,
+ int iterable: @expr ref
+);
+
+#keyset[id]
+for_expr_pats(
+ int id: @for_expr ref,
+ int pat: @pat ref
+);
+
+functions(
+ unique int id: @function
+);
+
+#keyset[id]
+function_abis(
+ int id: @function ref,
+ int abi: @abi ref
+);
+
+#keyset[id]
+function_bodies(
+ int id: @function ref,
+ int body: @block_expr ref
+);
+
+#keyset[id]
+function_generic_param_lists(
+ int id: @function ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+function_is_async(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_const(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_default(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_gen(
+ int id: @function ref
+);
+
+#keyset[id]
+function_is_unsafe(
+ int id: @function ref
+);
+
+#keyset[id]
+function_names(
+ int id: @function ref,
+ int name: @name ref
+);
+
+#keyset[id]
+function_ret_types(
+ int id: @function ref,
+ int ret_type: @ret_type_repr ref
+);
+
+#keyset[id]
+function_visibilities(
+ int id: @function ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+function_where_clauses(
+ int id: @function ref,
+ int where_clause: @where_clause ref
+);
+
+#keyset[id]
+function_has_implementation(
+ int id: @function ref
+);
+
+loop_exprs(
+ unique int id: @loop_expr
+);
+
+#keyset[id, index]
+loop_expr_attrs(
+ int id: @loop_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+macro_calls(
+ unique int id: @macro_call
+);
+
+#keyset[id, index]
+macro_call_attrs(
+ int id: @macro_call ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+macro_call_paths(
+ int id: @macro_call ref,
+ int path: @path ref
+);
+
+#keyset[id]
+macro_call_token_trees(
+ int id: @macro_call ref,
+ int token_tree: @token_tree ref
+);
+
+#keyset[id]
+macro_call_macro_call_expansions(
+ int id: @macro_call ref,
+ int macro_call_expansion: @ast_node ref
+);
+
+statics(
+ unique int id: @static
+);
+
+#keyset[id, index]
+static_attrs(
+ int id: @static ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+static_bodies(
+ int id: @static ref,
+ int body: @expr ref
+);
+
+#keyset[id]
+static_is_mut(
+ int id: @static ref
+);
+
+#keyset[id]
+static_is_static(
+ int id: @static ref
+);
+
+#keyset[id]
+static_is_unsafe(
+ int id: @static ref
+);
+
+#keyset[id]
+static_names(
+ int id: @static ref,
+ int name: @name ref
+);
+
+#keyset[id]
+static_type_reprs(
+ int id: @static ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+static_visibilities(
+ int id: @static ref,
+ int visibility: @visibility ref
+);
+
+structs(
+ unique int id: @struct
+);
+
+#keyset[id, index]
+struct_attrs(
+ int id: @struct ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+struct_field_lists_(
+ int id: @struct ref,
+ int field_list: @field_list ref
+);
+
+#keyset[id]
+struct_generic_param_lists(
+ int id: @struct ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+struct_names(
+ int id: @struct ref,
+ int name: @name ref
+);
+
+#keyset[id]
+struct_visibilities(
+ int id: @struct ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+struct_where_clauses(
+ int id: @struct ref,
+ int where_clause: @where_clause ref
+);
+
+type_aliases(
+ unique int id: @type_alias
+);
+
+#keyset[id, index]
+type_alias_attrs(
+ int id: @type_alias ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+type_alias_generic_param_lists(
+ int id: @type_alias ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+type_alias_is_default(
+ int id: @type_alias ref
+);
+
+#keyset[id]
+type_alias_names(
+ int id: @type_alias ref,
+ int name: @name ref
+);
+
+#keyset[id]
+type_alias_type_reprs(
+ int id: @type_alias ref,
+ int type_repr: @type_repr ref
+);
+
+#keyset[id]
+type_alias_type_bound_lists(
+ int id: @type_alias ref,
+ int type_bound_list: @type_bound_list ref
+);
+
+#keyset[id]
+type_alias_visibilities(
+ int id: @type_alias ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+type_alias_where_clauses(
+ int id: @type_alias ref,
+ int where_clause: @where_clause ref
+);
+
+unions(
+ unique int id: @union
+);
+
+#keyset[id, index]
+union_attrs(
+ int id: @union ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+union_generic_param_lists(
+ int id: @union ref,
+ int generic_param_list: @generic_param_list ref
+);
+
+#keyset[id]
+union_names(
+ int id: @union ref,
+ int name: @name ref
+);
+
+#keyset[id]
+union_struct_field_lists(
+ int id: @union ref,
+ int struct_field_list: @struct_field_list ref
+);
+
+#keyset[id]
+union_visibilities(
+ int id: @union ref,
+ int visibility: @visibility ref
+);
+
+#keyset[id]
+union_where_clauses(
+ int id: @union ref,
+ int where_clause: @where_clause ref
+);
+
+while_exprs(
+ unique int id: @while_expr
+);
+
+#keyset[id, index]
+while_expr_attrs(
+ int id: @while_expr ref,
+ int index: int ref,
+ int attr: @attr ref
+);
+
+#keyset[id]
+while_expr_conditions(
+ int id: @while_expr ref,
+ int condition: @expr ref
+);
diff --git a/rust/ql/lib/upgrades/8e9b0c516ae822286689672d1020707020128a19/upgrade.properties b/rust/ql/lib/upgrades/8e9b0c516ae822286689672d1020707020128a19/upgrade.properties
new file mode 100644
index 000000000000..3199458aa6b3
--- /dev/null
+++ b/rust/ql/lib/upgrades/8e9b0c516ae822286689672d1020707020128a19/upgrade.properties
@@ -0,0 +1,2 @@
+description: Add overlayChangedFiles relation
+compatibility: full
diff --git a/shared/tree-sitter-extractor/src/generator/mod.rs b/shared/tree-sitter-extractor/src/generator/mod.rs
index e4bd1ac4eb0d..3e36a3e4f8ae 100644
--- a/shared/tree-sitter-extractor/src/generator/mod.rs
+++ b/shared/tree-sitter-extractor/src/generator/mod.rs
@@ -104,9 +104,6 @@ pub fn generate(
body.push(ql::TopLevel::Predicate(
ql_gen::create_get_node_file_predicate(&ast_node_name, &node_location_table_name),
));
- body.push(ql::TopLevel::Predicate(
- ql_gen::create_discard_file_predicate(),
- ));
body.push(ql::TopLevel::Predicate(
ql_gen::create_discardable_ast_node_predicate(&ast_node_name),
));
diff --git a/shared/tree-sitter-extractor/src/generator/prefix.dbscheme b/shared/tree-sitter-extractor/src/generator/prefix.dbscheme
index 16921105a720..a52390bed1aa 100644
--- a/shared/tree-sitter-extractor/src/generator/prefix.dbscheme
+++ b/shared/tree-sitter-extractor/src/generator/prefix.dbscheme
@@ -110,3 +110,7 @@ databaseMetadata(
string metadataKey: string ref,
string value: string ref
);
+
+overlayChangedFiles(
+ string path: string ref
+);
diff --git a/shared/tree-sitter-extractor/src/generator/ql_gen.rs b/shared/tree-sitter-extractor/src/generator/ql_gen.rs
index b5853410c1d9..84d55e751ce4 100644
--- a/shared/tree-sitter-extractor/src/generator/ql_gen.rs
+++ b/shared/tree-sitter-extractor/src/generator/ql_gen.rs
@@ -318,34 +318,6 @@ pub fn create_get_node_file_predicate<'a>(
}
}
-pub fn create_discard_file_predicate<'a>() -> ql::Predicate<'a> {
- ql::Predicate {
- name: "discardFile",
- qldoc: Some(String::from(
- "Holds if `file` was extracted as part of the overlay database.",
- )),
- overridden: false,
- is_private: true,
- is_final: false,
- overlay: Some(ql::OverlayAnnotation::Local),
- return_type: None,
- formal_parameters: vec![ql::FormalParameter {
- name: "file",
- param_type: ql::Type::At("file"),
- }],
- body: ql::Expression::And(vec![
- ql::Expression::Pred("isOverlay", vec![]),
- ql::Expression::Equals(
- Box::new(ql::Expression::Var("file")),
- Box::new(ql::Expression::Pred(
- "getNodeFile",
- vec![ql::Expression::Var("_")],
- )),
- ),
- ]),
- }
-}
-
pub fn create_discardable_ast_node_predicate(ast_node_name: &str) -> ql::Predicate {
ql::Predicate {
name: "discardableAstNode",
@@ -398,17 +370,26 @@ pub fn create_discard_ast_node_predicate(ast_node_name: &str) -> ql::Predicate {
}],
body: ql::Expression::Aggregate {
name: "exists",
- vars: vec![ql::FormalParameter {
- name: "file",
- param_type: ql::Type::At("file"),
- }],
- range: None,
+ vars: vec![
+ ql::FormalParameter {
+ name: "file",
+ param_type: ql::Type::At("file"),
+ },
+ ql::FormalParameter {
+ name: "path",
+ param_type: ql::Type::String,
+ },
+ ],
+ range: Some(Box::new(ql::Expression::Pred(
+ "files",
+ vec![ql::Expression::Var("file"), ql::Expression::Var("path")],
+ ))),
expr: Box::new(ql::Expression::And(vec![
ql::Expression::Pred(
"discardableAstNode",
vec![ql::Expression::Var("file"), ql::Expression::Var("node")],
),
- ql::Expression::Pred("discardFile", vec![ql::Expression::Var("file")]),
+ ql::Expression::Pred("overlayChangedFiles", vec![ql::Expression::Var("path")]),
])),
second_expr: None,
},