From 52c0028f850484530c483461efadb497ff48d8e4 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Fri, 20 Jun 2025 14:35:08 +0200 Subject: [PATCH] Rust: make `Adt` be generated --- rust/ast-generator/src/main.rs | 6 ++-- rust/ql/.generated.list | 18 +++++------ rust/ql/lib/codeql/rust/elements/Enum.qll | 1 + rust/ql/lib/codeql/rust/elements/Struct.qll | 1 + rust/ql/lib/codeql/rust/elements/Union.qll | 1 + .../rust/elements/internal/generated/Enum.qll | 3 +- .../internal/generated/ParentChild.qll | 31 ++++++++++++------- .../rust/elements/internal/generated/Raw.qll | 6 ++-- .../elements/internal/generated/Struct.qll | 3 +- .../elements/internal/generated/Synth.qll | 18 +++++++++-- .../elements/internal/generated/Union.qll | 3 +- rust/ql/lib/rust.dbscheme | 3 ++ rust/schema/annotations.py | 9 +++--- rust/schema/ast.py | 9 ++++-- 14 files changed, 72 insertions(+), 40 deletions(-) diff --git a/rust/ast-generator/src/main.rs b/rust/ast-generator/src/main.rs index 70741c83382..35437777c21 100644 --- a/rust/ast-generator/src/main.rs +++ b/rust/ast-generator/src/main.rs @@ -385,8 +385,8 @@ struct ExtractorInfo { } fn enum_to_extractor_info(node: &AstEnumSrc) -> Option { - if node.name == "VariantDef" { - // currently defined but unused + if matches!(node.name.as_str(), "VariantDef" | "Adt") { + // these are not used as types of fields, so we don't need to generate extractors for them return None; } Some(ExtractorEnumInfo { @@ -485,8 +485,6 @@ fn main() -> anyhow::Result<()> { .expect("Failed to parse grammar"); let mut grammar = codegen::grammar::lower(&grammar); - grammar.enums.retain(|x| x.name != "Adt"); - let mut super_types: BTreeMap> = BTreeMap::new(); for node in &grammar.enums { for variant in &node.variants { diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 4aa4e6d7da0..a08afe1fdad 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -47,7 +47,7 @@ lib/codeql/rust/elements/ContinueExpr.qll 9f27c5d5c819ad0ebc5bd10967ba8d33a9dc95 lib/codeql/rust/elements/Crate.qll 1426960e6f36195e42ea5ea321405c1a72fccd40cd6c0a33673c321c20302d8d 1571a89f89dab43c5291b71386de7aadf52730755ba10f9d696db9ad2f760aff lib/codeql/rust/elements/DynTraitTypeRepr.qll e4d27112d27ae93c621defd2c976fd4e90663ab7f6115e83ae4fe8106cb5e015 eb9fde89698588f3b7116f62388c54e937f99559b22c93d11a5596e754560072 lib/codeql/rust/elements/Element.qll 0b62d139fef54ed2cf2e2334806aa9bfbc036c9c2085d558f15a42cc3fa84c48 24b999b93df79383ef27ede46e38da752868c88a07fe35fcff5d526684ba7294 -lib/codeql/rust/elements/Enum.qll 55d5a4a775f07d9c1d5183af76f9d8de1d700bfe1dea427cc7ff3083f39e13de f00a585596f1d0ab34e6f2b7cdaba6d4a89005820478f810e8685478cf88100e +lib/codeql/rust/elements/Enum.qll 3630f73c1ea158c6977a9d2b2543eb8ebeeb9fef1a7575fdd4b05c98e5938d69 f5f4c93af0741685aa422498fb547e0ee647b632ad5821fb7278d9f2f70e4342 lib/codeql/rust/elements/Expr.qll e5d65e805ccf440d64d331e55df4c4144ab8c8f63f367382494714087659ffe8 2bbc1e5d3a65f413ec33d9822fa451fbdbe32349158db58cc0bfcfafb0e21bda lib/codeql/rust/elements/ExprStmt.qll 00ac4c7d0192b9e8b0f28d5ae59c27729ff5a831ca11938ea3e677a262337a64 7cc02aa5346cd7c50d75ca63cd6501097b0a3979eb2ed838adff114fe17d35a3 lib/codeql/rust/elements/ExternBlock.qll 96c70d0761ec385fe17aa7228e15fd1711949d5abba5877a1c2f4c180d202125 38ad458868a368d437b2dda44307d788a85c887f45ea76c99adbfc9a53f14d81 @@ -146,7 +146,7 @@ lib/codeql/rust/elements/SourceFile.qll 0b6a3e58767c07602b19975009a2ad53ecf1fd72 lib/codeql/rust/elements/Static.qll a6d73152ddecb53a127aa3a4139f97007cd77b46203691c287600aa7200b8beb 547197e794803b3ea0c0e220f050980adec815a16fdef600f98ff795aa77f677 lib/codeql/rust/elements/Stmt.qll 532b12973037301246daf7d8c0177f734202f43d9261c7a4ca6f5080eea8ca64 b838643c4f2b4623d2c816cddad0e68ca3e11f2879ab7beaece46f489ec4b1f3 lib/codeql/rust/elements/StmtList.qll e874859ce03672d0085e47e0ca5e571b92b539b31bf0d5a8802f9727bef0c6b0 e5fe83237f713cdb57c446a6e1c20f645c2f49d9f5ef2c984032df83acb3c0de -lib/codeql/rust/elements/Struct.qll 6ae1ce11044a1f6bf3150ddce947c1be17e462613edf7ea4fe7d861aa3dbe0d1 043ef682d71f31e8808962032c05ab3045e7cbc8663ec7e06dc9255e12e53c12 +lib/codeql/rust/elements/Struct.qll 6ed5475dc66c192290bd11ec4c80ec3093b837456146329b447422c7789574e7 b471e12936bc8095eab45c5473d279b6681fce4cb80afa01d73293061e39b66e lib/codeql/rust/elements/StructExpr.qll af9059c01a97755e94f1a8b60c66d9c7663ed0705b2845b086b8953f16019fab 2d33d86b035a15c1b31c3e07e0e74c4bbe57a71c5a55d60e720827814e73b7ba lib/codeql/rust/elements/StructExprField.qll 3eb9f17ecd1ad38679689eb4ecc169d3a0b5b7a3fc597ae5a957a7aea2f74e4f 8fcd26f266f203004899a60447ba16e7eae4e3a654fbec7f54e26857730ede93 lib/codeql/rust/elements/StructExprFieldList.qll 6efb2ec4889b38556dc679bb89bbd4bd76ed6a60014c41f8e232288fc23b2d52 dc867a0a4710621e04b36bbec7d317d6f360e0d6ac68b79168c8b714babde31d @@ -175,7 +175,7 @@ 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 3e277155fc7ea77f645cb5c5b227efd1474aa745b12a8be228eab694536c49dc a4bf9b54b8262517371000a842e5fdcdaabd324e52afd7919bbf76bc887b18b6 +lib/codeql/rust/elements/Union.qll da30dcfc2bb60a2d2b63dbcb71aca50a380196a79633b85a06fb45d0cbd65c68 27fa235c5a4f7d17e0737addcc436853f1b9c7e96f283c37985c17929fac6788 lib/codeql/rust/elements/Use.qll fdcf70574403c2f219353211b6930f2f9bc79f41c2594e07548de5a8c6cbb24d e41f2b689fcbeb7b84c7ba8d09592f7561626559318642b73574bbac83f74546 lib/codeql/rust/elements/UseBoundGenericArg.qll f16903f8fff676d3700eaad5490804624391141472ecc3166ccb1f70c794c120 5efda98088d096b42f53ceccae78c05f15c6953525b514d849681cb2cf65b147 lib/codeql/rust/elements/UseBoundGenericArgs.qll d9821a82a1d57e609fdc5e79d65e9a88b0088f51d03927e09f41b6931d3484ab 181483a95e22622c7cee07cce87e9476053f824a82e67e2bdecabf5a39f672ad @@ -508,7 +508,7 @@ lib/codeql/rust/elements/internal/generated/ContinueExpr.qll e2010feb14fb6edeb83 lib/codeql/rust/elements/internal/generated/Crate.qll 37f3760d7c0c1c3ca809d07daf7215a8eae6053eda05e88ed7db6e07f4db0781 649a3d7cd7ee99f95f8a4d3d3c41ea2fa848ce7d8415ccbac62977dfc9a49d35 lib/codeql/rust/elements/internal/generated/DynTraitTypeRepr.qll b2e0e728b6708923b862d9d8d6104d13f572da17e393ec1485b8465e4bfdc206 4a87ea9669c55c4905ce4e781b680f674989591b0cb56af1e9fa1058c13300b3 lib/codeql/rust/elements/internal/generated/Element.qll d56d22c060fa929464f837b1e16475a4a2a2e42d68235a014f7369bcb48431db 0e48426ca72179f675ac29aa49bbaadb8b1d27b08ad5cbc72ec5a005c291848e -lib/codeql/rust/elements/internal/generated/Enum.qll 477eaa102c1268f0fa7603ecd88f1b83db1388c17c25e3719d4113ea980256f7 2d60db61ba4a385218f0a01e366e04ba1e7dad386b7e6a027c31f32fb730cca2 +lib/codeql/rust/elements/internal/generated/Enum.qll a9d8a52ba8368889c29855d0c966ed74460c83d34e3410fffe08091a3c76b642 0c7a9a675ed3b5ec22074f47745816c7c009676871279906f39ad9669450c35c lib/codeql/rust/elements/internal/generated/Expr.qll 5fa34f2ed21829a1509417440dae42d416234ff43433002974328e7aabb8f30f 46f3972c7413b7db28a3ea8acb5a50a74b6dd9b658e8725f6953a8829ac912f8 lib/codeql/rust/elements/internal/generated/ExprStmt.qll d1112230015fbeb216b43407a268dc2ccd0f9e0836ab2dca4800c51b38fa1d7d 4a80562dcc55efa5e72c6c3b1d6747ab44fe494e76faff2b8f6e9f10a4b08b5b lib/codeql/rust/elements/internal/generated/ExternBlock.qll e7faac92297a53ac6e0420eec36255a54f360eeb962bf663a00da709407832dd 5ff32c54ec7097d43cc3311492090b9b90f411eead3bc849f258858f29405e81 @@ -580,7 +580,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll eaa0cd4402d3665013d47e lib/codeql/rust/elements/internal/generated/ParenExpr.qll 812d2ff65079277f39f15c084657a955a960a7c1c0e96dd60472a58d56b945eb eb8c607f43e1fcbb41f37a10de203a1db806690e10ff4f04d48ed874189cb0eb lib/codeql/rust/elements/internal/generated/ParenPat.qll 24f9dc7fce75827d6fddb856cd48f80168143151b27295c0bab6db5a06567a09 ebadbc6f5498e9ed754b39893ce0763840409a0721036a25b56e1ead7dcc09aa lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll 03f5c5b96a37adeb845352d7fcea3e098da9050e534972d14ac0f70d60a2d776 ed3d6e5d02086523087adebce4e89e35461eb95f2a66d1d4100fe23fc691b126 -lib/codeql/rust/elements/internal/generated/ParentChild.qll b58a01c0d2cca085a77ed7a98a0318cfc20450e48c64124f8a875ae45416ac25 92e9b6434629508868a5cf69c1236729409dcab4c4cda63af537d591a840127a +lib/codeql/rust/elements/internal/generated/ParentChild.qll 2bcec7e700042db6e58b85bb1346a03f0fa41252af7aa0c835be38217e9c6fda 348c4408b2ab91b6b498242b9e4675dd5015aeac9f5b2d52760f1c071c1d1924 lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll d901fdc8142a5b8847cc98fc2afcfd16428b8ace4fbffb457e761b5fd3901a77 5dbb0aea5a13f937da666ccb042494af8f11e776ade1459d16b70a4dd193f9fb lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll 9b12afb46fc5a9ad3a811b05472621bbecccb900c47504feb7f29d96b28421ca bcacbffc36fb3e0c9b26523b5963af0ffa9fd6b19f00a2a31bdb2316071546bd @@ -595,7 +595,7 @@ lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll 8d0ea4f6c7f8203340bf lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll 80826a6a6868a803aa2372e31c52a03e1811a3f1f2abdb469f91ca0bfdd9ecb6 34ee1e208c1690cba505dff2c588837c0cd91e185e2a87d1fe673191962276a9 -lib/codeql/rust/elements/internal/generated/Raw.qll f9370ca510d47144f7a22255341dc0f45407fcc8c22d42a74dbc423a68a36635 2301eb8a7b4d59c05413e07f95fe9ac2d0f42d3673d9b7e809bd49a6c1bee506 +lib/codeql/rust/elements/internal/generated/Raw.qll bc03ef3af94aa43287e054f731c283eec1610e319201ab2a78249c2a7ee22413 30278f463569b5f7b5011f61b9cfe111449829cbb32b251e5c5e58cd438b5978 lib/codeql/rust/elements/internal/generated/RefExpr.qll 7d995884e3dc1c25fc719f5d7253179344d63650e217e9ff6530285fe7a57f64 f2c3c12551deea4964b66553fb9b6423ee16fec53bd63db4796191aa60dc6c66 lib/codeql/rust/elements/internal/generated/RefPat.qll 456ede39837463ee22a630ec7ab6c8630d3664a8ea206fcc6e4f199e92fa564c 5622062765f32930465ba6b170e986706f159f6070f48adee3c20e24e8df4e05 lib/codeql/rust/elements/internal/generated/RefTypeRepr.qll 5b0663a6d234572fb3e467e276d019415caa95ef006438cc59b7af4e1783161e 0e27c8a8f0e323c0e4d6db01fca821bf07c0864d293cdf96fa891b10820c1e4b @@ -612,7 +612,7 @@ lib/codeql/rust/elements/internal/generated/SourceFile.qll 4bc95c88b49868d1da1a8 lib/codeql/rust/elements/internal/generated/Static.qll 34a4cdb9f4a93414499a30aeeaad1b3388f2341c982af5688815c3b0a0e9c57b 3c8354336eff68d580b804600df9abf49ee5ee10ec076722089087820cefe731 lib/codeql/rust/elements/internal/generated/Stmt.qll 8473ff532dd5cc9d7decaddcd174b94d610f6ca0aec8e473cc051dad9f3db917 6ef7d2b5237c2dbdcacbf7d8b39109d4dc100229f2b28b5c9e3e4fbf673ba72b lib/codeql/rust/elements/internal/generated/StmtList.qll 816aebf8f56e179f5f0ba03e80d257ee85459ea757392356a0af6dbd0cd9ef5e 6aa51cdcdc8d93427555fa93f0e84afdfbbd4ffc8b8d378ae4a22b5b6f94f48b -lib/codeql/rust/elements/internal/generated/Struct.qll ce40dd64d61f6ca0a8425019dd8368ca3d79d3a238d7afb9b3f1c86c2c95c1b5 214946f9cdbf134a181d98b02bb630504ad524541febc4c0b8490a9a6fab8750 +lib/codeql/rust/elements/internal/generated/Struct.qll 869ef9510b92f0e80455fd9e9640c33304035937a7ee4457a03191e4ca8a9065 401932fd7984dec3946cb0d49752d1ec86f6f2f819de2f5cdc36f5ce3f035690 lib/codeql/rust/elements/internal/generated/StructExpr.qll c6d861eaa0123b103fd9ffd2485423419ef9b7e0b4af9ed2a2090d8ec534f65d 50da99ee44771e1239ed8919f711991dd3ec98589fbe49b49b68c88074a07d74 lib/codeql/rust/elements/internal/generated/StructExprField.qll 6bdc52ed325fd014495410c619536079b8c404e2247bd2435aa7685dd56c3833 501a30650cf813176ff325a1553da6030f78d14be3f84fea6d38032f4262c6b0 lib/codeql/rust/elements/internal/generated/StructExprFieldList.qll 298d33442d1054922d2f97133a436ee559f1f35b7708523284d1f7eee7ebf443 7febe38a79fadf3dcb53fb8f8caf4c2780f5df55a1f8336269c7b674d53c6272 @@ -621,7 +621,7 @@ lib/codeql/rust/elements/internal/generated/StructFieldList.qll 5da528a51a6a5db9 lib/codeql/rust/elements/internal/generated/StructPat.qll c76fa005c2fd0448a8803233e1e8818c4123301eb66ac5cf69d0b9eaafc61e98 6e0dffccdce24bca20e87d5ba0f0995c9a1ae8983283e71e7dbfcf6fffc67a58 lib/codeql/rust/elements/internal/generated/StructPatField.qll 5b5c7302dbc4a902ca8e69ff31875c867e295a16a626ba3cef29cd0aa248f179 4e192a0df79947f5cb0d47fdbbba7986137a6a40a1be92ae119873e2fad67edf lib/codeql/rust/elements/internal/generated/StructPatFieldList.qll 1a95a1bd9f64fb18e9571657cf2d02a8b13c747048a1f0f74baf31b91f0392ad fc274e414ff4ed54386046505920de92755ad0b4d39a7523cdffa4830bd53b37 -lib/codeql/rust/elements/internal/generated/Synth.qll ef45765a8e077bc0168ec226b3b84902acd8d774cd7af637e0b1b1b16ff1deaf 58dd7076517e5d680c6d8b0489530bd8e1d15d629a233f1742cca3f028d5ec81 +lib/codeql/rust/elements/internal/generated/Synth.qll 6835c645faf2eac3dfd2d29dbdd3088ff936afd5910bf7c48ff872d6a1fa6051 9a04caa1e973b8b38708a86b4d85f9b30a0006b7688a286f225c548b81df8935 lib/codeql/rust/elements/internal/generated/SynthConstructors.qll bcc7f617b775ac0c7f04b1cc333ed7cc0bd91f1fabc8baa03c824d1df03f6076 bcc7f617b775ac0c7f04b1cc333ed7cc0bd91f1fabc8baa03c824d1df03f6076 lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b lib/codeql/rust/elements/internal/generated/TokenTree.qll 1a3c4f5f30659738641abdd28cb793dab3cfde484196b59656fc0a2767e53511 de2ebb210c7759ef7a6f7ee9f805e1cac879221287281775fc80ba34a5492edf @@ -643,7 +643,7 @@ 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 328d714dba5b19f8bf94c17efee21c9ca9e693a3a568a2afed3dc0d03fcc3f50 9be7039ce837a3217e97f64c8667d78e4d69e19c8fe7c19198389acb83a15957 +lib/codeql/rust/elements/internal/generated/Union.qll d8d21121ebdd274a99e466866a89efe3a6a7bb43fecb770ce35a1d7ac69d07c9 9f917b82bdc4c7fe2eecfb219cb1302ac05020df0cf09bb054f4a7fcfd7788ca lib/codeql/rust/elements/internal/generated/Use.qll cf95b5c4756b25bee74113207786e37464ffbc0fb5f776a04c651300afc53753 1fe26b3904db510184cb688cb0eeb0a8dbac7ac15e27a3b572d839743c738393 lib/codeql/rust/elements/internal/generated/UseBoundGenericArg.qll 69162794e871291545ea04f61259b2d000671a96f7ca129f7dd9ed6e984067c4 31de9ebc0634b38e2347e0608b4ea888892f1f2732a2892464078cd8a07b4ee8 lib/codeql/rust/elements/internal/generated/UseBoundGenericArgs.qll 2cc8ab0068b7bf44ca17a62b32a8dd1d89cd743532c8a96b262b164fd81b0c36 347e7709a0f5ace197beb6827f6cf04a31ff68ff2dff3707914c6b910658d00a diff --git a/rust/ql/lib/codeql/rust/elements/Enum.qll b/rust/ql/lib/codeql/rust/elements/Enum.qll index 9d52b558f53..2ff0cea0552 100644 --- a/rust/ql/lib/codeql/rust/elements/Enum.qll +++ b/rust/ql/lib/codeql/rust/elements/Enum.qll @@ -7,6 +7,7 @@ private import internal.EnumImpl import codeql.rust.elements.Adt import codeql.rust.elements.Attr import codeql.rust.elements.GenericParamList +import codeql.rust.elements.Item import codeql.rust.elements.Name import codeql.rust.elements.VariantList import codeql.rust.elements.Visibility diff --git a/rust/ql/lib/codeql/rust/elements/Struct.qll b/rust/ql/lib/codeql/rust/elements/Struct.qll index 27b6a37b791..d05d5fe5fd5 100644 --- a/rust/ql/lib/codeql/rust/elements/Struct.qll +++ b/rust/ql/lib/codeql/rust/elements/Struct.qll @@ -8,6 +8,7 @@ import codeql.rust.elements.Adt import codeql.rust.elements.Attr 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 diff --git a/rust/ql/lib/codeql/rust/elements/Union.qll b/rust/ql/lib/codeql/rust/elements/Union.qll index 4bf596f4d7a..12d495880c6 100644 --- a/rust/ql/lib/codeql/rust/elements/Union.qll +++ b/rust/ql/lib/codeql/rust/elements/Union.qll @@ -7,6 +7,7 @@ private import internal.UnionImpl import codeql.rust.elements.Adt import codeql.rust.elements.Attr import codeql.rust.elements.GenericParamList +import codeql.rust.elements.Item import codeql.rust.elements.Name import codeql.rust.elements.StructFieldList import codeql.rust.elements.VariantDef diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Enum.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Enum.qll index b829ead848c..fafb2de98e7 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Enum.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Enum.qll @@ -9,6 +9,7 @@ private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.internal.AdtImpl::Impl as AdtImpl import codeql.rust.elements.Attr import codeql.rust.elements.GenericParamList +import codeql.rust.elements.internal.ItemImpl::Impl as ItemImpl import codeql.rust.elements.Name import codeql.rust.elements.VariantList import codeql.rust.elements.Visibility @@ -29,7 +30,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::Enum` class directly. * Use the subclass `Enum`, where the following predicates are available. */ - class Enum extends Synth::TEnum, AdtImpl::Adt { + class Enum extends Synth::TEnum, AdtImpl::Adt, ItemImpl::Item { override string getAPrimaryQlClass() { result = "Enum" } /** 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 a0ccc4d728b..f7db87c452b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -3937,12 +3937,13 @@ private module Impl { private Element getImmediateChildOfEnum(Enum e, int index, string partialPredicateCall) { exists( - int b, int bAdt, int n, int nAttr, int nGenericParamList, int nName, int nVariantList, - int nVisibility, int nWhereClause + int b, int bAdt, int bItem, int n, int nAttr, int nGenericParamList, int nName, + int nVariantList, int nVisibility, int nWhereClause | b = 0 and bAdt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAdt(e, i, _)) | i) and - n = bAdt and + bItem = bAdt + 1 + max(int i | i = -1 or exists(getImmediateChildOfItem(e, i, _)) | i) and + n = bItem and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nGenericParamList = nAttr + 1 and nName = nGenericParamList + 1 and @@ -3954,6 +3955,8 @@ private module Impl { or result = getImmediateChildOfAdt(e, index - b, partialPredicateCall) or + result = getImmediateChildOfItem(e, index - bAdt, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -4020,13 +4023,14 @@ private module Impl { private Element getImmediateChildOfStruct(Struct e, int index, string partialPredicateCall) { exists( - int b, int bAdt, int bVariantDef, int n, int nAttr, int nFieldList, int nGenericParamList, - int nName, int nVisibility, int nWhereClause + int b, int bAdt, int bItem, int bVariantDef, int n, int nAttr, int nFieldList, + int nGenericParamList, int nName, int nVisibility, int nWhereClause | b = 0 and bAdt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAdt(e, i, _)) | i) and + bItem = bAdt + 1 + max(int i | i = -1 or exists(getImmediateChildOfItem(e, i, _)) | i) and bVariantDef = - bAdt + 1 + max(int i | i = -1 or exists(getImmediateChildOfVariantDef(e, i, _)) | i) and + 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 @@ -4039,7 +4043,9 @@ private module Impl { or result = getImmediateChildOfAdt(e, index - b, partialPredicateCall) or - result = getImmediateChildOfVariantDef(e, index - bAdt, partialPredicateCall) + result = getImmediateChildOfItem(e, index - bAdt, partialPredicateCall) + or + result = getImmediateChildOfVariantDef(e, index - bItem, partialPredicateCall) or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" @@ -4063,13 +4069,14 @@ private module Impl { private Element getImmediateChildOfUnion(Union e, int index, string partialPredicateCall) { exists( - int b, int bAdt, int bVariantDef, int n, int nAttr, int nGenericParamList, int nName, - int nStructFieldList, int nVisibility, int nWhereClause + int b, int bAdt, int bItem, int bVariantDef, int n, int nAttr, int nGenericParamList, + int nName, int nStructFieldList, int nVisibility, int nWhereClause | b = 0 and bAdt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAdt(e, i, _)) | i) and + bItem = bAdt + 1 + max(int i | i = -1 or exists(getImmediateChildOfItem(e, i, _)) | i) and bVariantDef = - bAdt + 1 + max(int i | i = -1 or exists(getImmediateChildOfVariantDef(e, i, _)) | i) and + 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 @@ -4082,7 +4089,9 @@ private module Impl { or result = getImmediateChildOfAdt(e, index - b, partialPredicateCall) or - result = getImmediateChildOfVariantDef(e, index - bAdt, partialPredicateCall) + result = getImmediateChildOfItem(e, index - bAdt, partialPredicateCall) + or + result = getImmediateChildOfVariantDef(e, index - bItem, partialPredicateCall) or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" 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 8835f4588c0..2baeda04c11 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -4499,7 +4499,7 @@ module Raw { * enum E {A, B(i32), C {x: i32}} * ``` */ - class Enum extends @enum, Adt { + class Enum extends @enum, Adt, Item { override string toString() { result = "Enum" } /** @@ -4607,7 +4607,7 @@ module Raw { * } * ``` */ - class Struct extends @struct, Adt, VariantDef { + class Struct extends @struct, Adt, Item, VariantDef { override string toString() { result = "Struct" } /** @@ -4650,7 +4650,7 @@ module Raw { * union U { f1: u32, f2: f32 } * ``` */ - class Union extends @union, Adt, VariantDef { + class Union extends @union, Adt, 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 8589273ff4c..7c46059a404 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Struct.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Struct.qll @@ -10,6 +10,7 @@ import codeql.rust.elements.internal.AdtImpl::Impl as AdtImpl import codeql.rust.elements.Attr 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 @@ -31,7 +32,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, AdtImpl::Adt, VariantDefImpl::VariantDef { + class Struct extends Synth::TStruct, AdtImpl::Adt, 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 28300de4580..d2196c44add 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll @@ -775,9 +775,9 @@ module Synth { * INTERNAL: Do not use. */ class TItem = - TAdt or TConst or TExternBlock or TExternCrate or TFunction or TImpl or TMacroCall or - TMacroDef or TMacroRules or TModule or TStatic or TTrait or TTraitAlias or TTypeAlias or - TUse; + TAdt or TConst or TEnum or TExternBlock or TExternCrate or TFunction or TImpl or TMacroCall or + TMacroDef or TMacroRules or TModule or TStatic or TStruct or TTrait or TTraitAlias or + TTypeAlias or TUnion or TUse; /** * INTERNAL: Do not use. @@ -2234,6 +2234,8 @@ module Synth { or result = convertConstFromRaw(e) or + result = convertEnumFromRaw(e) + or result = convertExternBlockFromRaw(e) or result = convertExternCrateFromRaw(e) @@ -2252,12 +2254,16 @@ module Synth { or result = convertStaticFromRaw(e) or + result = convertStructFromRaw(e) + or result = convertTraitFromRaw(e) or result = convertTraitAliasFromRaw(e) or result = convertTypeAliasFromRaw(e) or + result = convertUnionFromRaw(e) + or result = convertUseFromRaw(e) } @@ -3842,6 +3848,8 @@ module Synth { or result = convertConstToRaw(e) or + result = convertEnumToRaw(e) + or result = convertExternBlockToRaw(e) or result = convertExternCrateToRaw(e) @@ -3860,12 +3868,16 @@ module Synth { or result = convertStaticToRaw(e) or + result = convertStructToRaw(e) + or result = convertTraitToRaw(e) or result = convertTraitAliasToRaw(e) or result = convertTypeAliasToRaw(e) or + result = convertUnionToRaw(e) + or result = convertUseToRaw(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 88040c4ad13..69851628ae8 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Union.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Union.qll @@ -9,6 +9,7 @@ private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.internal.AdtImpl::Impl as AdtImpl import codeql.rust.elements.Attr import codeql.rust.elements.GenericParamList +import codeql.rust.elements.internal.ItemImpl::Impl as ItemImpl import codeql.rust.elements.Name import codeql.rust.elements.StructFieldList import codeql.rust.elements.internal.VariantDefImpl::Impl as VariantDefImpl @@ -30,7 +31,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, AdtImpl::Adt, VariantDefImpl::VariantDef { + class Union extends Synth::TUnion, AdtImpl::Adt, ItemImpl::Item, VariantDefImpl::VariantDef { override string getAPrimaryQlClass() { result = "Union" } /** diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index 9d208615c27..3a929c908b6 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -1919,6 +1919,7 @@ infer_type_reprs( @item = @adt | @const +| @enum | @extern_block | @extern_crate | @function @@ -1928,9 +1929,11 @@ infer_type_reprs( | @macro_rules | @module | @static +| @struct | @trait | @trait_alias | @type_alias +| @union | @use ; diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index ab5a62d9a98..c59cd01a434 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -16,7 +16,8 @@ class LoopingExpr(LabelableExpr): loop_body: optional["BlockExpr"] | child -class Adt(Item): +@annotate(Adt, replace_bases={AstNode: Item}) +class _: """ An ADT (Abstract Data Type) definition, such as `Struct`, `Enum`, or `Union`. """ @@ -1039,7 +1040,7 @@ class _: """ -@annotate(Enum, replace_bases={Item: Adt}) +@annotate(Enum) class _: """ An enum declaration. @@ -1834,7 +1835,7 @@ class _: """ -@annotate(Struct, replace_bases={Item: Adt}) +@annotate(Struct) class _: """ A Struct. For example: @@ -2013,7 +2014,7 @@ class _: """ -@annotate(Union, replace_bases={Item: Adt}) +@annotate(Union) class _: """ A union declaration. diff --git a/rust/schema/ast.py b/rust/schema/ast.py index 17fb872bb8e..32f085a4f7d 100644 --- a/rust/schema/ast.py +++ b/rust/schema/ast.py @@ -2,6 +2,9 @@ from .prelude import * +class Adt(AstNode, ): + pass + class AsmOperand(AstNode, ): pass @@ -207,7 +210,7 @@ class ContinueExpr(Expr, ): class DynTraitTypeRepr(TypeRepr, ): type_bound_list: optional["TypeBoundList"] | child -class Enum(Item, ): +class Enum(Adt, Item, ): attrs: list["Attr"] | child generic_param_list: optional["GenericParamList"] | child name: optional["Name"] | child @@ -625,7 +628,7 @@ class StmtList(AstNode, ): statements: list["Stmt"] | child tail_expr: optional["Expr"] | child -class Struct(Item, VariantDef, ): +class Struct(Adt, Item, VariantDef, ): attrs: list["Attr"] | child field_list: optional["FieldList"] | child generic_param_list: optional["GenericParamList"] | child @@ -713,7 +716,7 @@ class TypeParam(GenericParam, ): class UnderscoreExpr(Expr, ): attrs: list["Attr"] | child -class Union(Item, VariantDef, ): +class Union(Adt, Item, VariantDef, ): attrs: list["Attr"] | child generic_param_list: optional["GenericParamList"] | child name: optional["Name"] | child