mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
Rust: add UseTree::is_star
This commit is contained in:
@@ -38,6 +38,7 @@ fn property_name(type_name: &str, field_name: &str) -> String {
|
||||
(_, "else_branch") => "else_",
|
||||
("ArrayType", "ty") => "element_type_repr",
|
||||
("SelfParam", "is_amp") => "is_ref",
|
||||
("UseTree", "is_star") => "is_glob",
|
||||
(_, "ty") => "type_repr",
|
||||
_ => field_name,
|
||||
};
|
||||
@@ -363,6 +364,12 @@ fn get_fields(node: &AstNodeSrc) -> Vec<FieldInfo> {
|
||||
ty: FieldType::Predicate,
|
||||
});
|
||||
}
|
||||
"UseTree" => {
|
||||
result.push(FieldInfo {
|
||||
name: "is_star".to_string(),
|
||||
ty: FieldType::Predicate,
|
||||
});
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
||||
|
||||
2
rust/extractor/src/generated/.generated.list
generated
2
rust/extractor/src/generated/.generated.list
generated
@@ -1,2 +1,2 @@
|
||||
mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7
|
||||
top.rs 97b9c3c5485196cc7949ec1b67c5844b7ff7af67bc2339276adbdafb03789ac0 97b9c3c5485196cc7949ec1b67c5844b7ff7af67bc2339276adbdafb03789ac0
|
||||
top.rs 952b0987d831566762f61f9303ef573438ec0b17c01874b2e46c5cacc26d81d5 952b0987d831566762f61f9303ef573438ec0b17c01874b2e46c5cacc26d81d5
|
||||
|
||||
4
rust/extractor/src/generated/top.rs
generated
4
rust/extractor/src/generated/top.rs
generated
@@ -3074,6 +3074,7 @@ impl From<trap::Label<UseBoundGenericArgs>> for trap::Label<Locatable> {
|
||||
#[derive(Debug)]
|
||||
pub struct UseTree {
|
||||
pub id: trap::TrapId<UseTree>,
|
||||
pub is_glob: bool,
|
||||
pub path: Option<trap::Label<Path>>,
|
||||
pub rename: Option<trap::Label<Rename>>,
|
||||
pub use_tree_list: Option<trap::Label<UseTreeList>>,
|
||||
@@ -3086,6 +3087,9 @@ impl trap::TrapEntry for UseTree {
|
||||
|
||||
fn emit(self, id: trap::Label<Self>, out: &mut trap::Writer) {
|
||||
out.add_tuple("use_trees", vec![id.into()]);
|
||||
if self.is_glob {
|
||||
out.add_tuple("use_tree_is_glob", vec![id.into()]);
|
||||
}
|
||||
if let Some(v) = self.path {
|
||||
out.add_tuple("use_tree_paths", vec![id.into(), v.into()]);
|
||||
}
|
||||
|
||||
2
rust/extractor/src/translate/generated.rs
generated
2
rust/extractor/src/translate/generated.rs
generated
@@ -2483,11 +2483,13 @@ impl Translator<'_> {
|
||||
}
|
||||
|
||||
pub(crate) fn emit_use_tree(&mut self, node: ast::UseTree) -> Option<Label<generated::UseTree>> {
|
||||
let is_glob = node.star_token().is_some();
|
||||
let path = node.path().and_then(|x| self.emit_path(x));
|
||||
let rename = node.rename().and_then(|x| self.emit_rename(x));
|
||||
let use_tree_list = node.use_tree_list().and_then(|x| self.emit_use_tree_list(x));
|
||||
let label = self.trap.emit(generated::UseTree {
|
||||
id: TrapId::Star,
|
||||
is_glob,
|
||||
path,
|
||||
rename,
|
||||
use_tree_list,
|
||||
|
||||
12
rust/ql/.generated.list
generated
12
rust/ql/.generated.list
generated
@@ -177,7 +177,7 @@ lib/codeql/rust/elements/Union.qll 92ffb1abc03889b9b71dae9491d4595e443c80b472474
|
||||
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 16b6e42146dc4c2e9d8cc6bc143933d675d1a4c9a56b309f390f4bf5df99b25d 9f8dd7d621dd15f6f1ccec676b08da02773673cbb3a3570781c16167c6e08ef4
|
||||
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/VariantList.qll 07adfe5750b2d5b50c8629f36feba24edd84f75698a80339d4cee20f4e95829d 7d322e60c84ea45f8c8b509226da7ae3c0125bcda42a98a94e3e6a9855cab79e
|
||||
@@ -443,7 +443,7 @@ lib/codeql/rust/elements/internal/UseBoundGenericArgsImpl.qll 43caeeb43b4b9480bd
|
||||
lib/codeql/rust/elements/internal/UseConstructor.qll a4f790795e18abc29a50d6fbaa0db64cba781e3259a42cbf0468c24ac66b63e7 2fa288f073ac094a838c11f091def2c790b347b6a1b79407c11b10c73d6bff57
|
||||
lib/codeql/rust/elements/internal/UseImpl.qll ba779517c3c928ab6e794360b6344829e84ec6da5e1de1b03b4eaf8bdae58ce9 0f4ead9eecb584eb9827502276ffe8cb1da0d2fa4b8f660d2afc26ac4e0fba86
|
||||
lib/codeql/rust/elements/internal/UseTreeConstructor.qll 3e6e834100fcc7249f8a20f8bd9debe09b705fcf5a0e655537e71ac1c6f7956b cdbc84b8f1b009be1e4a7aaba7f5237823cea62c86b38f1794aad97e3dfcf64b
|
||||
lib/codeql/rust/elements/internal/UseTreeImpl.qll 25e286538c048cc7ee07f4b5a8b77bc8b5a215fb206f4ab20163bd81dec0b90f fe44969d441c0c34bea1b0c25cdf35f25ea667c6e2da9ea067d230f484492715
|
||||
lib/codeql/rust/elements/internal/UseTreeImpl.qll d478495a62e466fa4f443ffcf0d5235a7278fa9e8565267e73bb78210b7d54a1 76b71392b12f1bd7e66dd9e2902f48a1c27dce01fadad3a23e5a680d64fa0d49
|
||||
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
|
||||
@@ -579,7 +579,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 738612c1ec404fe8c090e0d234bdac4ce207bd0d4cad699a2981e6b6cb8947a9 df002e5540bfe5de4e6849879f334b09c2ffb4893ff8364146c6c505f4b2d090
|
||||
lib/codeql/rust/elements/internal/generated/ParentChild.qll a180b0d0c8c33503dc4c013c3f568eaa628d24204bfc36a7484c56a701a79f95 df002e5540bfe5de4e6849879f334b09c2ffb4893ff8364146c6c505f4b2d090
|
||||
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 bf6a86e7fcb7164624cc070dcce86d2bda50a2516b95115b87d0ebb5596e50a1 fd7a9ad4034cdebe8dfe495619c46f464630d38195313072e0bd904061b0fb00
|
||||
@@ -594,7 +594,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 c75c7811d041897c2d6aae1e0e55b46af6182565e1d0dd624062c5ca499e9325 79e6ded808f14dd622076b75d8e4985c7b90f2d5e964d0750519b510463b47ba
|
||||
lib/codeql/rust/elements/internal/generated/Raw.qll 5f812a8c841d33127bccca5d3939ad63d0a084cc4df22f43eb84df04f874b2e1 917369eb790c67405d4c32737204bcf919c5c52c5581a48f79b0d35909bb1160
|
||||
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
|
||||
@@ -646,7 +646,7 @@ lib/codeql/rust/elements/internal/generated/Union.qll 06a602aa7c7097e72fff6ea33d
|
||||
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 b39cbc96e473802372726d580febbfa7d73668ba476095aa4a61fae914865913 40ce6515b7df068fa8c0a7e5ae8984f50b71f6f96d625d631b28d525e3e868b7
|
||||
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/VariantList.qll 4eb923ca341033c256ca9b8a8a5b4e14c7eac9d015be187fd97eeb25dfb1e18e e7865e975c35db49cd72cb8f9864797d3cfed16c3a675b5032b867ced2bbb405
|
||||
@@ -1189,7 +1189,7 @@ test/extractor-tests/generated/Use/Use_getExtendedCanonicalPath.ql ccfde95c861cf
|
||||
test/extractor-tests/generated/Use/Use_getUseTree.ql 1dfe6bb40b29fbf823d67fecfc36ba928b43f17c38227b8eedf19fa252edf3af aacdcc4cf418ef1eec267287d2af905fe73f5bcfb080ef5373d08da31c608720
|
||||
test/extractor-tests/generated/Use/Use_getVisibility.ql 587f80acdd780042c48aeb347004be5e9fd9df063d263e6e4f2b660c48c53a8f 0c2c04f95838bca93dfe93fa208e1df7677797efc62b4e8052a4f9c5d20831dd
|
||||
test/extractor-tests/generated/UseBoundGenericArgs/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1
|
||||
test/extractor-tests/generated/UseTree/UseTree.ql cb9f63051ae08cf8557b86b69b02cefe1732fc1e2daec34bcb891e271829cd86 eb46496aab9252b21eb0ccdd75792a97264885259c23d7e17e3013d943783947
|
||||
test/extractor-tests/generated/UseTree/UseTree.ql e305edd22df9e018a58f932774447354b7fcf0ba871b52b35f0ee9cd4f6dacdf 766a84116aa8ff3d90343c6730bcb161ff1d447bdb049cd21d6b2bbf3cb9032c
|
||||
test/extractor-tests/generated/UseTree/UseTree_getPath.ql 80384a99674bdda85315a36681cb22ad2ad094005a5543b63d930fc7e030dd5b 2cd92b5de8b4214527f8a58d641430f6804d9bd40927e1da0c7efda2f86f6544
|
||||
test/extractor-tests/generated/UseTree/UseTree_getRename.ql ec3917501f3c89ac4974fab3f812d00b159ae6f2402dd20e5b4b3f8e8426391d db9ed981ce5f822aee349e5841d3126af7878d90e64140756ab4519552defe72
|
||||
test/extractor-tests/generated/UseTree/UseTree_getUseTreeList.ql c265a88347e813840969ae934dfd2904bc06f502de77709bc0b1c7255e46382a 52a239c8ea5fd8fbfbd606559d70ecadc769887437a9bcab6fb3e774208ad868
|
||||
|
||||
5
rust/ql/lib/codeql/rust/elements/UseTree.qll
generated
5
rust/ql/lib/codeql/rust/elements/UseTree.qll
generated
@@ -12,7 +12,10 @@ import codeql.rust.elements.UseTreeList
|
||||
/**
|
||||
* A UseTree. For example:
|
||||
* ```rust
|
||||
* todo!()
|
||||
* use std::collections::HashMap;
|
||||
* use std::collections::*;
|
||||
* use std::collections::HashMap as MyHashMap;
|
||||
* use std::collections::{self, HashMap, HashSet};
|
||||
* ```
|
||||
*/
|
||||
final class UseTree = Impl::UseTree;
|
||||
|
||||
@@ -15,7 +15,10 @@ module Impl {
|
||||
/**
|
||||
* A UseTree. For example:
|
||||
* ```rust
|
||||
* todo!()
|
||||
* use std::collections::HashMap;
|
||||
* use std::collections::*;
|
||||
* use std::collections::HashMap as MyHashMap;
|
||||
* use std::collections::{self, HashMap, HashSet};
|
||||
* ```
|
||||
*/
|
||||
class UseTree extends Generated::UseTree { }
|
||||
|
||||
@@ -1090,12 +1090,20 @@ module Raw {
|
||||
* INTERNAL: Do not use.
|
||||
* A UseTree. For example:
|
||||
* ```rust
|
||||
* todo!()
|
||||
* use std::collections::HashMap;
|
||||
* use std::collections::*;
|
||||
* use std::collections::HashMap as MyHashMap;
|
||||
* use std::collections::{self, HashMap, HashSet};
|
||||
* ```
|
||||
*/
|
||||
class UseTree extends @use_tree, AstNode {
|
||||
override string toString() { result = "UseTree" }
|
||||
|
||||
/**
|
||||
* Holds if this use tree is glob.
|
||||
*/
|
||||
predicate isGlob() { use_tree_is_glob(this) }
|
||||
|
||||
/**
|
||||
* Gets the path of this use tree, if it exists.
|
||||
*/
|
||||
|
||||
@@ -19,7 +19,10 @@ module Generated {
|
||||
/**
|
||||
* A UseTree. For example:
|
||||
* ```rust
|
||||
* todo!()
|
||||
* use std::collections::HashMap;
|
||||
* use std::collections::*;
|
||||
* use std::collections::HashMap as MyHashMap;
|
||||
* use std::collections::{self, HashMap, HashSet};
|
||||
* ```
|
||||
* INTERNAL: Do not reference the `Generated::UseTree` class directly.
|
||||
* Use the subclass `UseTree`, where the following predicates are available.
|
||||
@@ -27,6 +30,11 @@ module Generated {
|
||||
class UseTree extends Synth::TUseTree, AstNodeImpl::AstNode {
|
||||
override string getAPrimaryQlClass() { result = "UseTree" }
|
||||
|
||||
/**
|
||||
* Holds if this use tree is glob.
|
||||
*/
|
||||
predicate isGlob() { Synth::convertUseTreeToRaw(this).(Raw::UseTree).isGlob() }
|
||||
|
||||
/**
|
||||
* Gets the path of this use tree, if it exists.
|
||||
*/
|
||||
|
||||
@@ -1094,6 +1094,11 @@ use_trees(
|
||||
unique int id: @use_tree
|
||||
);
|
||||
|
||||
#keyset[id]
|
||||
use_tree_is_glob(
|
||||
int id: @use_tree ref
|
||||
);
|
||||
|
||||
#keyset[id]
|
||||
use_tree_paths(
|
||||
int id: @use_tree ref,
|
||||
|
||||
@@ -130,7 +130,7 @@ TypeParam/gen_type_param.rs 31c02d18020b305f1c37fdeb97656dd5b1e49e6b9a072329c2f0
|
||||
UnderscoreExpr/gen_underscore_expr.rs fe34e99d322bf86c0f5509c9b5fd6e1e8abbdf63dbe7e01687344a41e9aabe52 fe34e99d322bf86c0f5509c9b5fd6e1e8abbdf63dbe7e01687344a41e9aabe52
|
||||
Union/gen_union.rs d5e814688e93dcb105f29a392159c1b995ee15a74720167219f9431db8ef70a3 d5e814688e93dcb105f29a392159c1b995ee15a74720167219f9431db8ef70a3
|
||||
Use/gen_use.rs 2a0ea9fa34d844fda63e8f605f6a951e8b272d63ebfb0ae501fc734559a83a6b 2a0ea9fa34d844fda63e8f605f6a951e8b272d63ebfb0ae501fc734559a83a6b
|
||||
UseTree/gen_use_tree.rs 0a310eb8ce7abf481df813464dabac528a8f70d64d541409c66f957dfdd068d0 0a310eb8ce7abf481df813464dabac528a8f70d64d541409c66f957dfdd068d0
|
||||
UseTree/gen_use_tree.rs bf7525e8641a5a90a7e07214e7480b6507737cf60f9bd4d8b82bc71a8b9d7e8d bf7525e8641a5a90a7e07214e7480b6507737cf60f9bd4d8b82bc71a8b9d7e8d
|
||||
UseTreeList/gen_use_tree_list.rs ba450699782e51b1d3139148709827e35f2e57235849fb26a073e2786dfc53e3 ba450699782e51b1d3139148709827e35f2e57235849fb26a073e2786dfc53e3
|
||||
Variant/gen_variant.rs 036566793ee468418f915974e2925d8bafaec3c93c2463212f222e6a5f290f24 036566793ee468418f915974e2925d8bafaec3c93c2463212f222e6a5f290f24
|
||||
VariantList/gen_variant_list.rs 932b67564c5ef4116d84db6945e098f6d7438755d99fc198fde8f4527979bf00 932b67564c5ef4116d84db6945e098f6d7438755d99fc198fde8f4527979bf00
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
| gen_use_tree.rs:5:9:5:33 | UseTree | isGlob: | no | hasPath: | yes | hasRename: | no | hasUseTreeList: | no |
|
||||
| gen_use_tree.rs:6:9:6:27 | UseTree | isGlob: | yes | hasPath: | yes | hasRename: | no | hasUseTreeList: | no |
|
||||
| gen_use_tree.rs:7:9:7:46 | UseTree | isGlob: | no | hasPath: | yes | hasRename: | yes | hasUseTreeList: | no |
|
||||
| gen_use_tree.rs:8:9:8:50 | UseTree | isGlob: | no | hasPath: | yes | hasRename: | no | hasUseTreeList: | yes |
|
||||
| gen_use_tree.rs:8:28:8:31 | UseTree | isGlob: | no | hasPath: | yes | hasRename: | no | hasUseTreeList: | no |
|
||||
| gen_use_tree.rs:8:34:8:40 | UseTree | isGlob: | no | hasPath: | yes | hasRename: | no | hasUseTreeList: | no |
|
||||
| gen_use_tree.rs:8:43:8:49 | UseTree | isGlob: | no | hasPath: | yes | hasRename: | no | hasUseTreeList: | no |
|
||||
|
||||
@@ -2,11 +2,13 @@
|
||||
import codeql.rust.elements
|
||||
import TestUtils
|
||||
|
||||
from UseTree x, string hasPath, string hasRename, string hasUseTreeList
|
||||
from UseTree x, string isGlob, string hasPath, string hasRename, string hasUseTreeList
|
||||
where
|
||||
toBeTested(x) and
|
||||
not x.isUnknown() and
|
||||
(if x.isGlob() then isGlob = "yes" else isGlob = "no") and
|
||||
(if x.hasPath() then hasPath = "yes" else hasPath = "no") and
|
||||
(if x.hasRename() then hasRename = "yes" else hasRename = "no") and
|
||||
if x.hasUseTreeList() then hasUseTreeList = "yes" else hasUseTreeList = "no"
|
||||
select x, "hasPath:", hasPath, "hasRename:", hasRename, "hasUseTreeList:", hasUseTreeList
|
||||
select x, "isGlob:", isGlob, "hasPath:", hasPath, "hasRename:", hasRename, "hasUseTreeList:",
|
||||
hasUseTreeList
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
| gen_use_tree.rs:5:9:5:33 | UseTree | gen_use_tree.rs:5:9:5:33 | ...::HashMap |
|
||||
| gen_use_tree.rs:6:9:6:27 | UseTree | gen_use_tree.rs:6:9:6:24 | ...::collections |
|
||||
| gen_use_tree.rs:7:9:7:46 | UseTree | gen_use_tree.rs:7:9:7:33 | ...::HashMap |
|
||||
| gen_use_tree.rs:8:9:8:50 | UseTree | gen_use_tree.rs:8:9:8:24 | ...::collections |
|
||||
| gen_use_tree.rs:8:28:8:31 | UseTree | gen_use_tree.rs:8:28:8:31 | self |
|
||||
| gen_use_tree.rs:8:34:8:40 | UseTree | gen_use_tree.rs:8:34:8:40 | HashMap |
|
||||
| gen_use_tree.rs:8:43:8:49 | UseTree | gen_use_tree.rs:8:43:8:49 | HashSet |
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
| gen_use_tree.rs:7:9:7:46 | UseTree | gen_use_tree.rs:7:35:7:46 | Rename |
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
| gen_use_tree.rs:8:9:8:50 | UseTree | gen_use_tree.rs:8:27:8:50 | UseTreeList |
|
||||
|
||||
@@ -2,5 +2,8 @@
|
||||
|
||||
fn test_use_tree() -> () {
|
||||
// A UseTree. For example:
|
||||
todo!()
|
||||
use std::collections::HashMap;
|
||||
use std::collections::*;
|
||||
use std::collections::HashMap as MyHashMap;
|
||||
use std::collections::{self, HashMap, HashSet};
|
||||
}
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
from misc.codegen.lib.schemadefs import *
|
||||
from .ast import *
|
||||
|
||||
|
||||
class LabelableExpr(Expr):
|
||||
"""
|
||||
The base class for expressions that can be labeled (`LoopExpr`, `ForExpr`, `WhileExpr` or `BlockExpr`).
|
||||
"""
|
||||
label: optional[Label] | child
|
||||
|
||||
|
||||
class LoopingExpr(LabelableExpr):
|
||||
"""
|
||||
The base class for expressions that loop (`LoopExpr`, `ForExpr` or `WhileExpr`).
|
||||
@@ -14,7 +16,6 @@ class LoopingExpr(LabelableExpr):
|
||||
loop_body: optional["BlockExpr"] | child
|
||||
|
||||
|
||||
|
||||
@annotate(Module)
|
||||
@rust.doc_test_signature(None)
|
||||
class _:
|
||||
@@ -31,14 +32,14 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(Expr, cfg = True)
|
||||
@annotate(Expr, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
The base class for expressions.
|
||||
"""
|
||||
|
||||
|
||||
@annotate(Pat, cfg = True)
|
||||
@annotate(Pat, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
The base class for patterns.
|
||||
@@ -76,6 +77,7 @@ class _:
|
||||
```
|
||||
"""
|
||||
|
||||
|
||||
@annotate(Path)
|
||||
class _:
|
||||
"""
|
||||
@@ -120,7 +122,7 @@ class PathExprBase(Expr):
|
||||
"""
|
||||
|
||||
|
||||
@annotate(PathExpr, replace_bases={Expr: PathExprBase}, add_bases=(PathAstNode,), cfg = True)
|
||||
@annotate(PathExpr, replace_bases={Expr: PathExprBase}, add_bases=(PathAstNode,), cfg=True)
|
||||
@qltest.test_with(Path)
|
||||
class _:
|
||||
"""
|
||||
@@ -135,7 +137,7 @@ class _:
|
||||
path: drop
|
||||
|
||||
|
||||
@annotate(IfExpr, cfg = True)
|
||||
@annotate(IfExpr, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
An `if` expression. For example:
|
||||
@@ -154,7 +156,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(LetExpr, cfg = True)
|
||||
@annotate(LetExpr, cfg=True)
|
||||
@rust.doc_test_signature("(maybe_some: Option<String>) -> ()")
|
||||
class _:
|
||||
"""
|
||||
@@ -167,7 +169,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(BlockExpr, replace_bases={Expr: LabelableExpr}, cfg = True)
|
||||
@annotate(BlockExpr, replace_bases={Expr: LabelableExpr}, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A block expression. For example:
|
||||
@@ -186,7 +188,7 @@ class _:
|
||||
label: drop
|
||||
|
||||
|
||||
@annotate(LoopExpr, replace_bases={Expr: LoopingExpr}, cfg = True)
|
||||
@annotate(LoopExpr, replace_bases={Expr: LoopingExpr}, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A loop expression. For example:
|
||||
@@ -224,7 +226,7 @@ class CallExprBase(Expr):
|
||||
attrs: list["Attr"] | child
|
||||
|
||||
|
||||
@annotate(CallExpr, replace_bases={Expr: CallExprBase}, cfg = True)
|
||||
@annotate(CallExpr, replace_bases={Expr: CallExprBase}, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A function call expression. For example:
|
||||
@@ -239,7 +241,7 @@ class _:
|
||||
attrs: drop
|
||||
|
||||
|
||||
@annotate(MethodCallExpr, replace_bases={Expr: CallExprBase}, add_bases=(Resolvable,), cfg = True)
|
||||
@annotate(MethodCallExpr, replace_bases={Expr: CallExprBase}, add_bases=(Resolvable,), cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A method call expression. For example:
|
||||
@@ -272,7 +274,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(MatchExpr, cfg = True)
|
||||
@annotate(MatchExpr, cfg=True)
|
||||
@rust.doc_test_signature("(x: i32) -> i32")
|
||||
class _:
|
||||
"""
|
||||
@@ -290,10 +292,11 @@ class _:
|
||||
}
|
||||
```
|
||||
"""
|
||||
scrutinee: _ | doc("scrutinee (the expression being matched) of this match expression")
|
||||
scrutinee: _ | doc(
|
||||
"scrutinee (the expression being matched) of this match expression")
|
||||
|
||||
|
||||
@annotate(ContinueExpr, cfg = True)
|
||||
@annotate(ContinueExpr, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A continue expression. For example:
|
||||
@@ -314,7 +317,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(BreakExpr, cfg = True)
|
||||
@annotate(BreakExpr, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A break expression. For example:
|
||||
@@ -343,7 +346,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(ReturnExpr, cfg = True)
|
||||
@annotate(ReturnExpr, cfg=True)
|
||||
@rust.doc_test_signature(None)
|
||||
class _:
|
||||
"""
|
||||
@@ -361,7 +364,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(BecomeExpr, cfg = True)
|
||||
@annotate(BecomeExpr, cfg=True)
|
||||
@rust.doc_test_signature(None)
|
||||
class _:
|
||||
"""
|
||||
@@ -378,7 +381,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(YieldExpr, cfg = True)
|
||||
@annotate(YieldExpr, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A `yield` expression. For example:
|
||||
@@ -391,7 +394,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(YeetExpr, cfg = True)
|
||||
@annotate(YeetExpr, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A `yeet` expression. For example:
|
||||
@@ -413,7 +416,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(RecordExpr, add_bases=(PathAstNode,), cfg = True)
|
||||
@annotate(RecordExpr, add_bases=(PathAstNode,), cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A record expression. For example:
|
||||
@@ -427,7 +430,7 @@ class _:
|
||||
path: drop
|
||||
|
||||
|
||||
@annotate(FieldExpr, cfg = True)
|
||||
@annotate(FieldExpr, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A field access expression. For example:
|
||||
@@ -437,7 +440,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(AwaitExpr, cfg = True)
|
||||
@annotate(AwaitExpr, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
An `await` expression. For example:
|
||||
@@ -450,7 +453,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(CastExpr, cfg = True)
|
||||
@annotate(CastExpr, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A type cast expression. For example:
|
||||
@@ -460,7 +463,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(RefExpr, cfg = True)
|
||||
@annotate(RefExpr, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A reference expression. For example:
|
||||
@@ -473,7 +476,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(PrefixExpr, cfg = True)
|
||||
@annotate(PrefixExpr, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A unary operation expression. For example:
|
||||
@@ -485,7 +488,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(BinaryExpr, cfg = True)
|
||||
@annotate(BinaryExpr, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A binary operation expression. For example:
|
||||
@@ -499,7 +502,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(RangeExpr, cfg = True)
|
||||
@annotate(RangeExpr, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A range expression. For example:
|
||||
@@ -514,7 +517,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(IndexExpr, cfg = True)
|
||||
@annotate(IndexExpr, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
An index expression. For example:
|
||||
@@ -541,7 +544,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(TupleExpr, cfg = True)
|
||||
@annotate(TupleExpr, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A tuple expression. For example:
|
||||
@@ -558,6 +561,7 @@ class _:
|
||||
class _:
|
||||
pass
|
||||
|
||||
|
||||
class ArrayExpr(Expr):
|
||||
"""
|
||||
The base class for array expressions. For example:
|
||||
@@ -569,6 +573,7 @@ class ArrayExpr(Expr):
|
||||
exprs: list[Expr] | child
|
||||
attrs: list[Attr] | child
|
||||
|
||||
|
||||
@synth.from_class(ArrayExprInternal)
|
||||
class ArrayListExpr(ArrayExpr):
|
||||
"""
|
||||
@@ -579,6 +584,7 @@ class ArrayListExpr(ArrayExpr):
|
||||
"""
|
||||
__cfg__ = True
|
||||
|
||||
|
||||
@synth.from_class(ArrayExprInternal)
|
||||
class ArrayRepeatExpr(ArrayExpr):
|
||||
"""
|
||||
@@ -593,7 +599,7 @@ class ArrayRepeatExpr(ArrayExpr):
|
||||
repeat_length: Expr | child
|
||||
|
||||
|
||||
@annotate(LiteralExpr, cfg = True)
|
||||
@annotate(LiteralExpr, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A literal expression. For example:
|
||||
@@ -610,7 +616,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(UnderscoreExpr, cfg = True)
|
||||
@annotate(UnderscoreExpr, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
An underscore expression. For example:
|
||||
@@ -620,7 +626,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(OffsetOfExpr, cfg = True)
|
||||
@annotate(OffsetOfExpr, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
An `offset_of` expression. For example:
|
||||
@@ -630,7 +636,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(AsmExpr, cfg = True)
|
||||
@annotate(AsmExpr, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
An inline assembly expression. For example:
|
||||
@@ -642,7 +648,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(LetStmt, cfg = True)
|
||||
@annotate(LetStmt, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A let statement. For example:
|
||||
@@ -671,7 +677,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(WildcardPat, cfg = True)
|
||||
@annotate(WildcardPat, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A wildcard pattern. For example:
|
||||
@@ -681,7 +687,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(TuplePat, cfg = True)
|
||||
@annotate(TuplePat, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A tuple pattern. For example:
|
||||
@@ -692,7 +698,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(OrPat, cfg = True)
|
||||
@annotate(OrPat, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
An or pattern. For example:
|
||||
@@ -714,7 +720,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(RecordPat, add_bases=(PathAstNode,), cfg = True)
|
||||
@annotate(RecordPat, add_bases=(PathAstNode,), cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A record pattern. For example:
|
||||
@@ -728,7 +734,7 @@ class _:
|
||||
path: drop
|
||||
|
||||
|
||||
@annotate(RangePat, cfg = True)
|
||||
@annotate(RangePat, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A range pattern. For example:
|
||||
@@ -742,7 +748,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(SlicePat, cfg = True)
|
||||
@annotate(SlicePat, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A slice pattern. For example:
|
||||
@@ -756,7 +762,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(PathPat, add_bases=(PathAstNode,), cfg = True)
|
||||
@annotate(PathPat, add_bases=(PathAstNode,), cfg=True)
|
||||
@qltest.test_with(Path)
|
||||
class _:
|
||||
"""
|
||||
@@ -771,7 +777,7 @@ class _:
|
||||
path: drop
|
||||
|
||||
|
||||
@annotate(LiteralPat, cfg = True)
|
||||
@annotate(LiteralPat, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A literal pattern. For example:
|
||||
@@ -784,7 +790,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(IdentPat, cfg = True)
|
||||
@annotate(IdentPat, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A binding pattern. For example:
|
||||
@@ -803,7 +809,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(TupleStructPat, add_bases=(PathAstNode,), cfg = True)
|
||||
@annotate(TupleStructPat, add_bases=(PathAstNode,), cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A tuple struct pattern. For example:
|
||||
@@ -818,7 +824,7 @@ class _:
|
||||
path: drop
|
||||
|
||||
|
||||
@annotate(RefPat, cfg = True)
|
||||
@annotate(RefPat, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A reference pattern. For example:
|
||||
@@ -831,7 +837,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(BoxPat, cfg = True)
|
||||
@annotate(BoxPat, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A box pattern. For example:
|
||||
@@ -844,7 +850,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(ConstBlockPat, cfg = True)
|
||||
@annotate(ConstBlockPat, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A const block pattern. For example:
|
||||
@@ -1045,7 +1051,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(ForExpr, replace_bases={Expr: LoopingExpr}, cfg = True)
|
||||
@annotate(ForExpr, replace_bases={Expr: LoopingExpr}, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A ForExpr. For example:
|
||||
@@ -1067,7 +1073,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(FormatArgsArg, cfg = True)
|
||||
@annotate(FormatArgsArg, cfg=True)
|
||||
@qltest.test_with(FormatArgsExpr)
|
||||
class _:
|
||||
"""
|
||||
@@ -1078,7 +1084,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(FormatArgsExpr, cfg = True)
|
||||
@annotate(FormatArgsExpr, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A FormatArgsExpr. For example:
|
||||
@@ -1213,7 +1219,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(MacroCall, cfg = True)
|
||||
@annotate(MacroCall, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A MacroCall. For example:
|
||||
@@ -1234,7 +1240,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(MacroExpr, cfg = True)
|
||||
@annotate(MacroExpr, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A MacroExpr. For example:
|
||||
@@ -1257,7 +1263,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(MacroPat, cfg = True)
|
||||
@annotate(MacroPat, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A MacroPat. For example:
|
||||
@@ -1367,11 +1373,13 @@ class ParamBase(AstNode):
|
||||
attrs: list["Attr"] | child
|
||||
type_repr: optional["TypeRepr"] | child
|
||||
|
||||
@annotate(ParamBase, cfg = True)
|
||||
|
||||
@annotate(ParamBase, cfg=True)
|
||||
class _:
|
||||
pass
|
||||
|
||||
@annotate(Param, replace_bases={AstNode: ParamBase}, cfg = True)
|
||||
|
||||
@annotate(Param, replace_bases={AstNode: ParamBase}, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A parameter in a function or method. For example `x` in:
|
||||
@@ -1515,7 +1523,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(RestPat, cfg = True)
|
||||
@annotate(RestPat, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A RestPat. For example:
|
||||
@@ -1545,7 +1553,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(SelfParam, replace_bases={AstNode: ParamBase}, cfg = True)
|
||||
@annotate(SelfParam, replace_bases={AstNode: ParamBase}, cfg=True)
|
||||
@rust.doc_test_signature(None)
|
||||
class _:
|
||||
"""
|
||||
@@ -1652,7 +1660,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(TryExpr, cfg = True)
|
||||
@annotate(TryExpr, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A TryExpr. For example:
|
||||
@@ -1767,7 +1775,10 @@ class _:
|
||||
"""
|
||||
A UseTree. For example:
|
||||
```rust
|
||||
todo!()
|
||||
use std::collections::HashMap;
|
||||
use std::collections::*;
|
||||
use std::collections::HashMap as MyHashMap;
|
||||
use std::collections::{self, HashMap, HashSet};
|
||||
```
|
||||
"""
|
||||
|
||||
@@ -1832,7 +1843,7 @@ class _:
|
||||
"""
|
||||
|
||||
|
||||
@annotate(WhileExpr, replace_bases={Expr: LoopingExpr}, cfg = True)
|
||||
@annotate(WhileExpr, replace_bases={Expr: LoopingExpr}, cfg=True)
|
||||
class _:
|
||||
"""
|
||||
A WhileExpr. For example:
|
||||
@@ -1864,7 +1875,6 @@ class FormatTemplateVariableAccess(PathExprBase):
|
||||
|
||||
@synth.on_arguments(parent=FormatArgsExpr, index=int, text=string, offset=int)
|
||||
@qltest.test_with(FormatArgsExpr)
|
||||
|
||||
class Format(Locatable):
|
||||
"""
|
||||
A format element in a formatting template. For example the `{}` in:
|
||||
@@ -1920,6 +1930,7 @@ class FormatArgument(Locatable):
|
||||
parent: Format
|
||||
variable: optional[FormatTemplateVariableAccess] | child
|
||||
|
||||
|
||||
@annotate(Item, add_bases=(Addressable,))
|
||||
class _:
|
||||
pass
|
||||
|
||||
1
rust/schema/ast.py
generated
1
rust/schema/ast.py
generated
@@ -727,6 +727,7 @@ class UseBoundGenericArgs(AstNode, ):
|
||||
use_bound_generic_args: list["UseBoundGenericArg"] | child
|
||||
|
||||
class UseTree(AstNode, ):
|
||||
is_glob: predicate
|
||||
path: optional["Path"] | child
|
||||
rename: optional["Rename"] | child
|
||||
use_tree_list: optional["UseTreeList"] | child
|
||||
|
||||
Reference in New Issue
Block a user