From 75ca04f3dd000c344827bd1ab2f35aefc2dab96a Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Fri, 29 Nov 2024 15:38:19 +0100 Subject: [PATCH] Rust: add Crate to dbscheme --- rust/extractor/src/generated/.generated.list | 2 +- rust/extractor/src/generated/top.rs | 48 ++++++++++ rust/ql/.generated.list | 15 ++- rust/ql/.gitattributes | 5 + rust/ql/lib/codeql/rust/elements.qll | 1 + rust/ql/lib/codeql/rust/elements/Crate.qll | 10 ++ .../elements/internal/CrateConstructor.qll | 14 +++ .../rust/elements/internal/CrateImpl.qll | 16 ++++ .../elements/internal/generated/Crate.qll | 94 +++++++++++++++++++ .../internal/generated/ParentChild.qll | 15 +++ .../rust/elements/internal/generated/Raw.qll | 32 +++++++ .../elements/internal/generated/Synth.qll | 20 ++++ .../internal/generated/SynthConstructors.qll | 1 + rust/ql/lib/rust.dbscheme | 39 +++++++- .../generated/Crate/MISSING_SOURCE.txt | 4 + rust/schema/prelude.py | 12 ++- 16 files changed, 320 insertions(+), 8 deletions(-) create mode 100644 rust/ql/lib/codeql/rust/elements/Crate.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/CrateConstructor.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/CrateImpl.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/generated/Crate.qll create mode 100644 rust/ql/test/extractor-tests/generated/Crate/MISSING_SOURCE.txt diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index 528da1d5671..e70681ab2aa 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 da0f43b99d3a173520048275597e2b052a7351f6fcb2ad5fc912257976742bb7 da0f43b99d3a173520048275597e2b052a7351f6fcb2ad5fc912257976742bb7 +top.rs 4b7dee6ebdbb2f8bd2f387cbb71e0481475de0a94c0baaac4699f19551256d65 4b7dee6ebdbb2f8bd2f387cbb71e0481475de0a94c0baaac4699f19551256d65 diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index 2774193823a..7df57c79bf6 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -22,6 +22,54 @@ impl trap::TrapClass for Element { fn class_name() -> &'static str { "Element" } } +#[derive(Debug)] +pub struct Crate { + pub id: trap::TrapId, + pub name: Option, + pub version: Option, + pub module: Option>, + pub cfg_options: Vec, + pub dependencies: Vec>, +} + +impl trap::TrapEntry for Crate { + fn extract_id(&mut self) -> trap::TrapId { + std::mem::replace(&mut self.id, trap::TrapId::Star) + } + + fn emit(self, id: trap::Label, out: &mut trap::Writer) { + out.add_tuple("crates", vec![id.into()]); + if let Some(v) = self.name { + out.add_tuple("crate_names", vec![id.into(), v.into()]); + } + if let Some(v) = self.version { + out.add_tuple("crate_versions", vec![id.into(), v.into()]); + } + if let Some(v) = self.module { + out.add_tuple("crate_modules", vec![id.into(), v.into()]); + } + for (i, v) in self.cfg_options.into_iter().enumerate() { + out.add_tuple("crate_cfg_options", vec![id.into(), i.into(), v.into()]); + } + for (i, v) in self.dependencies.into_iter().enumerate() { + out.add_tuple("crate_dependencies", vec![id.into(), i.into(), v.into()]); + } + } +} + +impl trap::TrapClass for Crate { + fn class_name() -> &'static str { "Crate" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Crate is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct ExtractorStep { pub id: trap::TrapId, diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 6e7a2892a41..65c71119185 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -43,6 +43,7 @@ lib/codeql/rust/elements/ConstArg.qll f37b34417503bbd2f3ce09b3211d8fa71f6a954970 lib/codeql/rust/elements/ConstBlockPat.qll a25f42b84dbeb33e10955735ef53b8bb7e3258522d6d1a9068f19adaf1af89d9 eeb816d2b54db77a1e7bb70e90b68d040a0cd44e9d44455a223311c3615c5e6e lib/codeql/rust/elements/ConstParam.qll 248db1e3abef6943326c42478a15f148f8cdaa25649ef5578064b15924c53351 28babba3aea28a65c3fe3b3db6cb9c86f70d7391e9d6ef9188eb2e4513072f9f lib/codeql/rust/elements/ContinueExpr.qll 9f27c5d5c819ad0ebc5bd10967ba8d33a9dc95b9aae278fcfb1fcf9216bda79c 0dc061445a6b89854fdce92aaf022fdc76b724511a50bb777496ce75c9ecb262 +lib/codeql/rust/elements/Crate.qll 67a3b953a04244e2fcebe7a18be13bc7fdb8781669819e473823a9168f3f5412 aef65281efbc8c7e7b3747693626718ca25b3d9a90aa42221de00998eca44efe lib/codeql/rust/elements/DynTraitTypeRepr.qll 5953263ec1e77613170c13b5259b22a71c206a7e08841d2fa1a0b373b4014483 d4380c6cc460687dcd8598df27cad954ef4f508f1117a82460d15d295a7b64ab lib/codeql/rust/elements/Element.qll 0b62d139fef54ed2cf2e2334806aa9bfbc036c9c2085d558f15a42cc3fa84c48 24b999b93df79383ef27ede46e38da752868c88a07fe35fcff5d526684ba7294 lib/codeql/rust/elements/Enum.qll 2f122b042519d55e221fceac72fce24b30d4caf1947b25e9b68ee4a2095deb11 83a47445145e4fda8c3631db602a42dbb7a431f259eddf5c09dccd86f6abdd0e @@ -254,6 +255,8 @@ lib/codeql/rust/elements/internal/ConstImpl.qll 7aac2b441a41f21b7d788e3eb042554f lib/codeql/rust/elements/internal/ConstParamConstructor.qll f6645f952aac87c7e00e5e9661275312a1df47172088b4de6b5a253d5c4ed048 eda737470a7b89cf6a02715c9147d074041d6d00fd50d5b2d70266add6e4b571 lib/codeql/rust/elements/internal/ConstParamImpl.qll 909d85d857dfb973cd8e148744d3a88506d113d193d35ab0243be745d004ad45 c9e18170c5b4e4d5fca9f175bb139a248055b608ceafdd90c7182d06d67c3cba lib/codeql/rust/elements/internal/ContinueExprConstructor.qll cd93f1b35ccdb031d7e8deba92f6a76187f6009c454f3ea07e89ba459de57ca6 6f658e7d580c4c9068b01d6dd6f72888b8800860668a6653f8c3b27dc9996935 +lib/codeql/rust/elements/internal/CrateConstructor.qll 2a3710ed6ff4ffdbc773ac16e2cf176415be8908e1d59fd0702bdeddbae096f4 f75a069b0ef71e54089001eb3a34b8a9e4ce8e4f65ffa71b669b38cf86e0af40 +lib/codeql/rust/elements/internal/CrateImpl.qll 37e81d770956b8f586061e5ce24461e39a77fc3863775f8b1433847aa3078d54 6b1773776c9fe71c0bbe087bd255bd1fedc476f22560b74adf89f27ec2dd3a6f lib/codeql/rust/elements/internal/DynTraitTypeReprConstructor.qll 6964e6c80fb7f5e283c1d15562cef18ed097452b7fcbc04eff780c7646675c7a f03c4830bf1b958fdfb6563136fa21c911b2e41ce1d1caee14ec572c7232866d lib/codeql/rust/elements/internal/DynTraitTypeReprImpl.qll fa2dc41b441c2e8d663644ca8ae53f473ac54b3c977490b5173787cffe4a62b1 118945a547627b639574c5f8e58bf7dbf5f3882c6d74ebf363c28c8fb88799d3 lib/codeql/rust/elements/internal/EnumConstructor.qll eca1a13937faacb1db50e4cf69d175f992f2204a5aaed9144bb6f3cb63814ac5 1bafba78b2729fdb052a25a1ba3f4f70871564aa4df632b4a1d467858a437924 @@ -501,6 +504,7 @@ lib/codeql/rust/elements/internal/generated/ConstArg.qll e2451cac6ee464f5b64883d lib/codeql/rust/elements/internal/generated/ConstBlockPat.qll 7526d83ee9565d74776f42db58b1a2efff6fb324cfc7137f51f2206fee815d79 0ab3c22908ff790e7092e576a5df3837db33c32a7922a513a0f5e495729c1ac5 lib/codeql/rust/elements/internal/generated/ConstParam.qll 310342603959a4d521418caec45b585b97e3a5bf79368769c7150f52596a7266 a5dd92f0b24d7dbdaea2daedba3c8d5f700ec7d3ace81ca368600da2ad610082 lib/codeql/rust/elements/internal/generated/ContinueExpr.qll e2010feb14fb6edeb83a991d9357e50edb770172ddfde2e8670b0d3e68169f28 48d09d661e1443002f6d22b8710e22c9c36d9daa9cde09c6366a61e960d717cb +lib/codeql/rust/elements/internal/generated/Crate.qll 6d28f07d4ddaf077119590a007a8cfad0c86cf0efabbde689fb4092577b883df d43013163916aa83f281314a72d02d7566e1f505aa36cfd8060a760b06b02683 lib/codeql/rust/elements/internal/generated/DynTraitTypeRepr.qll a9d540717af1f00dbea1c683fd6b846cddfb2968c7f3e021863276f123337787 1972efb9bca7aae9a9708ca6dcf398e5e8c6d2416a07d525dba1649b80fbe4d1 lib/codeql/rust/elements/internal/generated/Element.qll fb483b636180c699181c8aff83bc471b2c416206694f7028c671015918547663 542d1b9ae80c997974c94db3655887186df3921a8fa3f565eaf292dcfdac3c4c lib/codeql/rust/elements/internal/generated/Enum.qll 4f4cbc9cd758c20d476bc767b916c62ba434d1750067d0ffb63e0821bb95ec86 3da735d54022add50cec0217bbf8ec4cf29b47f4851ee327628bcdd6454989d0 @@ -574,7 +578,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 2992505ffc3279d58f2d03e89ec0f7d23aedebb3c3baf990bfbda894a6cc10e8 2f6b721e8244b444b47d41c2303fea166debee208544389c4dd9f2be0d62fe43 +lib/codeql/rust/elements/internal/generated/ParentChild.qll 9858c29b5852292e87dedc9bc9105b17915f5eb8198b6a29a2d621e26b7440ef 17c1a3e7bb344c7f9584ee2f28de622eb0f17ca4d967231f6215aa36261eeec9 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 @@ -589,7 +593,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 cfbf960b83fc7f659214a48ced60001366410322a116de255678dec9d765d8dd c0d1ee182ccb916dedf33a272fb37ac394e0fac95ef4fadb8a93c7db8d11feb5 +lib/codeql/rust/elements/internal/generated/Raw.qll 4b60a7c36b770156d3710d811247bc1607c851a926d1546271f166af5b68c01f f65ba77cb2135b4a0d37d8c3e19e49f368426b14c7e48730f3fb9e65f9d7b9c5 lib/codeql/rust/elements/internal/generated/RecordExpr.qll 2131b2cb336caa76170082e69776011bf02576bbfdd34ba68ca84af24209250a 39a2e3ec32352b594c43cc1295e0e8b3f9808173322d3d73cb7d48ef969d5565 lib/codeql/rust/elements/internal/generated/RecordExprField.qll 7e9f8663d3b74ebbc9603b10c9912f082febba6bd73d344b100bbd3edf837802 fbe6b578e7fd5d5a6f21bbb8c388957ab7210a6a249ec71510a50fb35b319ea1 lib/codeql/rust/elements/internal/generated/RecordExprFieldList.qll 179a97211fe7aa6265085d4d54115cdbc0e1cd7c9b2135591e8f36d6432f13d3 dd44bbbc1e83a1ed3a587afb729d7debf7aeb7b63245de181726af13090e50c0 @@ -615,8 +619,8 @@ lib/codeql/rust/elements/internal/generated/Static.qll 0b336767104d2b852b9acd234 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/Synth.qll a00cdbb2ba5213976055f2339ae8bb01a42fdae22c355f171aa2ddfbbd7ec200 f49fbdcc7ab69258e3a86039a95d17b069e64922cc6a32a872dc696067b65507 -lib/codeql/rust/elements/internal/generated/SynthConstructors.qll 0d7929ad8c03e683500c64d1cfff73da518be9836a5d32e44d2f311fb4ae1b96 0d7929ad8c03e683500c64d1cfff73da518be9836a5d32e44d2f311fb4ae1b96 +lib/codeql/rust/elements/internal/generated/Synth.qll 554d5979ddb7afa42aa4d373cafcffd086e017104130f4a661264ee1c7b54653 059fa863ddab905050e1bbb4669722a14721b40b193bb91f1642da9a36d09018 +lib/codeql/rust/elements/internal/generated/SynthConstructors.qll f6321ef2a74bb3c869cb3d3fc7753ec90d03bf2c620597f7f1fea636309a3575 f6321ef2a74bb3c869cb3d3fc7753ec90d03bf2c620597f7f1fea636309a3575 lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b lib/codeql/rust/elements/internal/generated/TokenTree.qll 8577c2b097c1be2f0f7daa5acfcf146f78674a424d99563e08a84dd3e6d91b46 d2f30764e84dbfc0a6a5d3d8a5f935cd432413688cb32da9c94e420fbc10665c lib/codeql/rust/elements/internal/generated/Trait.qll 8fa41b50fa0f68333534f2b66bb4ec8e103ff09ac8fa5c2cc64bc04beafec205 ce1c9aa6d0e2f05d28aab8e1165c3b9fb8e24681ade0cf6a9df2e8617abeae7e @@ -652,7 +656,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 fd66034a77b69f4741ca1488e8d04879da800bfa8d55492747c2b49d71a8067b fd66034a77b69f4741ca1488e8d04879da800bfa8d55492747c2b49d71a8067b +lib/codeql/rust/elements.qll 041993d344a4c10b301ac607075254175f1a1f927328de4f40f4df0260d0dece 041993d344a4c10b301ac607075254175f1a1f927328de4f40f4df0260d0dece 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 @@ -750,6 +754,7 @@ test/extractor-tests/generated/ConstParam/ConstParam_getTypeRepr.ql f25a4695e06a test/extractor-tests/generated/ContinueExpr/ContinueExpr.ql 971ccb238aec663855745fa2669d5f8973a4e6c76bacdf0deaf23522ec1cf80c 4e3ceb4c4cd833ad8311bb02e5cda18163082e341cd8a3def60734a53cca8929 test/extractor-tests/generated/ContinueExpr/ContinueExpr_getAttr.ql acb261869d3b3c65e364e7b6fbd7afdf5305806d4417b05044beed9a81e66ea4 af35ce0aee87ddc7a0cd34be4a480c619940d036d5cecce0e4e1fcd75b7c553e test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.ql 39dae9872d92fa9b15343c93da545c2b0e15b4f27f2296c200fd4611b68858d5 52a209022e3b83260b4ef5513ffbcc1ca1f7c21bad2c721a0d3698793d2161d2 +test/extractor-tests/generated/Crate/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr.ql 513d64b564f359e1022ae6f3d6d4a8ad637f595f01f29a6c2a167d1c2e8f1f99 0c7a7af6ee1005126b9ab77b2a7732821f85f1d2d426312c98206cbbedc19bb2 test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr_getTypeBoundList.ql b20720ff0b147d55cea6f2de44d5bf297e79991eaf103938ccd7ab9d129e9656 eb8c9db2581cea00c29d7772de0b0a125be02c37092217a419f1a2b6a9711a6c test/extractor-tests/generated/Enum/Enum.ql ed518d828d8e2e4790849284de1d0d5e728dbc2fe5e9f187e8ebfa2d503efd5a 7092b963eb133371e1cbc09d45f8c2308d7093523140b351d67073a8d258643e diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index 05ac0fbbf27..8dbee936d5d 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -45,6 +45,7 @@ /lib/codeql/rust/elements/ConstBlockPat.qll linguist-generated /lib/codeql/rust/elements/ConstParam.qll linguist-generated /lib/codeql/rust/elements/ContinueExpr.qll linguist-generated +/lib/codeql/rust/elements/Crate.qll linguist-generated /lib/codeql/rust/elements/DynTraitTypeRepr.qll linguist-generated /lib/codeql/rust/elements/Element.qll linguist-generated /lib/codeql/rust/elements/Enum.qll linguist-generated @@ -256,6 +257,8 @@ /lib/codeql/rust/elements/internal/ConstParamConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ConstParamImpl.qll linguist-generated /lib/codeql/rust/elements/internal/ContinueExprConstructor.qll linguist-generated +/lib/codeql/rust/elements/internal/CrateConstructor.qll linguist-generated +/lib/codeql/rust/elements/internal/CrateImpl.qll linguist-generated /lib/codeql/rust/elements/internal/DynTraitTypeReprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/DynTraitTypeReprImpl.qll linguist-generated /lib/codeql/rust/elements/internal/EnumConstructor.qll linguist-generated @@ -503,6 +506,7 @@ /lib/codeql/rust/elements/internal/generated/ConstBlockPat.qll linguist-generated /lib/codeql/rust/elements/internal/generated/ConstParam.qll linguist-generated /lib/codeql/rust/elements/internal/generated/ContinueExpr.qll linguist-generated +/lib/codeql/rust/elements/internal/generated/Crate.qll linguist-generated /lib/codeql/rust/elements/internal/generated/DynTraitTypeRepr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/Element.qll linguist-generated /lib/codeql/rust/elements/internal/generated/Enum.qll linguist-generated @@ -752,6 +756,7 @@ /test/extractor-tests/generated/ContinueExpr/ContinueExpr.ql linguist-generated /test/extractor-tests/generated/ContinueExpr/ContinueExpr_getAttr.ql linguist-generated /test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.ql linguist-generated +/test/extractor-tests/generated/Crate/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr.ql linguist-generated /test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr_getTypeBoundList.ql linguist-generated /test/extractor-tests/generated/Enum/Enum.ql linguist-generated diff --git a/rust/ql/lib/codeql/rust/elements.qll b/rust/ql/lib/codeql/rust/elements.qll index 3bcb8cafb06..89bc9087a14 100644 --- a/rust/ql/lib/codeql/rust/elements.qll +++ b/rust/ql/lib/codeql/rust/elements.qll @@ -48,6 +48,7 @@ import codeql.rust.elements.ConstArg import codeql.rust.elements.ConstBlockPat import codeql.rust.elements.ConstParam import codeql.rust.elements.ContinueExpr +import codeql.rust.elements.Crate import codeql.rust.elements.DynTraitTypeRepr import codeql.rust.elements.Element import codeql.rust.elements.Enum diff --git a/rust/ql/lib/codeql/rust/elements/Crate.qll b/rust/ql/lib/codeql/rust/elements/Crate.qll new file mode 100644 index 00000000000..fc2f137c49e --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/Crate.qll @@ -0,0 +1,10 @@ +// generated by codegen, do not edit +/** + * This module provides the public class `Crate`. + */ + +private import internal.CrateImpl +import codeql.rust.elements.Element +import codeql.rust.elements.Module + +final class Crate = Impl::Crate; diff --git a/rust/ql/lib/codeql/rust/elements/internal/CrateConstructor.qll b/rust/ql/lib/codeql/rust/elements/internal/CrateConstructor.qll new file mode 100644 index 00000000000..25a5c4ce8a4 --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/CrateConstructor.qll @@ -0,0 +1,14 @@ +// generated by codegen, remove this comment if you wish to edit this file +/** + * This module defines the hook used internally to tweak the characteristic predicate of + * `Crate` synthesized instances. + * INTERNAL: Do not use. + */ + +private import codeql.rust.elements.internal.generated.Raw + +/** + * The characteristic predicate of `Crate` synthesized instances. + * INTERNAL: Do not use. + */ +predicate constructCrate(Raw::Crate id) { any() } diff --git a/rust/ql/lib/codeql/rust/elements/internal/CrateImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CrateImpl.qll new file mode 100644 index 00000000000..ea9f8658704 --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/CrateImpl.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 `Crate`. + * + * INTERNAL: Do not use. + */ + +private import codeql.rust.elements.internal.generated.Crate + +/** + * INTERNAL: This module contains the customizable definition of `Crate` and should not + * be referenced directly. + */ +module Impl { + class Crate extends Generated::Crate { } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Crate.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Crate.qll new file mode 100644 index 00000000000..0bac8d8380d --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Crate.qll @@ -0,0 +1,94 @@ +// generated by codegen, do not edit +/** + * This module provides the generated definition of `Crate`. + * 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.Crate +import codeql.rust.elements.internal.ElementImpl::Impl as ElementImpl +import codeql.rust.elements.Module + +private class CrateAlias = Crate; + +/** + * INTERNAL: This module contains the fully generated definition of `Crate` and should not + * be referenced directly. + */ +module Generated { + /** + * INTERNAL: Do not reference the `Generated::Crate` class directly. + * Use the subclass `Crate`, where the following predicates are available. + */ + class Crate extends Synth::TCrate, ElementImpl::Element { + override string getAPrimaryQlClass() { result = "Crate" } + + /** + * Gets the name of this crate, if it exists. + */ + string getName() { result = Synth::convertCrateToRaw(this).(Raw::Crate).getName() } + + /** + * Holds if `getName()` exists. + */ + final predicate hasName() { exists(this.getName()) } + + /** + * Gets the version of this crate, if it exists. + */ + string getVersion() { result = Synth::convertCrateToRaw(this).(Raw::Crate).getVersion() } + + /** + * Holds if `getVersion()` exists. + */ + final predicate hasVersion() { exists(this.getVersion()) } + + /** + * Gets the module of this crate, if it exists. + */ + Module getModule() { + result = Synth::convertModuleFromRaw(Synth::convertCrateToRaw(this).(Raw::Crate).getModule()) + } + + /** + * Holds if `getModule()` exists. + */ + final predicate hasModule() { exists(this.getModule()) } + + /** + * Gets the `index`th cfg option of this crate (0-based). + */ + string getCfgOption(int index) { + result = Synth::convertCrateToRaw(this).(Raw::Crate).getCfgOption(index) + } + + /** + * Gets any of the cfg options of this crate. + */ + final string getACfgOption() { result = this.getCfgOption(_) } + + /** + * Gets the number of cfg options of this crate. + */ + final int getNumberOfCfgOptions() { result = count(int i | exists(this.getCfgOption(i))) } + + /** + * Gets the `index`th dependency of this crate (0-based). + */ + CrateAlias getDependency(int index) { + result = + Synth::convertCrateFromRaw(Synth::convertCrateToRaw(this).(Raw::Crate).getDependency(index)) + } + + /** + * Gets any of the dependencies of this crate. + */ + final CrateAlias getADependency() { result = this.getDependency(_) } + + /** + * Gets the number of dependencies of this crate. + */ + final int getNumberOfDependencies() { result = count(int i | exists(this.getDependency(i))) } + } +} 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 ee97d8a4c60..7cd819ab537 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -12,6 +12,19 @@ private module Impl { none() } + private Element getImmediateChildOfCrate(Crate e, int index, string partialPredicateCall) { + exists(int b, int bElement, int n | + b = 0 and + bElement = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfElement(e, i, _)) | i) and + n = bElement and + ( + none() + or + result = getImmediateChildOfElement(e, index - b, partialPredicateCall) + ) + ) + } + private Element getImmediateChildOfExtractorStep( ExtractorStep e, int index, string partialPredicateCall ) { @@ -4050,6 +4063,8 @@ private module Impl { // * none() simplifies generation, as we can append `or ...` without a special case for the first item none() or + result = getImmediateChildOfCrate(e, index, partialAccessor) + or result = getImmediateChildOfExtractorStep(e, index, partialAccessor) or result = getImmediateChildOfFormat(e, index, partialAccessor) diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index a858c89ce57..96ef2a3701c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -12,6 +12,38 @@ module Raw { string toString() { none() } } + /** + * INTERNAL: Do not use. + */ + class Crate extends @crate, Element { + override string toString() { result = "Crate" } + + /** + * Gets the name of this crate, if it exists. + */ + string getName() { crate_names(this, result) } + + /** + * Gets the version of this crate, if it exists. + */ + string getVersion() { crate_versions(this, result) } + + /** + * Gets the module of this crate, if it exists. + */ + Module getModule() { crate_modules(this, result) } + + /** + * Gets the `index`th cfg option of this crate (0-based). + */ + string getCfgOption(int index) { crate_cfg_options(this, index, result) } + + /** + * Gets the `index`th dependency of this crate (0-based). + */ + Crate getDependency(int index) { crate_dependencies(this, index, result) } + } + /** * INTERNAL: Do not use. */ 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 fff08a91d81..d7a423aaf2e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll @@ -162,6 +162,10 @@ module Synth { * INTERNAL: Do not use. */ TContinueExpr(Raw::ContinueExpr id) { constructContinueExpr(id) } or + /** + * INTERNAL: Do not use. + */ + TCrate(Raw::Crate id) { constructCrate(id) } or /** * INTERNAL: Do not use. */ @@ -1061,6 +1065,12 @@ module Synth { */ TContinueExpr convertContinueExprFromRaw(Raw::Element e) { result = TContinueExpr(e) } + /** + * INTERNAL: Do not use. + * Converts a raw element to a synthesized `TCrate`, if possible. + */ + TCrate convertCrateFromRaw(Raw::Element e) { result = TCrate(e) } + /** * INTERNAL: Do not use. * Converts a raw element to a synthesized `TDynTraitTypeRepr`, if possible. @@ -2050,6 +2060,8 @@ module Synth { * Converts a raw DB element to a synthesized `TElement`, if possible. */ TElement convertElementFromRaw(Raw::Element e) { + result = convertCrateFromRaw(e) + or result = convertExtractorStepFromRaw(e) or result = convertLocatableFromRaw(e) @@ -2633,6 +2645,12 @@ module Synth { */ Raw::Element convertContinueExprToRaw(TContinueExpr e) { e = TContinueExpr(result) } + /** + * INTERNAL: Do not use. + * Converts a synthesized `TCrate` to a raw DB element, if possible. + */ + Raw::Element convertCrateToRaw(TCrate e) { e = TCrate(result) } + /** * INTERNAL: Do not use. * Converts a synthesized `TDynTraitTypeRepr` to a raw DB element, if possible. @@ -3620,6 +3638,8 @@ module Synth { * Converts a synthesized `TElement` to a raw DB element, if possible. */ Raw::Element convertElementToRaw(TElement e) { + result = convertCrateToRaw(e) + or result = convertExtractorStepToRaw(e) or result = convertLocatableToRaw(e) diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/SynthConstructors.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/SynthConstructors.qll index 7cfc9bda34f..1cd8fac638c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/SynthConstructors.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/SynthConstructors.qll @@ -40,6 +40,7 @@ import codeql.rust.elements.internal.ConstArgConstructor import codeql.rust.elements.internal.ConstBlockPatConstructor import codeql.rust.elements.internal.ConstParamConstructor import codeql.rust.elements.internal.ContinueExprConstructor +import codeql.rust.elements.internal.CrateConstructor import codeql.rust.elements.internal.DynTraitTypeReprConstructor import codeql.rust.elements.internal.EnumConstructor import codeql.rust.elements.internal.ExprStmtConstructor diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index 29a351d42ac..2791dade011 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -120,11 +120,48 @@ locatable_locations( // from schema @element = - @extractor_step + @crate +| @extractor_step | @locatable | @unextracted ; +crates( + unique int id: @crate +); + +#keyset[id] +crate_names( + int id: @crate ref, + string name: string ref +); + +#keyset[id] +crate_versions( + int id: @crate ref, + string version: string ref +); + +#keyset[id] +crate_modules( + int id: @crate ref, + int module: @module ref +); + +#keyset[id, index] +crate_cfg_options( + int id: @crate ref, + int index: int ref, + string cfg_option: string ref +); + +#keyset[id, index] +crate_dependencies( + int id: @crate ref, + int index: int ref, + int dependency: @crate ref +); + extractor_steps( unique int id: @extractor_step, string action: string ref, diff --git a/rust/ql/test/extractor-tests/generated/Crate/MISSING_SOURCE.txt b/rust/ql/test/extractor-tests/generated/Crate/MISSING_SOURCE.txt new file mode 100644 index 00000000000..7f96b17b1f3 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Crate/MISSING_SOURCE.txt @@ -0,0 +1,4 @@ +// generated by codegen, do not edit + +After a source file is added in this directory and codegen is run again, test queries +will appear and this file will be deleted diff --git a/rust/schema/prelude.py b/rust/schema/prelude.py index c0637826fa2..e332de1f5a7 100644 --- a/rust/schema/prelude.py +++ b/rust/schema/prelude.py @@ -5,6 +5,7 @@ include("prefix.dbscheme") File = imported("File", "codeql.files.FileSystem") + @qltest.skip class Element: pass @@ -85,7 +86,8 @@ class Addressable(AstNode): or `{}::name` for addressable items defined in an anonymous block (and only addressable there-in). """) | rust.detach | ql.internal - crate_origin: optional[string] | desc("One of `rustc:`, `repo::` or `lang:`.") | rust.detach | ql.internal + crate_origin: optional[string] | desc( + "One of `rustc:`, `repo::` or `lang:`.") | rust.detach | ql.internal class Resolvable(AstNode): @@ -109,3 +111,11 @@ class ExtractorStep(Element): action: string file: optional[File] duration_ms: int + + +class Crate(Element): + name: optional[string] + version: optional[string] + module: optional["Module"] + cfg_options: list[string] + dependencies: list["Crate"]