From ea11b08f28b34ea6b673347134d9288e7ac6f589 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 20 Mar 2025 16:51:35 +0100 Subject: [PATCH] Rust: rerun code generation --- rust/extractor/src/generated/.generated.list | 2 +- rust/extractor/src/generated/top.rs | 58 ++++++++++++++++++- rust/extractor/src/translate/generated.rs | 8 +++ rust/ql/.generated.list | 27 ++++----- rust/ql/.gitattributes | 5 +- rust/ql/lib/codeql/rust/elements.qll | 1 + rust/ql/lib/codeql/rust/elements/Struct.qll | 1 + rust/ql/lib/codeql/rust/elements/Union.qll | 1 + rust/ql/lib/codeql/rust/elements/Variant.qll | 2 +- .../lib/codeql/rust/elements/VariantDef.qll | 9 +++ .../rust/elements/internal/VariantDefImpl.qll | 16 +++++ .../internal/generated/ParentChild.qll | 43 ++++++++++---- .../rust/elements/internal/generated/Raw.qll | 11 +++- .../elements/internal/generated/Struct.qll | 3 +- .../elements/internal/generated/Synth.qll | 49 ++++++++++++---- .../elements/internal/generated/Union.qll | 3 +- .../elements/internal/generated/Variant.qll | 4 +- .../internal/generated/VariantDef.qll | 21 +++++++ rust/ql/lib/rust.dbscheme | 8 ++- .../generated/Variant/Variant.ql | 13 +---- .../Variant/Variant_getCrateOrigin.ql | 7 --- .../Variant_getExtendedCanonicalPath.ql | 7 --- rust/schema/ast.py | 9 ++- 23 files changed, 231 insertions(+), 77 deletions(-) create mode 100644 rust/ql/lib/codeql/rust/elements/VariantDef.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/VariantDefImpl.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/generated/VariantDef.qll delete mode 100644 rust/ql/test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql delete mode 100644 rust/ql/test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index f4582cf85f4..dc907c8fc8f 100644 --- a/rust/extractor/src/generated/.generated.list +++ b/rust/extractor/src/generated/.generated.list @@ -1,2 +1,2 @@ mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 -top.rs 22ca74a6a44e2984afdaffbc536d847296a79312d201b81948a32fe56064c8bf 22ca74a6a44e2984afdaffbc536d847296a79312d201b81948a32fe56064c8bf +top.rs 01fa96e1f1e8bbb934cf07a28489eda47e002b2a27eb210d6359117e82c93a21 01fa96e1f1e8bbb934cf07a28489eda47e002b2a27eb210d6359117e82c93a21 diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index 4386de18016..f7fcd417f2e 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -3275,6 +3275,42 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct VariantDef { + _unused: () +} + +impl trap::TrapClass for VariantDef { + fn class_name() -> &'static str { "VariantDef" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme VariantDef is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme VariantDef is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme VariantDef is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct VariantList { pub id: trap::TrapId, @@ -8588,9 +8624,9 @@ impl trap::TrapClass for Variant { fn class_name() -> &'static str { "Variant" } } -impl From> for trap::Label { +impl From> for trap::Label { fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme Variant is a subclass of Addressable + // SAFETY: this is safe because in the dbscheme Variant is a subclass of VariantDef unsafe { Self::from_untyped(value.as_untyped()) } @@ -10540,6 +10576,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Struct is a subclass of VariantDef + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct StructExpr { pub id: trap::TrapId, @@ -11209,6 +11254,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Union is a subclass of VariantDef + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct Use { pub id: trap::TrapId, diff --git a/rust/extractor/src/translate/generated.rs b/rust/extractor/src/translate/generated.rs index 9479f793961..4f9181952f2 100644 --- a/rust/extractor/src/translate/generated.rs +++ b/rust/extractor/src/translate/generated.rs @@ -176,6 +176,14 @@ impl Translator<'_> { } } + pub(crate) fn emit_variant_def(&mut self, node: ast::VariantDef) -> Option> { + match node { + ast::VariantDef::Struct(inner) => self.emit_struct(inner).map(Into::into), + ast::VariantDef::Union(inner) => self.emit_union(inner).map(Into::into), + ast::VariantDef::Variant(inner) => self.emit_variant(inner).map(Into::into), + } + } + pub(crate) fn emit_item(&mut self, node: ast::Item) -> Option> { match node { ast::Item::Const(inner) => self.emit_const(inner).map(Into::into), diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 61fcb951cad..77cd39f8c9d 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -146,7 +146,7 @@ lib/codeql/rust/elements/SourceFile.qll 5916d550385d618bd3b3d4835fbd304048582222 lib/codeql/rust/elements/Static.qll 439550ae01b4975dc08867ecdc1f8a4da0127321af9511857a006e6bdf6400b0 e83252e8bc06045322bd2cbadd5a2c7deb82b8a11ddbc9809d3e199056f57bee lib/codeql/rust/elements/Stmt.qll 532b12973037301246daf7d8c0177f734202f43d9261c7a4ca6f5080eea8ca64 b838643c4f2b4623d2c816cddad0e68ca3e11f2879ab7beaece46f489ec4b1f3 lib/codeql/rust/elements/StmtList.qll 6f990782d5a5307d6d8a3256eb510aedfdaf7bd0e45f3dff35388842ab487b8c b412a27dea0c67307ab79104d45c5b4848c3191cc983e8b0d8dfa739a1b65d9c -lib/codeql/rust/elements/Struct.qll 96b7020c7670d5ea7effa6e390d3a163dba05ca5206cfdd1284f4a41e5664c6a 3fea0d13b8da0f210f3ad9004189efc3c56bcc90e67d6ef7817c6767f6aff273 +lib/codeql/rust/elements/Struct.qll a8e1184724f3862b2a532638214d4c87592ab475295e01c3dfa0f3ee1e4b0be7 10da81c04c0e4f42463f7d393e575769799fcb5b0211f59569ea89f252be96a7 lib/codeql/rust/elements/StructExpr.qll af9059c01a97755e94f1a8b60c66d9c7663ed0705b2845b086b8953f16019fab 2d33d86b035a15c1b31c3e07e0e74c4bbe57a71c5a55d60e720827814e73b7ba lib/codeql/rust/elements/StructExprField.qll 3eb9f17ecd1ad38679689eb4ecc169d3a0b5b7a3fc597ae5a957a7aea2f74e4f 8fcd26f266f203004899a60447ba16e7eae4e3a654fbec7f54e26857730ede93 lib/codeql/rust/elements/StructExprFieldList.qll 6f77363f93ce4e55d91cc93cef4451b93b9714a4aec91c5416d488191340a079 4da6b070125150f2d28028e29095df93e0bbdb5bc4bd4c672e060492f36367c4 @@ -174,13 +174,14 @@ lib/codeql/rust/elements/TypeRepr.qll ea41b05ef0aaac71da460f9a6a8331cf98166f2c38 lib/codeql/rust/elements/UnderscoreExpr.qll 233661b82b87c8cda16d8f2e17965658c3dc6b69efb23cb8eb9c4f50c68521e0 8edff8e80aac2ecf83a6b58f310cab688cbaeea0a0e68a298b644e565960cc74 lib/codeql/rust/elements/Unextracted.qll 12e60c79ef5b94d72b579b19970622e7b73822ebc13fbcfedfe953527ab1ac36 ec015db2eb12c3c82693ddc71d32d9ab9ef7a958e741e2510681bb707ceca23e lib/codeql/rust/elements/Unimplemented.qll bf624d28163e5c99accda16c0c99f938bec4a3b1b920a463e86fc8529ff5ff02 013bc7777298d250338f835cd494b5a8accea2d6a4f9561851f283ac129a446b -lib/codeql/rust/elements/Union.qll 92ffb1abc03889b9b71dae9491d4595e443c80b472474644f4e2d80215d4420a 8ad87a33f56583c3ebd19083d8e177da91dcc4dacd5e9140a48f01750c6b1cdb +lib/codeql/rust/elements/Union.qll e8e05763f7004c6a03d0bc4bcc153e12cc9150bb019d165b9ee84657a4c2dfe3 0db02f200220e0af54bf2ec21ccea1d8eba4f9225521d19ca8701786a807b552 lib/codeql/rust/elements/Use.qll e27d30ece0456a73732dfd867dfc5abdf48a50de56e7dafcab444b688610af72 7efe59c04dd2f10b4a25b8a17beb51362be0a93d73e5a9e1251cf133cf1227c3 lib/codeql/rust/elements/UseBoundGenericArg.qll f16903f8fff676d3700eaad5490804624391141472ecc3166ccb1f70c794c120 5efda98088d096b42f53ceccae78c05f15c6953525b514d849681cb2cf65b147 lib/codeql/rust/elements/UseBoundGenericArgs.qll 6d3b8bf8e59ef6d10d2f58c6d2eca61b113a524174f62d1f56b724c4179fda04 8fad6ed9e5bf159a2db01e7eb960cc55b940f7b92c4bb5c967120068e4fec80a lib/codeql/rust/elements/UseTree.qll 69d96e5985ecdedc421d3d5da16b738ccdbb28ea01ca4d510b98f2a3409b28e5 0188c2744e89e19aa077c802e89faa87d62ca306adb71be8c3b23617f69a5982 lib/codeql/rust/elements/UseTreeList.qll 768c4ec25e8807bba65619f566b22fa5c0946c36e96c88cfdee04c2875b44554 6433c8d9acd4e346cadd5fef01d79dd35bb6245115bdceb5322c0511106030b0 -lib/codeql/rust/elements/Variant.qll 328323ef59faf01dcf71e7d728fd10a60465a1bd24e1d3578289cdf6554e5b63 ba49c635790395d9df4398c3c0fec700c3c7761fcc6581623a45d381d23ac34d +lib/codeql/rust/elements/Variant.qll 9f3d1385ded895fea427306cba36f8213c139a2754d9d61c26394bb2297036a3 47828e71c0adfcebd7299c46cfbedad80852af4c6e18104e6c553d07016a2d66 +lib/codeql/rust/elements/VariantDef.qll fb14bf049aba1fc0b62d156e69b7965b6526d12c9150793f1d38b0f8fb8a0a8f 71453a80a3c60288242c5d86ab81ef4d027a3bc870ceffa62160864d32a7d7ad lib/codeql/rust/elements/VariantList.qll 07adfe5750b2d5b50c8629f36feba24edd84f75698a80339d4cee20f4e95829d 7d322e60c84ea45f8c8b509226da7ae3c0125bcda42a98a94e3e6a9855cab79e lib/codeql/rust/elements/Visibility.qll d2cf0727efaf8df6b3808cb4a6b2e26d18e42db766d92e97ad3ef046d91cb9e5 8947a1e2d48b532c6455ddf143fa5b1dff28c40da1f1c6a72769fc9db7ecbaf6 lib/codeql/rust/elements/WhereClause.qll da51212766700e40713fff968078a0172a4f73eebc5425d8e0d60b03c2fe59fa 0ec036aea729b8f4af0eb8118911dce715e2eb4640ae7b5e40a007a48da03899 @@ -446,6 +447,7 @@ lib/codeql/rust/elements/internal/UseTreeImpl.qll d478495a62e466fa4f443ffcf0d523 lib/codeql/rust/elements/internal/UseTreeListConstructor.qll 973577da5d7b58eb245f108bd1ae2fecc5645f2795421dedf7687b067a233003 f41e5e3ffcb2a387e5c37f56c0b271e8dc20428b6ff4c63e1ee42fcfa4e67d0a lib/codeql/rust/elements/internal/UseTreeListImpl.qll 6cac5242f1219df0fe9b3c139db8cc075a2fde618614ca56de2c856130a8ebaa d2ec917055a45f4d07d4ea6dff14298925ae323b165a5bcb6e906f7aad463f82 lib/codeql/rust/elements/internal/VariantConstructor.qll 0297d4a9a9b32448d6d6063d308c8d0e7a067d028b9ec97de10a1d659ee2cfdd 6a4bee28b340e97d06b262120fd39ab21717233a5bcc142ba542cb1b456eb952 +lib/codeql/rust/elements/internal/VariantDefImpl.qll 5530c04b8906d2947ec9c79fc17a05a2557b01a521dd4ca8a60518b78d13867b 3971558e1c907d8d2ef174b10f911e61b898916055a8173788e6f0b98869b144 lib/codeql/rust/elements/internal/VariantListConstructor.qll c841fb345eb46ea3978a0ed7a689f8955efc9178044b140b74d98a6bcd0c926a c9e52d112abdba2b60013fa01a944c8770766bf7368f9878e6b13daaa4eed446 lib/codeql/rust/elements/internal/VariantListImpl.qll 858f3668f53d8b6aacb2715a59509969fe9fd24c5a2ff0b5ceed8a2441cd9cf7 f2a57b6232247687f529be8e4d2d3d0d4d108221d8a6eb45a69a1bcc0cdc51de lib/codeql/rust/elements/internal/VisibilityConstructor.qll 1fd30663d87945f08d15cfaca54f586a658f26b7a98ea45ac73a35d36d4f65d0 6ddaf11742cc8fbbe03af2aa578394041ae077911e62d2fa6c885ae0543ba53a @@ -580,7 +582,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll c808c9d84dd7800573832b lib/codeql/rust/elements/internal/generated/ParenExpr.qll bc0731505bfe88516205ec360582a4222d2681d11342c93e15258590ddee82f2 d4bd6e0c80cf1d63746c88d4bcb3a01d4c75732e5da09e3ebd9437ced227fb60 lib/codeql/rust/elements/internal/generated/ParenPat.qll 4f168ef5d5bb87a903251cc31b2e44a759b099ec69c90af31783fbb15778c940 0e34f94a45a13396fd57d94c245dc64d1adde2ab0e22b56946f7e94c04e297fc lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll 40ab5c592e7699c621787793743e33988de71ff42ca27599f5ab3ddb70e3f7d8 12c0a6eed2202ee3e892f61da3b3ce77ac3190854cdf3097e8d2be98aa3cb91d -lib/codeql/rust/elements/internal/generated/ParentChild.qll 0e80d85aa8ddb203edca90c9b68f88340231ab5415933f622bad18f639ff6190 9ebbfdf48f0a3c06658b53a9fd987530b34c9c40ae2c3d6ef6ebdf2721fdbf83 +lib/codeql/rust/elements/internal/generated/ParentChild.qll 9b2070dbfe201734c41dfabfe32e9636807bf8630476353421dced8e8c2b20e8 6f8c316079362a606c6362cd2188f23656ec803869cd807d45e0e9af15f9f498 lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll c5fa328ea60d3a3333d7c7bb3480969c1873166c7ac8ebb9d0afad7a8099d1a8 2dbbb6200d96f7db7dea4a55bdeab8d67b14d39a43e0bd54ada019f7e466f163 lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll 8e47e91aff3f8c60f1ee8cb3887b8e4936c38e4665d052f2c92a939a969aac29 2c28beb89cabd7c7c91a5bc65c874f414cb96bbefde37b25811b61089a8a0053 @@ -595,7 +597,7 @@ lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll 51d1e9e683fc79dddbff lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll 80826a6a6868a803aa2372e31c52a03e1811a3f1f2abdb469f91ca0bfdd9ecb6 34ee1e208c1690cba505dff2c588837c0cd91e185e2a87d1fe673191962276a9 -lib/codeql/rust/elements/internal/generated/Raw.qll 2e299cb4fc9e506d910827e3a3ab743570a02d963c9001b33c6c06f9aa92200d a19748787c02a18abffaaa4c7b9c23a9bbc56020fb36698bf82da72c09fa57db +lib/codeql/rust/elements/internal/generated/Raw.qll 8b48d680c3258f72c0a851241aba6516a72c0abfdd3821c32bac616adb41a343 570b1af27eae2e01fe91aa9da74a8ad56c37bf5d80df14cd3bef17ab5c4414f8 lib/codeql/rust/elements/internal/generated/RecordFieldList.qll 4a23b0d75a90671197246dbbb4e62706c180074abb8ebe60a96df11c47a917a2 09be127977651a24010b090d9681714d83ebd461098f9cf0e0d1973cafb1c782 lib/codeql/rust/elements/internal/generated/RefExpr.qll 7d995884e3dc1c25fc719f5d7253179344d63650e217e9ff6530285fe7a57f64 f2c3c12551deea4964b66553fb9b6423ee16fec53bd63db4796191aa60dc6c66 lib/codeql/rust/elements/internal/generated/RefPat.qll 456ede39837463ee22a630ec7ab6c8630d3664a8ea206fcc6e4f199e92fa564c 5622062765f32930465ba6b170e986706f159f6070f48adee3c20e24e8df4e05 @@ -613,7 +615,7 @@ lib/codeql/rust/elements/internal/generated/SourceFile.qll 55d44c9f09c5ff28c4f71 lib/codeql/rust/elements/internal/generated/Static.qll 0b336767104d2b852b9acd234a6b15bd1bb21c2c081895127529325164892435 a2c69c8db65e4137b227980ea22a967ada0b32d0cd21f011e8ca8cdf7d3f1459 lib/codeql/rust/elements/internal/generated/Stmt.qll 8473ff532dd5cc9d7decaddcd174b94d610f6ca0aec8e473cc051dad9f3db917 6ef7d2b5237c2dbdcacbf7d8b39109d4dc100229f2b28b5c9e3e4fbf673ba72b lib/codeql/rust/elements/internal/generated/StmtList.qll a667193e32341e17400867c6e359878c4e645ef9f5f4d97676afc0283a33a026 a320ed678ee359302e2fc1b70a9476705cd616fcfa44a499d32f0c7715627f73 -lib/codeql/rust/elements/internal/generated/Struct.qll 4d57f0db12dc7ad3e31e750a24172ef1505406b4dab16386af0674bd18bf8f4b 1a73c83df926b996f629316f74c61ea775be04532ab61b56af904223354f033e +lib/codeql/rust/elements/internal/generated/Struct.qll b54a48c32d99345f22f189da87ff5a27f8b1e8ca78e740ba38d2b4766f280eaa c4bd85920ed3409c48eec9eed6e2e902f9694a3aa6e43222bbe5085f9663c22a lib/codeql/rust/elements/internal/generated/StructExpr.qll c6d861eaa0123b103fd9ffd2485423419ef9b7e0b4af9ed2a2090d8ec534f65d 50da99ee44771e1239ed8919f711991dd3ec98589fbe49b49b68c88074a07d74 lib/codeql/rust/elements/internal/generated/StructExprField.qll a6c1f744dbad034e6a3b173b8ff8037e2bfdea58316dedfe5508299afb770435 f7ed27ce27d14516e735a19a0509aa614d9c7637133efec8e6dc4145b5f3bee7 lib/codeql/rust/elements/internal/generated/StructExprFieldList.qll b19b6869a6828c7a39a7312539eb29fd21734ff47dfd02281de74194fd565d7e 3cadebffaa937e367a5e1da6741e4e9e5c9a9c7f7555e28cfa70639afd19db7c @@ -621,7 +623,7 @@ lib/codeql/rust/elements/internal/generated/StructField.qll d3eca4a20ae50c9396fd lib/codeql/rust/elements/internal/generated/StructPat.qll c76fa005c2fd0448a8803233e1e8818c4123301eb66ac5cf69d0b9eaafc61e98 6e0dffccdce24bca20e87d5ba0f0995c9a1ae8983283e71e7dbfcf6fffc67a58 lib/codeql/rust/elements/internal/generated/StructPatField.qll 285530e9b73d51b3921984e344a9a944afc68c6d83fba7ee1d63345de455208f 17985cea91de1ed21e53e8c0fdb6382768cc57c5b79856dab3bc03cf1c323df9 lib/codeql/rust/elements/internal/generated/StructPatFieldList.qll e34c003e660ba059ba81bb73b3c8d21bd2a47d0251569c46277dc9ccf2947b0a 85113f35ba5f6b9e01ad4072246a4de1ac0e4528348ac564868e96f34a3e09e2 -lib/codeql/rust/elements/internal/generated/Synth.qll 56643530ddd22deea0ee17ad47dc902d0accac41133e8f9263b7225853e0f0e2 b263a7d5f4815af6f7072a0b2d68f8fb358283a10e362d879d37c528379b6046 +lib/codeql/rust/elements/internal/generated/Synth.qll 6922cc1a9941301a57efe30f94fe51aa72de16c7adf3f75a2d49008066fd35f1 fa47d8290645d6b50c468f714c730e789c4b9524835ae24ea6ddf5767e5ca329 lib/codeql/rust/elements/internal/generated/SynthConstructors.qll e4298dc8e52d56672d91df093cc858105b5072be4ae5bed95105e0ffd80e7233 e4298dc8e52d56672d91df093cc858105b5072be4ae5bed95105e0ffd80e7233 lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b lib/codeql/rust/elements/internal/generated/TokenTree.qll 8577c2b097c1be2f0f7daa5acfcf146f78674a424d99563e08a84dd3e6d91b46 d2f30764e84dbfc0a6a5d3d8a5f935cd432413688cb32da9c94e420fbc10665c @@ -643,13 +645,14 @@ lib/codeql/rust/elements/internal/generated/TypeRepr.qll 1e7b9d2ddab86e35dad7c31 lib/codeql/rust/elements/internal/generated/UnderscoreExpr.qll b3780c99c5d57159bef4c6bd2fd8ec44ebd1854c892c1ca776c740f71249e58c 2fd451cbf0a779e8042e439882e7d9cadc19d1e596df3bbb086d16f2596407c7 lib/codeql/rust/elements/internal/generated/Unextracted.qll 01563dfd769d6dc3c6b8a40d9a4dc0d99a3b6a0c6725c180d2bf4d7633929a17 a93ce90f8c03f4305e59de9c63f089fc7935298fc9a73d091d76933cf63e790c lib/codeql/rust/elements/internal/generated/Unimplemented.qll a3eb304781991bff1227de1e4422b68bf91e7b344e4f6c9e874b324e82a35e60 6bc4839fda3850a56dc993b79ef9ba921008395c8432b184e14438fba4566f21 -lib/codeql/rust/elements/internal/generated/Union.qll 7f2a33166761d29299572681f1eb0b7efd647b3bd37b5a00c2d4661b06b1b04e 56da586702152f4507ae874f2e1cec9d963151a97bc279f2eed37fba921780a5 +lib/codeql/rust/elements/internal/generated/Union.qll d91aa6cd02bce27a28d1fba87fe80be3a33d1e560d3dd447c3035ff2738a0821 22343e17c08e53d237e834fb9fb9c97fbdebc95bfda4bab80a0c3274edebf7fd lib/codeql/rust/elements/internal/generated/Use.qll d42ccf3516a9f79ae8766f93ad5f09d3cdcd7b96844d4c9de64189b56018a7b4 70a9553a8f71f6cbfdd0f59a4b42292d13177613ceb0542436436e0ac2e1f8ee lib/codeql/rust/elements/internal/generated/UseBoundGenericArg.qll 69162794e871291545ea04f61259b2d000671a96f7ca129f7dd9ed6e984067c4 31de9ebc0634b38e2347e0608b4ea888892f1f2732a2892464078cd8a07b4ee8 lib/codeql/rust/elements/internal/generated/UseBoundGenericArgs.qll 05dca015d922935887856f3a0d577dbcf5b8f82bc384bdc9c8c2d0106419716d fcee14ed4f7a639b1ba721bd390fc0cdbfdc7c759e3092aa462d466fe390de45 lib/codeql/rust/elements/internal/generated/UseTree.qll 15b84e3a194959aef793cd0c16b3d2d21ee5822e2d26186b5d73f922325c2827 49c409a7b82c1099436fbe3bd041d35dcd23169d58d31fbd718f6deb96fb7318 lib/codeql/rust/elements/internal/generated/UseTreeList.qll 829441cf309f008a6a9d2e784aa414ab4c11880a658f8ee71aa4df385cd2b6a8 ced82df94fea7a191f414f7e6496d13791d2f535046844b6f712a390663ac3d0 -lib/codeql/rust/elements/internal/generated/Variant.qll e40dbb23e07c5b70adc577efdf7a064e773207f216cad8fe8905882b1da9f4a9 13f7be36d043afcfc156d2c01bb828de882df69aa732f284aa76c5f00b063544 +lib/codeql/rust/elements/internal/generated/Variant.qll a1ace4d693555534a04e58beb3cb6b631c04a6104edd1949abe4ab168fa4b521 6088ef8cf813cbf1bf580f7369402956f78a9f1c2bb93384775872207ccb5f09 +lib/codeql/rust/elements/internal/generated/VariantDef.qll 3a579b21a13bdd6be8cddaa43a6aa0028a27c4e513caa003a6304e160fc53846 1ca1c41ed27660b17fbfb44b67aa8db087ea655f01bac29b57bb19fa259d07a2 lib/codeql/rust/elements/internal/generated/VariantList.qll 4eb923ca341033c256ca9b8a8a5b4e14c7eac9d015be187fd97eeb25dfb1e18e e7865e975c35db49cd72cb8f9864797d3cfed16c3a675b5032b867ced2bbb405 lib/codeql/rust/elements/internal/generated/Visibility.qll aba81820f30bed0fd2cd06831f7256af15ae32525b2a437896420b4cc067ea38 d6aed90b27124b812daf2ddd14b4e181277cbe638b4ccaab74e27681ac30e4ab lib/codeql/rust/elements/internal/generated/WhereClause.qll d6c8f72bbec5d71c024f0d365c1c5e474f4d24ded0d34c56c1f66b1e4a384e9d ed14311d140eee00d3b26a4972f53e20d5af1bddf88fb5618e7e2d3ae1d816f3 @@ -658,7 +661,7 @@ lib/codeql/rust/elements/internal/generated/WhileExpr.qll 7edf1f23fbf953a2baabcd lib/codeql/rust/elements/internal/generated/WildcardPat.qll d74b70b57a0a66bfae017a329352a5b27a6b9e73dd5521d627f680e810c6c59e 4b913b548ba27ff3c82fcd32cf996ff329cb57d176d3bebd0fcef394486ea499 lib/codeql/rust/elements/internal/generated/YeetExpr.qll cac328200872a35337b4bcb15c851afb4743f82c080f9738d295571eb01d7392 94af734eea08129b587fed849b643e7572800e8330c0b57d727d41abda47930b lib/codeql/rust/elements/internal/generated/YieldExpr.qll 37e5f0c1e373a22bbc53d8b7f2c0e1f476e5be5080b8437c5e964f4e83fad79a 4a9a68643401637bf48e5c2b2f74a6bf0ddcb4ff76f6bffb61d436b685621e85 -lib/codeql/rust/elements.qll 0f225f1d1f386597d897dc0589e679d49ea8ea05408188d7e1ca5d0b03cb30fb 0f225f1d1f386597d897dc0589e679d49ea8ea05408188d7e1ca5d0b03cb30fb +lib/codeql/rust/elements.qll 5fbfcd83eeb4467d0a721e5b4faf61d0b31316d923e6a6f61d1724023ad91cae 5fbfcd83eeb4467d0a721e5b4faf61d0b31316d923e6a6f61d1724023ad91cae test/extractor-tests/generated/Abi/Abi.ql 7f6e7dc4af86eca3ebdc79b10373988cd0871bd78b51997d3cffd969105e5fdd 2f936b6ca005c6157c755121584410c03e4a3949c23bee302fbe05ee10ce118f test/extractor-tests/generated/Abi/Abi_getAbiString.ql a496762fcec5a0887b87023bbf93e9b650f02e20113e25c44d6e4281ae8f5335 14109c7ce11ba25e3cd6e7f1b3fcb4cb00622f2a4eac91bfe43145c5f366bc52 test/extractor-tests/generated/ArgList/ArgList.ql e412927756e72165d0e7c5c9bd3fca89d08197bbf760db8fb7683c64bb2229bc 043dba8506946fbb87753e22c387987d7eded6ddb963aa067f9e60ef9024d684 @@ -1198,11 +1201,9 @@ test/extractor-tests/generated/UseTree/UseTree_getRename.ql ec3917501f3c89ac4974 test/extractor-tests/generated/UseTree/UseTree_getUseTreeList.ql c265a88347e813840969ae934dfd2904bc06f502de77709bc0b1c7255e46382a 52a239c8ea5fd8fbfbd606559d70ecadc769887437a9bcab6fb3e774208ad868 test/extractor-tests/generated/UseTreeList/UseTreeList.ql cd943c15c86e66244caafeb95b960a5c3d351d5edbd506258744fb60a61af3b2 cfa584cd9d8aa08267fd1106745a66226b2c99fadd1da65059cc7ecf2f2e68cf test/extractor-tests/generated/UseTreeList/UseTreeList_getUseTree.ql dd72966b1cb7b04f0267503013809063fcfb145e2b2d7d5250d9f24d2e405f9a 75b953aa11c51ca0fe95e67d50d6238962d8df4a4b9054999a2c6338e5a5613d -test/extractor-tests/generated/Variant/Variant.ql c60dd31adac91e09f8b1e5523d6b859747e64ef072c077b5a3326763f9f461f7 55d6446a3a831ed1137264678c5df027eb94cb3570a88d364994851fe6236999 +test/extractor-tests/generated/Variant/Variant.ql bf9b928ab3b1911e6c81fdc3fb9811e754ea28bfd0e4a21dca08b844aa42c3f1 bffd4bcc5019f721010722453985b39a4285240774e474e233ebe46f1cd5beb1 test/extractor-tests/generated/Variant/Variant_getAttr.ql dd38e48e1eb05ce280b880652a90010eb63f7de3be7232411ba6265691249420 f8980680104de1e5fd40f264d8d62346aacaf6403a5e051f6fd680e234c82c1f -test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql 99e79930f8ff87a25f256926e5c3ce1ee0847daf6fadc5445fb33c85328b4c61 2dd64a53813790654c83be25b5e175c9c5b388e758723c2138fff095353fdd7b test/extractor-tests/generated/Variant/Variant_getExpr.ql ce00af303d28f60c5fd1dc7df628c7974aced21884e223a2f656cb4f0d1a74d5 9de51a65510cf9a15801d4207b616915bd959c95ec7330fdb502c5dff5b650cc -test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql fe6a4bfd1440e7629d47283910de84c5e8c2f5645512780e710f53540b5bc886 b1e31b765cb1a5fe063abb8c1b2115e881ae28aa3ccd39e088ff8f2af20d6cf4 test/extractor-tests/generated/Variant/Variant_getFieldList.ql 083c8cf61989663de33d99b72dec231c308ccc8bb6739921465c473a07e8ea03 d03bff6945853c940acdc053b813d53b008ddab9a8bd4307826433828d4763ce test/extractor-tests/generated/Variant/Variant_getName.ql 0d7b47bec9f9031c67f7b684112a84a311ef9b2efeb260bd7cd6f424011ca0d8 73565e6f965dd7fd7bb9b3408c7d7b69120e1971b67ab307fed293eb663a59ae test/extractor-tests/generated/Variant/Variant_getVisibility.ql 2c8f365d28d96af55589f4d71ac3fee718b319b4cbc784560c0591d1f605a119 13160d9cf39fe169410eff6c338f5d063e1948109e8f18dd33ea0064f1dd9283 diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index 42e4c13f2f4..2972ba9ed0c 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -183,6 +183,7 @@ /lib/codeql/rust/elements/UseTree.qll linguist-generated /lib/codeql/rust/elements/UseTreeList.qll linguist-generated /lib/codeql/rust/elements/Variant.qll linguist-generated +/lib/codeql/rust/elements/VariantDef.qll linguist-generated /lib/codeql/rust/elements/VariantList.qll linguist-generated /lib/codeql/rust/elements/Visibility.qll linguist-generated /lib/codeql/rust/elements/WhereClause.qll linguist-generated @@ -448,6 +449,7 @@ /lib/codeql/rust/elements/internal/UseTreeListConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/UseTreeListImpl.qll linguist-generated /lib/codeql/rust/elements/internal/VariantConstructor.qll linguist-generated +/lib/codeql/rust/elements/internal/VariantDefImpl.qll linguist-generated /lib/codeql/rust/elements/internal/VariantListConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/VariantListImpl.qll linguist-generated /lib/codeql/rust/elements/internal/VisibilityConstructor.qll linguist-generated @@ -652,6 +654,7 @@ /lib/codeql/rust/elements/internal/generated/UseTree.qll linguist-generated /lib/codeql/rust/elements/internal/generated/UseTreeList.qll linguist-generated /lib/codeql/rust/elements/internal/generated/Variant.qll linguist-generated +/lib/codeql/rust/elements/internal/generated/VariantDef.qll linguist-generated /lib/codeql/rust/elements/internal/generated/VariantList.qll linguist-generated /lib/codeql/rust/elements/internal/generated/Visibility.qll linguist-generated /lib/codeql/rust/elements/internal/generated/WhereClause.qll linguist-generated @@ -1202,9 +1205,7 @@ /test/extractor-tests/generated/UseTreeList/UseTreeList_getUseTree.ql linguist-generated /test/extractor-tests/generated/Variant/Variant.ql linguist-generated /test/extractor-tests/generated/Variant/Variant_getAttr.ql linguist-generated -/test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql linguist-generated /test/extractor-tests/generated/Variant/Variant_getExpr.ql linguist-generated -/test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Variant/Variant_getFieldList.ql linguist-generated /test/extractor-tests/generated/Variant/Variant_getName.ql linguist-generated /test/extractor-tests/generated/Variant/Variant_getVisibility.ql linguist-generated diff --git a/rust/ql/lib/codeql/rust/elements.qll b/rust/ql/lib/codeql/rust/elements.qll index 968c271b095..62705408baf 100644 --- a/rust/ql/lib/codeql/rust/elements.qll +++ b/rust/ql/lib/codeql/rust/elements.qll @@ -186,6 +186,7 @@ import codeql.rust.elements.UseBoundGenericArgs import codeql.rust.elements.UseTree import codeql.rust.elements.UseTreeList import codeql.rust.elements.Variant +import codeql.rust.elements.VariantDef import codeql.rust.elements.VariantList import codeql.rust.elements.Visibility import codeql.rust.elements.WhereClause diff --git a/rust/ql/lib/codeql/rust/elements/Struct.qll b/rust/ql/lib/codeql/rust/elements/Struct.qll index b01abf3e9a4..b78254d87dc 100644 --- a/rust/ql/lib/codeql/rust/elements/Struct.qll +++ b/rust/ql/lib/codeql/rust/elements/Struct.qll @@ -9,6 +9,7 @@ import codeql.rust.elements.FieldList import codeql.rust.elements.GenericParamList import codeql.rust.elements.Item import codeql.rust.elements.Name +import codeql.rust.elements.VariantDef import codeql.rust.elements.Visibility import codeql.rust.elements.WhereClause diff --git a/rust/ql/lib/codeql/rust/elements/Union.qll b/rust/ql/lib/codeql/rust/elements/Union.qll index 38a96aed38e..c5fd86be7e9 100644 --- a/rust/ql/lib/codeql/rust/elements/Union.qll +++ b/rust/ql/lib/codeql/rust/elements/Union.qll @@ -9,6 +9,7 @@ import codeql.rust.elements.GenericParamList import codeql.rust.elements.Item import codeql.rust.elements.Name import codeql.rust.elements.RecordFieldList +import codeql.rust.elements.VariantDef import codeql.rust.elements.Visibility import codeql.rust.elements.WhereClause diff --git a/rust/ql/lib/codeql/rust/elements/Variant.qll b/rust/ql/lib/codeql/rust/elements/Variant.qll index 658143dbfa2..3e8eaa632f8 100644 --- a/rust/ql/lib/codeql/rust/elements/Variant.qll +++ b/rust/ql/lib/codeql/rust/elements/Variant.qll @@ -4,11 +4,11 @@ */ private import internal.VariantImpl -import codeql.rust.elements.Addressable import codeql.rust.elements.Attr import codeql.rust.elements.Expr import codeql.rust.elements.FieldList import codeql.rust.elements.Name +import codeql.rust.elements.VariantDef import codeql.rust.elements.Visibility /** diff --git a/rust/ql/lib/codeql/rust/elements/VariantDef.qll b/rust/ql/lib/codeql/rust/elements/VariantDef.qll new file mode 100644 index 00000000000..bafb396c29d --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/VariantDef.qll @@ -0,0 +1,9 @@ +// generated by codegen, do not edit +/** + * This module provides the public class `VariantDef`. + */ + +private import internal.VariantDefImpl +import codeql.rust.elements.AstNode + +final class VariantDef = Impl::VariantDef; diff --git a/rust/ql/lib/codeql/rust/elements/internal/VariantDefImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/VariantDefImpl.qll new file mode 100644 index 00000000000..21ab1f20d4e --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/VariantDefImpl.qll @@ -0,0 +1,16 @@ +// generated by codegen, remove this comment if you wish to edit this file +/** + * This module provides a hand-modifiable wrapper around the generated class `VariantDef`. + * + * INTERNAL: Do not use. + */ + +private import codeql.rust.elements.internal.generated.VariantDef + +/** + * INTERNAL: This module contains the customizable definition of `VariantDef` and should not + * be referenced directly. + */ +module Impl { + class VariantDef extends Generated::VariantDef { } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll index b8ae3bb3b87..41213922722 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -1307,6 +1307,19 @@ private module Impl { ) } + private Element getImmediateChildOfVariantDef(VariantDef e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) + } + private Element getImmediateChildOfVariantList( VariantList e, int index, string partialPredicateCall ) { @@ -3050,13 +3063,13 @@ private module Impl { private Element getImmediateChildOfVariant(Variant e, int index, string partialPredicateCall) { exists( - int b, int bAddressable, int n, int nAttr, int nExpr, int nFieldList, int nName, + int b, int bVariantDef, int n, int nAttr, int nExpr, int nFieldList, int nName, int nVisibility | b = 0 and - bAddressable = - b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAddressable(e, i, _)) | i) and - n = bAddressable and + bVariantDef = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfVariantDef(e, i, _)) | i) and + n = bVariantDef and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nExpr = nAttr + 1 and nFieldList = nExpr + 1 and @@ -3065,7 +3078,7 @@ private module Impl { ( none() or - result = getImmediateChildOfAddressable(e, index - b, partialPredicateCall) + result = getImmediateChildOfVariantDef(e, index - b, partialPredicateCall) or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" @@ -3700,12 +3713,14 @@ private module Impl { private Element getImmediateChildOfStruct(Struct e, int index, string partialPredicateCall) { exists( - int b, int bItem, int n, int nAttr, int nFieldList, int nGenericParamList, int nName, - int nVisibility, int nWhereClause + int b, int bItem, int bVariantDef, int n, int nAttr, int nFieldList, int nGenericParamList, + int nName, int nVisibility, int nWhereClause | b = 0 and bItem = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfItem(e, i, _)) | i) and - n = bItem and + bVariantDef = + bItem + 1 + max(int i | i = -1 or exists(getImmediateChildOfVariantDef(e, i, _)) | i) and + n = bVariantDef and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nFieldList = nAttr + 1 and nGenericParamList = nFieldList + 1 and @@ -3717,6 +3732,8 @@ private module Impl { or result = getImmediateChildOfItem(e, index - b, partialPredicateCall) or + result = getImmediateChildOfVariantDef(e, index - bItem, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -3944,12 +3961,14 @@ private module Impl { private Element getImmediateChildOfUnion(Union e, int index, string partialPredicateCall) { exists( - int b, int bItem, int n, int nAttr, int nGenericParamList, int nName, int nStructFieldList, - int nVisibility, int nWhereClause + int b, int bItem, int bVariantDef, int n, int nAttr, int nGenericParamList, int nName, + int nStructFieldList, int nVisibility, int nWhereClause | b = 0 and bItem = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfItem(e, i, _)) | i) and - n = bItem and + bVariantDef = + bItem + 1 + max(int i | i = -1 or exists(getImmediateChildOfVariantDef(e, i, _)) | i) and + n = bVariantDef and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nGenericParamList = nAttr + 1 and nName = nGenericParamList + 1 and @@ -3961,6 +3980,8 @@ private module Impl { or result = getImmediateChildOfItem(e, index - b, partialPredicateCall) or + result = getImmediateChildOfVariantDef(e, index - bItem, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index c7a1472362e..937529405f9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -1190,6 +1190,11 @@ module Raw { UseTree getUseTree(int index) { use_tree_list_use_trees(this, index, result) } } + /** + * INTERNAL: Do not use. + */ + class VariantDef extends @variant_def, AstNode { } + /** * INTERNAL: Do not use. * A VariantList. For example: @@ -3120,7 +3125,7 @@ module Raw { * todo!() * ``` */ - class Variant extends @variant, Addressable { + class Variant extends @variant, VariantDef { override string toString() { result = "Variant" } /** @@ -3835,7 +3840,7 @@ module Raw { * todo!() * ``` */ - class Struct extends @struct, Item { + class Struct extends @struct, Item, VariantDef { override string toString() { result = "Struct" } /** @@ -4090,7 +4095,7 @@ module Raw { * todo!() * ``` */ - class Union extends @union, Item { + class Union extends @union, Item, VariantDef { override string toString() { result = "Union" } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Struct.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Struct.qll index a596843e100..07521be8d69 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Struct.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Struct.qll @@ -11,6 +11,7 @@ import codeql.rust.elements.FieldList import codeql.rust.elements.GenericParamList import codeql.rust.elements.internal.ItemImpl::Impl as ItemImpl import codeql.rust.elements.Name +import codeql.rust.elements.internal.VariantDefImpl::Impl as VariantDefImpl import codeql.rust.elements.Visibility import codeql.rust.elements.WhereClause @@ -27,7 +28,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::Struct` class directly. * Use the subclass `Struct`, where the following predicates are available. */ - class Struct extends Synth::TStruct, ItemImpl::Item { + class Struct extends Synth::TStruct, ItemImpl::Item, VariantDefImpl::VariantDef { override string getAPrimaryQlClass() { result = "Struct" } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll index d42033d6df1..6dbd5049b80 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll @@ -686,7 +686,7 @@ module Synth { /** * INTERNAL: Do not use. */ - class TAddressable = TItem or TVariant; + class TAddressable = TItem; /** * INTERNAL: Do not use. @@ -723,7 +723,7 @@ module Synth { TStructExprField or TStructExprFieldList or TStructField or TStructPatField or TStructPatFieldList or TToken or TTokenTree or TTupleField or TTypeBound or TTypeBoundList or TTypeRepr or TUseBoundGenericArg or TUseBoundGenericArgs or TUseTree or - TUseTreeList or TVariantList or TVisibility or TWhereClause or TWherePred; + TUseTreeList or TVariantDef or TVariantList or TVisibility or TWhereClause or TWherePred; /** * INTERNAL: Do not use. @@ -845,6 +845,11 @@ module Synth { */ class TUseBoundGenericArg = TLifetime or TNameRef; + /** + * INTERNAL: Do not use. + */ + class TVariantDef = TStruct or TUnion or TVariant; + /** * INTERNAL: Do not use. * Converts a raw element to a synthesized `TAbi`, if possible. @@ -1853,11 +1858,7 @@ module Synth { * INTERNAL: Do not use. * Converts a raw DB element to a synthesized `TAddressable`, if possible. */ - TAddressable convertAddressableFromRaw(Raw::Element e) { - result = convertItemFromRaw(e) - or - result = convertVariantFromRaw(e) - } + TAddressable convertAddressableFromRaw(Raw::Element e) { result = convertItemFromRaw(e) } /** * INTERNAL: Do not use. @@ -2036,6 +2037,8 @@ module Synth { or result = convertUseTreeListFromRaw(e) or + result = convertVariantDefFromRaw(e) + or result = convertVariantListFromRaw(e) or result = convertVisibilityFromRaw(e) @@ -2433,6 +2436,18 @@ module Synth { result = convertNameRefFromRaw(e) } + /** + * INTERNAL: Do not use. + * Converts a raw DB element to a synthesized `TVariantDef`, if possible. + */ + TVariantDef convertVariantDefFromRaw(Raw::Element e) { + result = convertStructFromRaw(e) + or + result = convertUnionFromRaw(e) + or + result = convertVariantFromRaw(e) + } + /** * INTERNAL: Do not use. * Converts a synthesized `TAbi` to a raw DB element, if possible. @@ -3439,11 +3454,7 @@ module Synth { * INTERNAL: Do not use. * Converts a synthesized `TAddressable` to a raw DB element, if possible. */ - Raw::Element convertAddressableToRaw(TAddressable e) { - result = convertItemToRaw(e) - or - result = convertVariantToRaw(e) - } + Raw::Element convertAddressableToRaw(TAddressable e) { result = convertItemToRaw(e) } /** * INTERNAL: Do not use. @@ -3622,6 +3633,8 @@ module Synth { or result = convertUseTreeListToRaw(e) or + result = convertVariantDefToRaw(e) + or result = convertVariantListToRaw(e) or result = convertVisibilityToRaw(e) @@ -4018,4 +4031,16 @@ module Synth { or result = convertNameRefToRaw(e) } + + /** + * INTERNAL: Do not use. + * Converts a synthesized `TVariantDef` to a raw DB element, if possible. + */ + Raw::Element convertVariantDefToRaw(TVariantDef e) { + result = convertStructToRaw(e) + or + result = convertUnionToRaw(e) + or + result = convertVariantToRaw(e) + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Union.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Union.qll index 89986895761..a6d2fcc92f9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Union.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Union.qll @@ -11,6 +11,7 @@ import codeql.rust.elements.GenericParamList import codeql.rust.elements.internal.ItemImpl::Impl as ItemImpl import codeql.rust.elements.Name import codeql.rust.elements.RecordFieldList +import codeql.rust.elements.internal.VariantDefImpl::Impl as VariantDefImpl import codeql.rust.elements.Visibility import codeql.rust.elements.WhereClause @@ -27,7 +28,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::Union` class directly. * Use the subclass `Union`, where the following predicates are available. */ - class Union extends Synth::TUnion, ItemImpl::Item { + class Union extends Synth::TUnion, ItemImpl::Item, VariantDefImpl::VariantDef { override string getAPrimaryQlClass() { result = "Union" } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Variant.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Variant.qll index b78043e0922..d09506da85c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Variant.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Variant.qll @@ -6,11 +6,11 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw -import codeql.rust.elements.internal.AddressableImpl::Impl as AddressableImpl import codeql.rust.elements.Attr import codeql.rust.elements.Expr import codeql.rust.elements.FieldList import codeql.rust.elements.Name +import codeql.rust.elements.internal.VariantDefImpl::Impl as VariantDefImpl import codeql.rust.elements.Visibility /** @@ -26,7 +26,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::Variant` class directly. * Use the subclass `Variant`, where the following predicates are available. */ - class Variant extends Synth::TVariant, AddressableImpl::Addressable { + class Variant extends Synth::TVariant, VariantDefImpl::VariantDef { override string getAPrimaryQlClass() { result = "Variant" } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/VariantDef.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/VariantDef.qll new file mode 100644 index 00000000000..3114f03cade --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/VariantDef.qll @@ -0,0 +1,21 @@ +// generated by codegen, do not edit +/** + * This module provides the generated definition of `VariantDef`. + * INTERNAL: Do not import directly. + */ + +private import codeql.rust.elements.internal.generated.Synth +private import codeql.rust.elements.internal.generated.Raw +import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl + +/** + * INTERNAL: This module contains the fully generated definition of `VariantDef` and should not + * be referenced directly. + */ +module Generated { + /** + * INTERNAL: Do not reference the `Generated::VariantDef` class directly. + * Use the subclass `VariantDef`, where the following predicates are available. + */ + class VariantDef extends Synth::TVariantDef, AstNodeImpl::AstNode { } +} diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index eccb4fa8b63..a565ea26d2d 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -216,6 +216,7 @@ named_crates( | @use_bound_generic_args | @use_tree | @use_tree_list +| @variant_def | @variant_list | @visibility | @where_clause @@ -278,7 +279,6 @@ abi_abi_strings( @addressable = @item -| @variant ; #keyset[id] @@ -1178,6 +1178,12 @@ use_tree_list_use_trees( int use_tree: @use_tree ref ); +@variant_def = + @struct +| @union +| @variant +; + variant_lists( unique int id: @variant_list ); diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant.ql b/rust/ql/test/extractor-tests/generated/Variant/Variant.ql index 92ebcbe55ee..2cbcd20cbf0 100644 --- a/rust/ql/test/extractor-tests/generated/Variant/Variant.ql +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant.ql @@ -3,22 +3,15 @@ import codeql.rust.elements import TestUtils from - Variant x, string hasExtendedCanonicalPath, string hasCrateOrigin, int getNumberOfAttrs, - string hasExpr, string hasFieldList, string hasName, string hasVisibility + Variant x, int getNumberOfAttrs, string hasExpr, string hasFieldList, string hasName, + string hasVisibility where toBeTested(x) and not x.isUnknown() and - ( - if x.hasExtendedCanonicalPath() - then hasExtendedCanonicalPath = "yes" - else hasExtendedCanonicalPath = "no" - ) and - (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasExpr() then hasExpr = "yes" else hasExpr = "no") and (if x.hasFieldList() then hasFieldList = "yes" else hasFieldList = "no") and (if x.hasName() then hasName = "yes" else hasName = "no") and if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" -select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "getNumberOfAttrs:", getNumberOfAttrs, "hasExpr:", hasExpr, "hasFieldList:", hasFieldList, +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasExpr:", hasExpr, "hasFieldList:", hasFieldList, "hasName:", hasName, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql deleted file mode 100644 index 0acfd9827fe..00000000000 --- a/rust/ql/test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql +++ /dev/null @@ -1,7 +0,0 @@ -// generated by codegen, do not edit -import codeql.rust.elements -import TestUtils - -from Variant x -where toBeTested(x) and not x.isUnknown() -select x, x.getCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql b/rust/ql/test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql deleted file mode 100644 index ad8aaf86a5c..00000000000 --- a/rust/ql/test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql +++ /dev/null @@ -1,7 +0,0 @@ -// generated by codegen, do not edit -import codeql.rust.elements -import TestUtils - -from Variant x -where toBeTested(x) and not x.isUnknown() -select x, x.getExtendedCanonicalPath() diff --git a/rust/schema/ast.py b/rust/schema/ast.py index 84e30ac407a..e014105c5a9 100644 --- a/rust/schema/ast.py +++ b/rust/schema/ast.py @@ -38,6 +38,9 @@ class TypeRepr(AstNode, ): class UseBoundGenericArg(AstNode, ): pass +class VariantDef(AstNode, ): + pass + class Item(Stmt, ): pass @@ -621,7 +624,7 @@ class StmtList(AstNode, ): statements: list["Stmt"] | child tail_expr: optional["Expr"] | child -class Struct(Item, ): +class Struct(Item, VariantDef, ): attrs: list["Attr"] | child field_list: optional["FieldList"] | child generic_param_list: optional["GenericParamList"] | child @@ -709,7 +712,7 @@ class TypeParam(GenericParam, ): class UnderscoreExpr(Expr, ): attrs: list["Attr"] | child -class Union(Item, ): +class Union(Item, VariantDef, ): attrs: list["Attr"] | child generic_param_list: optional["GenericParamList"] | child name: optional["Name"] | child @@ -734,7 +737,7 @@ class UseTree(AstNode, ): class UseTreeList(AstNode, ): use_trees: list["UseTree"] | child -class Variant(AstNode, ): +class Variant(VariantDef, ): attrs: list["Attr"] | child expr: optional["Expr"] | child field_list: optional["FieldList"] | child