From 9cf2420c3b4d63601d8c5c74fa99ecd353895b9f Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Fri, 29 Nov 2024 14:42:25 +0100 Subject: [PATCH 1/9] Rust: restrict canonical path calculations --- rust/extractor/src/generated/.generated.list | 2 +- rust/extractor/src/generated/top.rs | 171 +++++++++++------- rust/extractor/src/translate/base.rs | 35 ++-- rust/extractor/src/translate/mappings.rs | 34 ++++ rust/ql/.generated.list | 63 ++++--- rust/ql/.gitattributes | 15 +- rust/ql/lib/codeql/rust/elements/Path.qll | 2 +- .../lib/codeql/rust/elements/PathExprBase.qll | 1 + rust/ql/lib/codeql/rust/elements/PathPat.qll | 1 + .../lib/codeql/rust/elements/RecordExpr.qll | 1 + .../ql/lib/codeql/rust/elements/RecordPat.qll | 1 + .../lib/codeql/rust/elements/Resolvable.qll | 2 +- .../codeql/rust/elements/TupleStructPat.qll | 1 + .../elements/internal/CallExprBaseImpl.qll | 3 +- .../rust/elements/internal/ResolvableImpl.qll | 2 +- .../elements/internal/TupleStructPatImpl.qll | 6 +- .../internal/generated/ParentChild.qll | 83 +++++---- .../rust/elements/internal/generated/Path.qll | 4 +- .../internal/generated/PathExprBase.qll | 3 +- .../elements/internal/generated/PathPat.qll | 3 +- .../rust/elements/internal/generated/Raw.qll | 56 +++--- .../internal/generated/RecordExpr.qll | 3 +- .../elements/internal/generated/RecordPat.qll | 3 +- .../internal/generated/Resolvable.qll | 2 +- .../elements/internal/generated/Synth.qll | 29 ++- .../internal/generated/TupleStructPat.qll | 3 +- rust/ql/lib/rust.dbscheme | 39 ++-- .../canonical_path/canonical_paths.expected | 41 +---- .../extractor-tests/canonical_path/regular.rs | 8 + .../FormatTemplateVariableAccess.expected | 10 +- .../FormatTemplateVariableAccess.ql | 12 +- ...ableAccess_getResolvedCrateOrigin.expected | 0 ...teVariableAccess_getResolvedCrateOrigin.ql | 7 + ...ateVariableAccess_getResolvedPath.expected | 0 ...tTemplateVariableAccess_getResolvedPath.ql | 7 + .../generated/Path/Path.expected | 52 +++--- .../extractor-tests/generated/Path/Path.ql | 12 +- .../generated/Path/PathExpr.expected | 12 +- .../generated/Path/PathExpr.ql | 13 +- .../PathExpr_getResolvedCrateOrigin.expected | 0 .../Path/PathExpr_getResolvedCrateOrigin.ql | 7 + .../Path/PathExpr_getResolvedPath.expected | 0 .../Path/PathExpr_getResolvedPath.ql | 7 + .../generated/Path/PathPat.expected | 2 +- .../extractor-tests/generated/Path/PathPat.ql | 11 +- .../PathPat_getResolvedCrateOrigin.expected | 0 ...n.ql => PathPat_getResolvedCrateOrigin.ql} | 2 +- .../Path/PathPat_getResolvedPath.expected | 0 ...lvedPath.ql => PathPat_getResolvedPath.ql} | 2 +- .../Path/Path_getResolvedCrateOrigin.expected | 2 - .../Path/Path_getResolvedPath.expected | 2 - .../generated/RecordExpr/RecordExpr.expected | 8 +- .../generated/RecordExpr/RecordExpr.ql | 13 +- ...RecordExpr_getResolvedCrateOrigin.expected | 0 .../RecordExpr_getResolvedCrateOrigin.ql | 7 + .../RecordExpr_getResolvedPath.expected | 0 .../RecordExpr/RecordExpr_getResolvedPath.ql | 7 + .../generated/RecordPat/RecordPat.expected | 4 +- .../generated/RecordPat/RecordPat.ql | 13 +- .../RecordPat_getResolvedCrateOrigin.expected | 0 .../RecordPat_getResolvedCrateOrigin.ql | 7 + .../RecordPat_getResolvedPath.expected | 0 .../RecordPat/RecordPat_getResolvedPath.ql | 7 + .../TupleStructPat/TupleStructPat.expected | 6 +- .../TupleStructPat/TupleStructPat.ql | 13 +- .../TupleStructPat_getField.expected | 14 +- .../TupleStructPat_getPath.expected | 6 +- ...eStructPat_getResolvedCrateOrigin.expected | 0 .../TupleStructPat_getResolvedCrateOrigin.ql | 7 + .../TupleStructPat_getResolvedPath.expected | 0 .../TupleStructPat_getResolvedPath.ql | 7 + rust/schema/annotations.py | 12 +- rust/schema/prelude.py | 2 +- 73 files changed, 583 insertions(+), 327 deletions(-) create mode 100644 rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedCrateOrigin.expected create mode 100644 rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedCrateOrigin.ql create mode 100644 rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedPath.expected create mode 100644 rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedPath.ql create mode 100644 rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedCrateOrigin.expected create mode 100644 rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedCrateOrigin.ql create mode 100644 rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedPath.expected create mode 100644 rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedPath.ql create mode 100644 rust/ql/test/extractor-tests/generated/Path/PathPat_getResolvedCrateOrigin.expected rename rust/ql/test/extractor-tests/generated/Path/{Path_getResolvedCrateOrigin.ql => PathPat_getResolvedCrateOrigin.ql} (91%) create mode 100644 rust/ql/test/extractor-tests/generated/Path/PathPat_getResolvedPath.expected rename rust/ql/test/extractor-tests/generated/Path/{Path_getResolvedPath.ql => PathPat_getResolvedPath.ql} (91%) delete mode 100644 rust/ql/test/extractor-tests/generated/Path/Path_getResolvedCrateOrigin.expected delete mode 100644 rust/ql/test/extractor-tests/generated/Path/Path_getResolvedPath.expected create mode 100644 rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedCrateOrigin.expected create mode 100644 rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedCrateOrigin.ql create mode 100644 rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedPath.expected create mode 100644 rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedPath.ql create mode 100644 rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getResolvedCrateOrigin.expected create mode 100644 rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getResolvedCrateOrigin.ql create mode 100644 rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getResolvedPath.expected create mode 100644 rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getResolvedPath.ql create mode 100644 rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedCrateOrigin.expected create mode 100644 rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedCrateOrigin.ql create mode 100644 rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedPath.expected create mode 100644 rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedPath.ql diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index ec1f2815442..8ca2c6931b1 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 272ecf2f56f35211d2449dbf55b1907d8414a8e4cceded03fd12f6f599852c73 272ecf2f56f35211d2449dbf55b1907d8414a8e4cceded03fd12f6f599852c73 +top.rs 8db75515b09f6c96beb8c2895e7495350e76557d01399de5faf6c314a45ce594 8db75515b09f6c96beb8c2895e7495350e76557d01399de5faf6c314a45ce594 diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index 73048514fda..8cdec4c9b9f 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -1671,6 +1671,60 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct Path { + pub id: trap::TrapId, + pub qualifier: Option>, + pub part: Option>, +} + +impl trap::TrapEntry for Path { + 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("paths", vec![id.into()]); + if let Some(v) = self.qualifier { + out.add_tuple("path_qualifiers", vec![id.into(), v.into()]); + } + if let Some(v) = self.part { + out.add_tuple("path_parts", vec![id.into(), v.into()]); + } + } +} + +impl trap::TrapClass for Path { + fn class_name() -> &'static str { "Path" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Path is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Path is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Path is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct PathSegment { pub id: trap::TrapId, @@ -6001,69 +6055,6 @@ impl From> for trap::Label { } } -#[derive(Debug)] -pub struct Path { - pub id: trap::TrapId, - pub qualifier: Option>, - pub part: Option>, -} - -impl trap::TrapEntry for Path { - 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("paths", vec![id.into()]); - if let Some(v) = self.qualifier { - out.add_tuple("path_qualifiers", vec![id.into(), v.into()]); - } - if let Some(v) = self.part { - out.add_tuple("path_parts", vec![id.into(), v.into()]); - } - } -} - -impl trap::TrapClass for Path { - fn class_name() -> &'static str { "Path" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme Path is a subclass of AstNode - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme Path is a subclass of Element - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme Path is a subclass of Locatable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme Path is a subclass of Resolvable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct PathExprBase { _unused: () @@ -6109,6 +6100,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme PathExprBase is a subclass of Resolvable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct PathPat { pub id: trap::TrapId, @@ -6168,6 +6168,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme PathPat is a subclass of Resolvable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct PathType { pub id: trap::TrapId, @@ -6562,6 +6571,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme RecordExpr is a subclass of Resolvable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct RecordFieldList { pub id: trap::TrapId, @@ -6684,6 +6702,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme RecordPat is a subclass of Resolvable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct RefExpr { pub id: trap::TrapId, @@ -7511,6 +7538,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme TupleStructPat is a subclass of Resolvable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct TupleType { pub id: trap::TrapId, @@ -9444,6 +9480,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme PathExpr is a subclass of Resolvable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct Static { pub id: trap::TrapId, diff --git a/rust/extractor/src/translate/base.rs b/rust/extractor/src/translate/base.rs index 003c86919b6..65b64a8b0b7 100644 --- a/rust/extractor/src/translate/base.rs +++ b/rust/extractor/src/translate/base.rs @@ -1,4 +1,4 @@ -use super::mappings::{AddressableAst, AddressableHir}; +use super::mappings::{AddressableAst, AddressableHir, PathAst}; use crate::generated::MacroCall; use crate::generated::{self}; use crate::rust_analyzer::FileSemanticInformation; @@ -53,8 +53,20 @@ macro_rules! emit_detached { $self.extract_canonical_origin_of_enum_variant(&$node, $label); }; // TODO canonical origin of other items - (Path, $self:ident, $node:ident, $label:ident) => { - $self.extract_canonical_destination(&$node, $label); + (PathExpr, $self:ident, $node:ident, $label:ident) => { + $self.extract_path_canonical_destination(&$node, $label.into()); + }; + (RecordExpr, $self:ident, $node:ident, $label:ident) => { + $self.extract_path_canonical_destination(&$node, $label.into()); + }; + (PathPat, $self:ident, $node:ident, $label:ident) => { + $self.extract_path_canonical_destination(&$node, $label.into()); + }; + (RecordPat, $self:ident, $node:ident, $label:ident) => { + $self.extract_path_canonical_destination(&$node, $label.into()); + }; + (TupleStructPat, $self:ident, $node:ident, $label:ident) => { + $self.extract_path_canonical_destination(&$node, $label.into()); }; (MethodCallExpr, $self:ident, $node:ident, $label:ident) => { $self.extract_method_canonical_destination(&$node, $label); @@ -506,25 +518,22 @@ impl<'a> Translator<'a> { })(); } - pub(crate) fn extract_canonical_destination( + pub(crate) fn extract_path_canonical_destination( &mut self, - item: &ast::Path, - label: Label, + item: &impl PathAst, + label: Label, ) { (|| { + let path = item.path()?; let sema = self.semantics.as_ref()?; - let resolution = sema.resolve_path(item)?; + let resolution = sema.resolve_path(&path)?; let PathResolution::Def(def) = resolution else { return None; }; let origin = self.origin_from_module_def(def)?; let path = self.canonical_path_from_module_def(def)?; - generated::Resolvable::emit_resolved_crate_origin( - label.into(), - origin, - &mut self.trap.writer, - ); - generated::Resolvable::emit_resolved_path(label.into(), path, &mut self.trap.writer); + generated::Resolvable::emit_resolved_crate_origin(label, origin, &mut self.trap.writer); + generated::Resolvable::emit_resolved_path(label, path, &mut self.trap.writer); Some(()) })(); } diff --git a/rust/extractor/src/translate/mappings.rs b/rust/extractor/src/translate/mappings.rs index 885055a6017..6ad8a7d1df6 100644 --- a/rust/extractor/src/translate/mappings.rs +++ b/rust/extractor/src/translate/mappings.rs @@ -170,3 +170,37 @@ impl AddressableAst for ast::Union { impl AddressableAst for ast::Module { type Hir = Module; } + +pub trait PathAst: AstNode { + fn path(&self) -> Option; +} + +impl PathAst for ast::PathExpr { + fn path(&self) -> Option { + self.path() + } +} + +impl PathAst for ast::RecordExpr { + fn path(&self) -> Option { + self.path() + } +} + +impl PathAst for ast::PathPat { + fn path(&self) -> Option { + self.path() + } +} + +impl PathAst for ast::RecordPat { + fn path(&self) -> Option { + self.path() + } +} + +impl PathAst for ast::TupleStructPat { + fn path(&self) -> Option { + self.path() + } +} diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index b0c71e3ef01..dff9541b449 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -101,29 +101,29 @@ lib/codeql/rust/elements/ParenExpr.qll b635f0e5d300cd9cf3651cfcefd58316c21727295 lib/codeql/rust/elements/ParenPat.qll 40d033de6c85ad042223e0da80479adebab35494396ab652da85d3497e435c5a 8f2febe5d5cefcb076d201ae9607d403b9cfe8169d2f4b71d13868e0af43dc25 lib/codeql/rust/elements/ParenType.qll e1f5695b143c97b98ccdb460a5cf872461cfc13b83a4f005f26c288dc0afae10 1164f8efae7f255925411bddb33939fab0bf1c07955a16fef173b3f4675d09ae lib/codeql/rust/elements/Pat.qll 56211c5cb4709e7c12a2bfd2da5e413a451672d99e23a8386c08ad0b999fd45c b1b1893a13a75c4f0390f7e2a14ee98a46f067cfdc991a8d43adc82497d20aff -lib/codeql/rust/elements/Path.qll 94869df09b929c4a60bae42b7e3a66c007f41078c08b7d9c6defb705b953ce8e eb317f75b89978d41fd3b166c7e3d871da4c04b3e17afbbcd0a5d73881e0d1d9 +lib/codeql/rust/elements/Path.qll 16264a9c978a3027f623530e386a9ad16541305b252fed5e1bedcfbe1d6475d5 8c21063c7f344ce686342e7c12542fec05004e364681f7a31b65f5ee9263a46d lib/codeql/rust/elements/PathExpr.qll 906df1d80c662b79f1b0b0428c39754b7f8dbcb2234919dd45dd8206a099dd36 1d6015afab6378c926c5838c9a5772cfcfeedf474e2eeca3e46085300ff8d4e1 -lib/codeql/rust/elements/PathExprBase.qll bb41092ec690ae926e3233c215dcaf1fd8e161b8a6955151949f492e02dba13a b2257072f8062d31c29c63ee1311b07e0d2eb37075f582cfc76bb542ef773198 -lib/codeql/rust/elements/PathPat.qll 6897e69bcb24b56d39ede796cf5767988dcd5741e02333fa8495dd7c814f771a 2a011fb92f17e4b4ff713e6d29f591054dfede22a9aaa006e67fca2c23ab76bf +lib/codeql/rust/elements/PathExprBase.qll db8702a2e2cec7c1daaad38649c27b657759103ca451dfa9d34b9be873fdc0af d770e983fb55e06f3fcee6b7511cf5d4ed4c4f6a18d8b1d1f14553cdbe8666df +lib/codeql/rust/elements/PathPat.qll 9d0b29b964bfe3a90af4c9930868a3d2046d2210a1575f9b9af84f6fd3fccbab 21748a5bd01d5531c846e6b7c1cc9fddf4adc0c959843e668df200a2490a5f94 lib/codeql/rust/elements/PathSegment.qll 9560551cf8b65e84705e7f302e12b48330e048613129e87c0f65a7eb297a6cc3 3aa75a5fd81f8ea32bd2b4bf0c51c386de57cbe9ab035fe3ec68ad7fcf51b375 lib/codeql/rust/elements/PathType.qll 257ede178bb74ebdb8e266ebaa95082e7fb7cc8d921ef476f4df268ee8a1366c c48f6e04a8945a11f965e71819f68c00abc53a055042882b61716feda3ca63ae lib/codeql/rust/elements/PrefixExpr.qll 107e7bd111b637fd6d76026062d54c2780760b965f172ef119c50dd0714a377d 46954a9404e561c51682395729daac3bda5442113f29839d043e9605d63f7f6d lib/codeql/rust/elements/PtrType.qll b137f47a53e41b3b30c7d80dbdd6724bf15f99530ca40cc264a04af5f07aa878 b2ffdf739bfb7564d942fe54409834a59511c0b305b6d5b2219a8ee0ef594332 lib/codeql/rust/elements/RangeExpr.qll 43785bea08a6a537010db1138e68ae92eed7e481744188dfb3bad119425ff740 5e81cfbdf4617372a73d662a248a0b380c1f40988a5daefb7f00057cae10d3d4 lib/codeql/rust/elements/RangePat.qll b5c0cfc84b8a767d58593fa7102dcf4be3ff8b02ba2f5360c384fa8af4aac830 cc28399dd99630bfa50c54e641a3833abe6643137d010a0a25749d1d70e8c911 -lib/codeql/rust/elements/RecordExpr.qll eb402960c5c6a14d0a0ffebd61a352b59b5d1cc1c2531cacd54754310a812d77 415c93384e63cf38003dde987715554ebf45fc32ba03bc5fd78b8d2501812de1 +lib/codeql/rust/elements/RecordExpr.qll d368aaf18319c0560c04d0438caf64b3b7aad3aa0cf4bbb643bfbb58d6d71091 44323e15b5a6fab187e846abe9cb530c6472ed673993c5e3679279b1286792da lib/codeql/rust/elements/RecordExprField.qll edac04146849e2aeca27e7bbb896c21aa2e2b15736b1e8a06ac51ab01433b3ac 7c062bd6d5dd5b1d972450fb0b3272cd9b45f94ccd668c3bd4347e2dce3279ed lib/codeql/rust/elements/RecordExprFieldList.qll 672c3854cb84090c8a2e9311c43448016dc2614ecbf86dbe404156304674e38f 01ae0ffca0bf640c61120e36fcf2c560555f4aabbd49ddce6f5c1a3561dbfc31 lib/codeql/rust/elements/RecordField.qll 9c462033cc889756876cb3d2a07e4f0d9a67064cf188cdd68e08ab21e5edc459 437254bbf6537f1a575ae344c2e23ffad7138776db8f7ebf90026c13886a2638 lib/codeql/rust/elements/RecordFieldList.qll cebab3fba41221e61cda801070a7f414b62b4fbcf2206e35462c0da35ad75c3f db092d47eea871d61541b9711d7139a99394e0ed83901a8ae60f03dfa8ed722f -lib/codeql/rust/elements/RecordPat.qll a210d700e710107100fedad1098fb789056a0c0b8dbc11de2b242877e692ec20 3efa12d7bfa0da7c09a42b2b43c50ff3985c55676db7f3be2c771765d81f9a10 +lib/codeql/rust/elements/RecordPat.qll bb21f25373afd03232f8e2977134b6a10ac525f0bd654bbf95713b964b99ba0f 28313e566c86d09ae3b60df538a3c7561f73c02b8ac93eaa5ff9914b2c9b241c lib/codeql/rust/elements/RecordPatField.qll 7487461887e82bcf224b02628dfc64457121ab17e731e2dc7aa7e731ab16c02f f2018e55722245eb4273fb067242aaa503c43f91671a55b3a4bb51fe7bc0a03c lib/codeql/rust/elements/RecordPatFieldList.qll c3198c997f389ce95db377ca40ac69a1448f120093f37ab1c92a5a3f1f6aa0d4 9db36d274f1ec77c442ae7e38f940a65c9a92f1541f66140188b226965851535 lib/codeql/rust/elements/RefExpr.qll 91a0d3a86002289dc01ffbe8daca13e34e92e522fbb508241a9d51faf1d4a9d2 b6e63d8e6f8956d2501706d129a6f5f24b410ea6539839757c76ba950c410582 lib/codeql/rust/elements/RefPat.qll fe076bdccb454111b38f360837d180274ba8a003b4cffe910b5197cd74188089 2604c8bb2b0b47091d5fc4aa276de46fe3561e346bd98f291c3783cef402ba06 lib/codeql/rust/elements/RefType.qll 5dc6012188d5baf36cd7bf0ebc127e28e98862a3f91ea4df2f9b9c962f3a395d ddb06ebe7fb92ad7bbe86cf182270e8494b74edf91b8c841aaf7ba932e5092ac lib/codeql/rust/elements/Rename.qll 55fa06145f2160304caac0a5ce4cf6a496e41adfd66f44b3c0a1d23229ed8ce0 80262f0abf61749cdf0d5701637db359960f5404ad1dbfdd90f5048d2e7c315d -lib/codeql/rust/elements/Resolvable.qll 213c0c157541002ddd61cc76cdc11386819aa59dff0a81780474cccb6b7fb211 cdcf807587f887493888341a1b6f9bed202b80b37cacc77041a256b05ff4d3d1 +lib/codeql/rust/elements/Resolvable.qll 550d516d55b2c10e6e2afd0b9df7434448405ac8a84c4ded8b56fa1173612d32 0b59f31f411a14dd4eb0fe9df5483e4a00501a480bde6db9e6a499b9c0a57184 lib/codeql/rust/elements/RestPat.qll a898a2c396f974a52424efbc8168174416ac6ed30f90d57c81646d2c08455794 db635ead3fa236e45bbd9955c714ff0abb1e57e1ce80d99dc5bb13438475adbf lib/codeql/rust/elements/RetType.qll 36ea39240a56c504d94d5487ea9679563eef3dfe0e23bf42d992d1ab2b883518 2fe5b6f62a634c6aa30a1ecd620f3446c167669cf1285c8ef8dd5e5a6ef5fc71 lib/codeql/rust/elements/ReturnExpr.qll b87187cff55bc33c8c18558c9b88617179183d1341b322c1cab35ba07167bbdb 892f3a9df2187e745c869e67f33c228ee42754bc9e4f8f4c1718472eb8f8c80f @@ -145,7 +145,7 @@ lib/codeql/rust/elements/TupleExpr.qll 561486554f0c397bc37c87894c56507771174bfb2 lib/codeql/rust/elements/TupleField.qll e58d024fc41519b559eef36cf6081d03a786b05357e4322e7046092131ea508f cad861b23fb4cdf2fbe90595de0e4776f1db9b69c3f3825221e475bc92895351 lib/codeql/rust/elements/TupleFieldList.qll 73397eef1cf8c18286b8f5bb12fbdc9bb75eee3b7bd64d149892952b79e498a3 13ac90f466ab22e5750af9e44aff9605b9e16f8350b4eaecff6a99e83d154e25 lib/codeql/rust/elements/TuplePat.qll 028cdea43868b0fdd2fc4c31ff25b6bbb40813e8aaccf72186051a280db7632e 38c56187971671e6a9dd0c6ccccb2ee4470aa82852110c6b89884496eb4abc64 -lib/codeql/rust/elements/TupleStructPat.qll 16a3f10992db62cc6630dc962a2a0d243c41b8aca064d6cb6c82a2f4e6987a12 c2b4c14567ee2dd65e0b643c9d18dfe5098fb3bd4ed45dcc825065bfa7c7c02d +lib/codeql/rust/elements/TupleStructPat.qll 743022ff471131aa58cd8ff131eef1568400da0ddefa5dbab1609a7ce00797d7 c6ddf777c3ee3a0f4d55c42f3af6a01e190a1e8892237c6e85c9ae65c84e39f3 lib/codeql/rust/elements/TupleType.qll b5c798f7c9b08c8a6cc0a57fc5c36d714e70d5e955a9e87b6b309c18365d7596 ebea533ab126392344d080da1bc9efabcabb5397e93c9d213ffc71a61bb8d47c lib/codeql/rust/elements/TypeAlias.qll 64780697f5869266345d040fdaee05c62b8670b9b5c6369692f9a9dc646986fc afcc7617d0e2e16d92d2a53c3e6661fd184bf5cf21b154f121dbf4d3b7ab30e6 lib/codeql/rust/elements/TypeArg.qll 39aea9a9f0b74e8b90e957dbc3ce593cbdb1d2e0d9320428ce2e9cbfcb772e53 f1f2612633de9f534faf76c368b6154a8dc20feb9297262fcb10a8f192aa2e02 @@ -370,7 +370,6 @@ lib/codeql/rust/elements/internal/TupleFieldListImpl.qll ec17ddfe1d03210b7737f9c lib/codeql/rust/elements/internal/TuplePatConstructor.qll 2a5e83ad5b8713a732e610128aeddf14e9b344402d6cf30ff0b43aa39e838418 6d467f7141307523994f03ed7b8e8b1a5bcf860963c9934b90e54582ea38096a lib/codeql/rust/elements/internal/TuplePatImpl.qll 4adb38f0f8dae4ff285b9f5843efb92af419719a7549e0ff62dc56969bd3c852 3f622130771d7731ed053175a83b289bab1d1f5931526c4854923dbcec7e43f1 lib/codeql/rust/elements/internal/TupleStructPatConstructor.qll 9d68f67a17a5cec0e78907a53eccfa7696be5b0571da4b486c8184274e56344a 3ffa29f546cd6c644be4fecc7415477a3a4dc00d69b8764be9119abe4c6d8b9e -lib/codeql/rust/elements/internal/TupleStructPatImpl.qll 896f001d82938bd018516a2b59ba5ad76350edb6b9747ed2ef5b96760aa16388 0552f9c0361d14be9896cbcfda17d8884d03a82c4f23c511a8de77fe71cfbb9f lib/codeql/rust/elements/internal/TupleTypeConstructor.qll 88eaec829cd4dcc6a152c7a335b1d365702ef410e46d9c04806fe53f06325b23 044fd0aca067bae82eb8ac448b7bcc66bc736e7e0ab8b770ee126381888fac3d lib/codeql/rust/elements/internal/TupleTypeImpl.qll 4d570a1d6c3d69d8f62f125c71f67dd90e982801905716d50292f2e652156948 1dcefae60448b21f85d46d252e314d67a9f2a90171e56351e08e2bc0a4077fb8 lib/codeql/rust/elements/internal/TypeAliasConstructor.qll 048caa79eb7d400971e3e6d7e580867cbee4bd6b9d291aafac423aa96c321e76 d1d1e33a789ae6fa1a96af4d23d6376b9d82e14e3cbb777963e2d2cb8b22f66d @@ -512,12 +511,12 @@ 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 ce24b8f8ecbf0f204af200317405724063887257460c80cf250c39b2fdf37185 e7c87d37e1a0ca7ea03840017e1aa9ddb7f927f1f3b6396c0305b46aeee33db6 lib/codeql/rust/elements/internal/generated/ParenType.qll 9cc954d73f8330dcac7b475f97748b63af5c8766dee9d2f2872c0a7e4c903537 c07534c8a9c683c4a9b11d490095647e420de0a0bfc23273eaf6f31b00244273 -lib/codeql/rust/elements/internal/generated/ParentChild.qll db7a782f11a14305acc666c865118475e2d324d2bf5d4110b157e1d488b62b75 3b5d31528d0baa0ceee139097e93461d18503797a1507288dc43428f378500e2 +lib/codeql/rust/elements/internal/generated/ParentChild.qll 03c1d8e0c0d0f7e34164f6ede37bdc744790fa25b252b5b34b006c48735daef6 7675198b227e5cb357cabe6a7622f461103e3829c0135560b37013c2a914edb2 lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 -lib/codeql/rust/elements/internal/generated/Path.qll 4c1c8e840ed57880e574142b081b11d7a7428a009f10e3aa8f4645e211f6b2e0 989668cf0f1bdee7557e2f97c01e41d2a56848227fed41477833f5fc1e1d35f6 +lib/codeql/rust/elements/internal/generated/Path.qll bf6a86e7fcb7164624cc070dcce86d2bda50a2516b95115b87d0ebb5596e50a1 fd7a9ad4034cdebe8dfe495619c46f464630d38195313072e0bd904061b0fb00 lib/codeql/rust/elements/internal/generated/PathExpr.qll 2096e3c1db22ee488a761690adabfc9cfdea501c99f7c5d96c0019cb113fc506 54245ce0449c4e263173213df01e079d5168a758503a5dbd61b25ad35a311140 -lib/codeql/rust/elements/internal/generated/PathExprBase.qll d8218e201b8557fa6d9ca2c30b764e5ad9a04a2e4fb695cc7219bbd7636a6ac2 4ef178426d7095a156f4f8c459b4d16f63abc64336cb50a6cf883a5f7ee09113 -lib/codeql/rust/elements/internal/generated/PathPat.qll 98c9938d6a359fd717829b196eb09701d2c798e18c1f43fa7b2a9145afdf6c19 caba2e629cae08682baac90a76ae9a48cda2d7d6f9c23d506fa0ff3f292978a4 +lib/codeql/rust/elements/internal/generated/PathExprBase.qll 696f580d56804c000983cd839671f0d0d573a9d3dbb151f500e4fe3bf900320b ebae99d1541e0d4e519599b2c5e4d734c20b7ed7ba1dbe1772f59ad7bb2c9f0f +lib/codeql/rust/elements/internal/generated/PathPat.qll 551864a9ba7d60b5662044578f0e12e6995c71710d75d8955eec2d7ab52e4d44 fedd7249e7f00229aa8632154fce2c6f1a37e017f9d4d53a5d309ba40e0c22a5 lib/codeql/rust/elements/internal/generated/PathSegment.qll 0fa07886deb0fc4d909d7edf691238a344f2739900aafb168cbac171eb1729a8 8f4bb418d8bea5e40128a87977c57d0a9183d06d111601ad93130c8615c11465 lib/codeql/rust/elements/internal/generated/PathType.qll df6fd322ba0d99d6cb315edce8dbf099b661b84fdfcc3ad629fdd1fd066c1986 e11c8615cd7b02034b47b58f30a7b6fcbc6d33ec53303288dfd34d9a25f5a186 lib/codeql/rust/elements/internal/generated/PrefixExpr.qll c9ede5f2deb7b41bc8240969e8554f645057018fe96e7e9ad9c2924c8b14722b 5ae2e3c3dc8fa73e7026ef6534185afa6b0b5051804435d8b741dd3640c864e1 @@ -525,20 +524,20 @@ lib/codeql/rust/elements/internal/generated/PtrType.qll 40099c5a4041314b66932dfd lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll ea294a3ba33fd1bc632046c4fedbcb84dcb961a8e4599969d65893b19d90e590 ea294a3ba33fd1bc632046c4fedbcb84dcb961a8e4599969d65893b19d90e590 lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll efd93730de217cf50dcba5875595263a5eadf9f7e4e1272401342a094d158614 229b251b3d118932e31e78ac4dfb75f48b766f240f20d436062785606d44467b -lib/codeql/rust/elements/internal/generated/Raw.qll 7de290d66bd594f4c5b5a296502792e803e9f1084bb2616d9774196e33b16c87 28150fdd3cff3bb49b407f0c2119602be13e78cbb1f8fd749edd31f5d9772f7a -lib/codeql/rust/elements/internal/generated/RecordExpr.qll eb6cb662e463f9260efae1a6ce874fa781172063b916ef1963f861e9942d308d 1a21cbccc8f3799ff13281e822818ebfb21d81591720a427cac3625512cb9d40 +lib/codeql/rust/elements/internal/generated/Raw.qll b6bfb4c58f879143b78546b9a1f657876a245facdd01f7dd944825ca9dcf3464 867f32b72030b2b234f818e07b55abc3a3b516c91162dda736b8bc761c16afd6 +lib/codeql/rust/elements/internal/generated/RecordExpr.qll 57a25e78a1e501fa6e2876b8412056fb9a50fed79645542e420789333049335e 5f3692fe36d3590ddbb4b6228adf17528a0ab91057940bd9faac000ae735bec1 lib/codeql/rust/elements/internal/generated/RecordExprField.qll 7e9f8663d3b74ebbc9603b10c9912f082febba6bd73d344b100bbd3edf837802 fbe6b578e7fd5d5a6f21bbb8c388957ab7210a6a249ec71510a50fb35b319ea1 lib/codeql/rust/elements/internal/generated/RecordExprFieldList.qll 179a97211fe7aa6265085d4d54115cdbc0e1cd7c9b2135591e8f36d6432f13d3 dd44bbbc1e83a1ed3a587afb729d7debf7aeb7b63245de181726af13090e50c0 lib/codeql/rust/elements/internal/generated/RecordField.qll 9f7840e1a2a194d5ed1d5201ab483eb01129849d49392581e0328bbc0934305c 0e019b5b8fe91bc96c7c07933c766d8a09c066d48ed96f24ae3dad303c00585e lib/codeql/rust/elements/internal/generated/RecordFieldList.qll d7bb2677338cf420b0d6371aeec781aacc2272c73413ea96b7418177ad149fb9 5ef52074b9f4ec31e7422b70efdb2e650d673b2625efdfec18a4e48c30e35cf6 -lib/codeql/rust/elements/internal/generated/RecordPat.qll f5f9904fcd8b8fa5fe65b46a68f830021a5e4a68f95ff403151565c3ec770477 56294ed2ff753d8be7742a501b15b5f3f5f20afe0f8171ee6771d049f26489e4 +lib/codeql/rust/elements/internal/generated/RecordPat.qll 0431a89f30da9dff98b850998d58fcf4d7b475f503e9a9eddf3576965514d22a eb06e4b716f6bc4aed962d609a08679a336cfd375fbd34b2c9fce3f4642ed385 lib/codeql/rust/elements/internal/generated/RecordPatField.qll f17b1aa265091fd8309fd90d5c3822d170870e304f160225327de5a844a9aed4 0458e39dbe88060b4b664692cf0b41ebf4364de268d9417658c14c883c9c1b33 lib/codeql/rust/elements/internal/generated/RecordPatFieldList.qll 08d4740bbb519f15ab20b694b3c45e396a2a59cce0f68fa4b9698348784cae43 99919809607ae61c707f591ee609c50bcfb90d5b4f9c263f6b8e78658d21b605 lib/codeql/rust/elements/internal/generated/RefExpr.qll 7d995884e3dc1c25fc719f5d7253179344d63650e217e9ff6530285fe7a57f64 f2c3c12551deea4964b66553fb9b6423ee16fec53bd63db4796191aa60dc6c66 lib/codeql/rust/elements/internal/generated/RefPat.qll 5c4d908f851d89f42cf765007c46ac4199200f9b997f368d5b0e2a435efa82cd 42fd637bc98b5a9275386f1c5fb3ae8c4681987289a89b060991416a25131306 lib/codeql/rust/elements/internal/generated/RefType.qll 3603a3e000acc25c5e675bd4bc4a5551b8f63851591e1e9247709e48d1769dc5 91bea4a1d5ef0779d575567253cd007157d3982524e63a7c49c5cae85cb42e5f lib/codeql/rust/elements/internal/generated/Rename.qll d23f999dab4863f9412e142756f956d79867a3579bd077c56993bdde0a5ac2f1 9256c487d3614bf3d22faa294314f490cf312ab526b8de0882e3a4a371434931 -lib/codeql/rust/elements/internal/generated/Resolvable.qll c038fa24b121ee3e7f6060bce639e7483ea1a14bb552e459b6c67663732dfd6c 4025f2ef318793913e6cfc5d8984e538f402bc062865dcb5496563bec64a2ea9 +lib/codeql/rust/elements/internal/generated/Resolvable.qll 5579fbd90b106c36828b713b6344c5547d3e449078702efa43b21400f69a1aa8 6ad7f9a0285eb4c69c62de7f23ac1da517f3d468407547685d6607d90fd30641 lib/codeql/rust/elements/internal/generated/RestPat.qll b3a4206e68cf67a0310a466721e7c4b3ab855e65490d589d3d856ad333b3d5e8 30b471bec377784f61d73ef93e74fc0dcec7f512ac4b8791d1ca65f2bcea14b8 lib/codeql/rust/elements/internal/generated/RetType.qll a26860cd526b339b9527c089d126c5486e678dd080e88c60ea2fe641e7d661fd a83c1ce32fd043945ad455b892a60c2a9b6a62d7a5aadf121c4b4056d1dfb094 lib/codeql/rust/elements/internal/generated/ReturnExpr.qll c9c05400d326cd8e0da11c3bfa524daa08b2579ecaee80e468076e5dd7911d56 e7694926727220f46a7617b6ca336767450e359c6fa3782e82b1e21d85d37268 @@ -551,7 +550,7 @@ lib/codeql/rust/elements/internal/generated/Static.qll 5fbd6879858cf356d4bdaa6da 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 65873a7fa44e223edc5e76cc768591a036eb2550960a6b6882476f43a01aefba 3e08e2bdfba53ae26d8f48f2d240b92b44c603f03105518c37a963e0cbe63e3f +lib/codeql/rust/elements/internal/generated/Synth.qll 1aeee823f44fe6ee94ca8dcace6b6cae952be9fe3f50b4c500a392d01139f322 2cdd764b8c508e8a8288368fc8ac729c4469f08304711960de6ef9ec72434942 lib/codeql/rust/elements/internal/generated/SynthConstructors.qll e929c49ea60810a2bbc19ad38110b8bbaf21db54dae90393b21a3459a54abf6f e929c49ea60810a2bbc19ad38110b8bbaf21db54dae90393b21a3459a54abf6f lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b lib/codeql/rust/elements/internal/generated/TokenTree.qll 8577c2b097c1be2f0f7daa5acfcf146f78674a424d99563e08a84dd3e6d91b46 d2f30764e84dbfc0a6a5d3d8a5f935cd432413688cb32da9c94e420fbc10665c @@ -562,7 +561,7 @@ lib/codeql/rust/elements/internal/generated/TupleExpr.qll 75186da7c077287b9a86fc lib/codeql/rust/elements/internal/generated/TupleField.qll d2580e046a576a1a7669463956c929912e383de304854a86eea5e45807a0a882 b41cbc48fcbb56543705e6bf708b72156307c71735d2ed42b97d8bf3c1099dd1 lib/codeql/rust/elements/internal/generated/TupleFieldList.qll 9d4981d04c2ee005e41035b9699f03bff270c4e0515af5482d02e614a0b1a875 4e60b857fbcb668fa1a001e0eff03f1aa3a7465d32ce68e23544b705fa54fc5d lib/codeql/rust/elements/internal/generated/TuplePat.qll d61163a380f3f2c1709080e2df69a90764509af060e607e27e832862e4dae18c 108b7db493a21fe1fa0db99fceee952aabb0a128eac41e050877ab9136407403 -lib/codeql/rust/elements/internal/generated/TupleStructPat.qll 87e0acfeb51d48c55648d5af783f5ea006aaeccce990ba26458c6935fbdf7c11 7c761e66ddacb51307e653c6ad45bec3fba8315049fbe6c4503ed19241204d41 +lib/codeql/rust/elements/internal/generated/TupleStructPat.qll 987745c3c58df38a41f14fce1b59ee82859de7706680f23e52010937fc4646ee 91446a75fd63af87566ff347a7c25c3f6c9cbd75c0d72bdc99590a1af27e8ef4 lib/codeql/rust/elements/internal/generated/TupleType.qll 7fae8e881157a24c4ce4f960269ba8010e227a81d3055b571f861f7196f868e2 18085a19a102df8e2cded938b49709225e89f0ce68b4a003310647bb259a6bd3 lib/codeql/rust/elements/internal/generated/TypeAlias.qll af02bb172b6f2d7f5eab8645a5a219eee8a4bbc445838f5739f18ba217c7e608 6d871471d673adae99c8b146f6f7ab204f24d52b5013b4582037a42b279c9f05 lib/codeql/rust/elements/internal/generated/TypeArg.qll fe4441b3faa44e542c43a85353347df23d3f74da0c4b17cb0fdc60f5aca9dee7 1473d044e979e7cb6628525ffd454549cd8a37560488c695f534243946cf83bc @@ -726,7 +725,9 @@ test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getFormat.ql 02d3fa test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getTemplate.ql c912ac37275cbe7b3b29607bed1a3190c80779436422c14a475113e1bfd91a54 ef90f67a9b952a38ce557b1afbf0b5ce8551e83ddfaad8309a0c9523e40b5ea7 test/extractor-tests/generated/FormatArgsExpr/FormatArgument.ql 7a7ee3a3322b4af8cb3b525cfed8cc9719d136ea80aa6b3fb30c7e16394dd93f 5aa8a77d7741b02f8ceb9e5991efa4c2c43c6f1624989218990e985108dae535 test/extractor-tests/generated/FormatArgsExpr/FormatArgument_getVariable.ql 7bd4ec3dde2ef0463585794101e6cc426c368b0e4ab95fbb1f24f8f0a76cf471 e7b01e8b21df5b22c51643e2c909c6fc4ca96fda41b3290c907ba228abe8669b -test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql 2793ba1ff52182dab992d82d3767a000928f6b2fbfdb621349cafc183f0d2480 c3777d03214f7feb9020de3ce45af6556129e39e9b30d083de605b70ab9a0a12 +test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql f1b727be65d0563c8dffab61248a1b9a59b221fdaae28d3a3fbde3fb17592f5b dbf2395213d261bcf01c3258ab51f073e7934d58af5e2044b64292ed8f71f9a4 +test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedCrateOrigin.ql f7288c9be7b31a6c78da9e2f4e774522013c2db8ff457dfb5edced009b65ebdd 58ea795ccf649f733c995c49da4680f68599d58f466cb63415a12f4cc9d0ab11 +test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedPath.ql 56a0347a705b5719a97f520b2c0777c97e73bc2d977dc5d00910679950eae5ca 1ef63883dd83a22f56f226348e8fb9bf72817df19ff2708a4559a5f7b8a2855a test/extractor-tests/generated/FormatArgsExpr/Format_getArgument.ql 26d592398a17795427b5b6b51ff4a013ee15c31443e732a000baca5f2e65acca 7940a864b84b89e84d7fb186599cb8b6bcbead7141c592b8ab0c59fcd380d5fb test/extractor-tests/generated/Function/Function.ql c1c2a9b68c35f839ccd2b5e62e87d1acd94dcc2a3dc4c307c269b84b2a0806e6 1c446f19d2f81dd139aa5a1578d1b165e13bddbaeab8cfee8f0430bced3a99ab test/extractor-tests/generated/Function/Function_getAbi.ql e5c9c97de036ddd51cae5d99d41847c35c6b2eabbbd145f4467cb501edc606d8 0b81511528bd0ef9e63b19edfc3cb638d8af43eb87d018fad69d6ef8f8221454 @@ -895,12 +896,16 @@ test/extractor-tests/generated/ParenPat/ParenPat.ql 565182ccd81a9b420911b488c083 test/extractor-tests/generated/ParenPat/ParenPat_getPat.ql 96f3db0ec4e71fd8706192a16729203448ccc7b0a12ba0abeb0c20757b64fba1 0c66ba801869dc6d48dc0b2bca146757b868e8a88ad9429ba340837750f3a902 test/extractor-tests/generated/ParenType/ParenType.ql 81c8ad667397ce36157941abd9b879e9305a440018853af4528eb737ae4d2935 3ef3b86203b0143be2d7f7f4833f55fd6c226cb9205e3c1940b6c2a1371622f3 test/extractor-tests/generated/ParenType/ParenType_getTy.ql 41dd6605e7b348618156712b559e2f1b6aac02d6c727e8cbf8653530794ec969 30ac6611c730e76cfb75f98efcf817783a50cec0cf3b3197459d7642f74dde85 -test/extractor-tests/generated/Path/Path.ql f17c1c4d23c0d5e9776cee84444f6ee7445de88afbc1f26c34b96e13ab618158 89499cb0f63b3634d6b5e2b8c4a13bd4401ce82e54af0ab46e41a34b0288eeb9 -test/extractor-tests/generated/Path/PathExpr.ql b9696cd7ad9f3874e4bc4b1b9c77f42f06ab6c61b77fb641458da63667087b9b db84a7a8dd05e30ff80733af01f08d43ff031bb4b3e3af06332a73ba7e7bbc43 +test/extractor-tests/generated/Path/Path.ql 2bdcd99b3b5ffc83ac47d8cc27a4561d616bcf06844f0c452c699cd10ee640ca 5a7d7ffb8b0c04d6a8cbb2a953761df8561b796c4372bef1bd55c359b2f19911 +test/extractor-tests/generated/Path/PathExpr.ql 7716664d4f2254456df9d0f44836e761df60c96133d484cbda39e6cbb3152610 4ee3dd2b9fb1f223de0151db71cb623e93dea9afec125222f91e2bc02173173d test/extractor-tests/generated/Path/PathExpr_getAttr.ql 2ccac48cd91d86670c1d2742de20344135d424e6f0e3dafcc059555046f92d92 9b7b5f5f9e3674fad9b3a5bcd3cabc0dff32a95640da0fce6f4d0eb931f1757d test/extractor-tests/generated/Path/PathExpr_getPath.ql e7894071313a74166bdd31d7cd974037fcd5a7f0e92d5eec42833266196eb858 46a06e8a1207e7a0fa175cd4b61068e5fd6c43b5575b88986409f0ac2be64c51 -test/extractor-tests/generated/Path/PathPat.ql 823732954a5882e33a37bd0bf0cafb2cec51659a5203a4831eec2516da0e49fa 54001149718a9ca15d8c0d4be63f3fe00a9f0d44fa1309e2f605d7932355ea5d +test/extractor-tests/generated/Path/PathExpr_getResolvedCrateOrigin.ql a68a1f0d865d10c955f7ab1fd7614b517e660553b65fabb9daa8f302adbc2602 c47480d6440ae63be27d8158a35536a8d9051817dec1521cdcab297ddb52e1ae +test/extractor-tests/generated/Path/PathExpr_getResolvedPath.ql dfa55fe480da0df37670660fc1c54b6c38d47365353bc9d4f662183b33d4e80f 1b18329a7b60805fc073df3149c48f39aa66924d7eefedecbca36a2b170a7fbe +test/extractor-tests/generated/Path/PathPat.ql 6b9d973009f1b4963c7c83b0f5051eda7a76c8fb4a789217b4a25cbab0cdb274 57f0621dd3657b6f4630d5406816effcc6bc1b03361aa12e118e807e28e9e71b test/extractor-tests/generated/Path/PathPat_getPath.ql 6c0c71c80a6e631ea7775ec8660b470ff6b264bab14a399606cf113b1fb190fc 8e34cbb4d064db929e94652e1901ec4f26affa71e30e556b7acdff71dd622cbb +test/extractor-tests/generated/Path/PathPat_getResolvedCrateOrigin.ql f690fd9a8773e7c73b70f2d64ee919fef8eee243c5a315c4a6d2713d43ea0e43 f37817427c36cec14a2e07f99d3a32f37f3f27a8eafdf170749ec2780054729b +test/extractor-tests/generated/Path/PathPat_getResolvedPath.ql 55df4541a7b0e82198acfcedd7dc99eb564908270e4fb2b032bf05e40fba6fef a5932d884903da901263f88644c8585a45045190d7204f630506c5aece798288 test/extractor-tests/generated/Path/PathSegment.ql efc39cea1b4c0b2b0da6434136334430d074699f84124d6bcf94c24aa854dc64 c0a4bd60c67665c058ca22a59e535e925fdb00dec95ffc5c71697fb0ed78a329 test/extractor-tests/generated/Path/PathSegment_getGenericArgList.ql 8f6e67b3e316309f20e21d7e7944accf66b0256b76fa50ee9a714044c6ec8cea 15f10a701fc4d3f9fd6734da90790cdbc8a1ddd57bf52695740acedcb2e6e485 test/extractor-tests/generated/Path/PathSegment_getNameRef.ql 799d284e2f9267d6bbe67aa7035e525ef347dc74cb3e2180e7b2171b5cb49674 592130bc2358989536abf62e8a261272c851483ede4f19783f7d61ffc1803e4b @@ -913,8 +918,6 @@ test/extractor-tests/generated/Path/PathType.ql cb67b05cf7e4f32cbd46ac89a15f6eaf test/extractor-tests/generated/Path/PathType_getPath.ql 7043c7939e4f835e4b2c7e3e207637c362d7a9dbdba0151b38c873fdaf43e7a5 ee2aad1b4fb2b00e1a5d39387848aa164a39e3cd49141f07c175b205c8451bb1 test/extractor-tests/generated/Path/Path_getPart.ql 8aa45a0b58203ef1177166efbe1c2851faf4b4c9a453c83137f0c9298badcdbf b82d490d9b3a8237487cd5da8b3b6fc4aa477977b332a5c6539b3cd4e6d5b45b test/extractor-tests/generated/Path/Path_getQualifier.ql 9af95e22cdf3a65da6a41d93136aef4523db5ce81d38f6ed4bc613f1c68784d0 3102d9241a417a92c97a53ac56a7a8683463f1adc7a593cda1382c0d25b3f261 -test/extractor-tests/generated/Path/Path_getResolvedCrateOrigin.ql 7c0ff524595514630de4178028260d4832bfc4f57bfddec9f8e72a6c6dbf241c 55e617380476c183ef9259199d2cfd551b07466e94bc452c4723754d0c82691b -test/extractor-tests/generated/Path/Path_getResolvedPath.ql 20c8977781dfe687d5db03290612179cf1360eb47b86ea62d25d1eef62a681e7 c35b76e7d63c05dc80867285bb913042cbe90b45d4d4306df9eac2cba5e8db70 test/extractor-tests/generated/PrefixExpr/PrefixExpr.ql 44fb7174365c6deecdc22c720d84617c6e060c05d49c41c90433451588f8aa6f 871fab471c82fede3c36edc003f9decee5bb7844c016951d28be78d0c91487e5 test/extractor-tests/generated/PrefixExpr/PrefixExpr_getAttr.ql fdad6ad5199435ded1e4a9ea6b246e76b904cd73a36aaa4780e84eef91741c5b 75d63940046e62c1efa1151b0cac45b5ec0bab5e39aec2e11d43f6c385e37984 test/extractor-tests/generated/PrefixExpr/PrefixExpr_getExpr.ql 2d1d97f6277794871fbb032ea87ac30b1aa902a74cd874720156162057ea202e b1b9880fce07d66df7ec87f12189c37adf9f233a1d0b38a1b09808d052a95642 @@ -930,9 +933,11 @@ test/extractor-tests/generated/RangePat/RangePat.ql 97314b9a5543a7471d722ae188a6 test/extractor-tests/generated/RangePat/RangePat_getEnd.ql 723eb5030ec52d3aa3650a3e2de6cc0195a0030630239b972235963320e0d808 2df3b1a6197c3abd43dc743fd09cbf55165e3191f2b49336777594541e5da96a test/extractor-tests/generated/RangePat/RangePat_getOperatorName.ql 564216b2342f56dc8c1aed6306f57b6dafb33de9e3ba337a840a8c077ce95933 2a76ec7a59bada29733a1515bc1ea8bedd37429d1694ca63c7a8fbf94098a4c7 test/extractor-tests/generated/RangePat/RangePat_getStart.ql ad2066efa32fced2dd107031f2a9b9635c3c892e874870a4320522bae9309aa4 b4a8c57a838074e186b823938d1a9372153c193da6c839b5f242ca25c679e83f -test/extractor-tests/generated/RecordExpr/RecordExpr.ql 1b8f5c315f8038e531bd92c5402acdafdbc9468e2f4474cbeffddca37cc87fb6 9458b2815fd13848659bdc2ce1e9566fccdb0b2c9f018c79885ba7608df07a5a +test/extractor-tests/generated/RecordExpr/RecordExpr.ql 220f7f766587dc9df1c6f81a1cda3d19d7d5e92a31c63752061297e1adf96bf0 792bbe4503adcb63f7ac0f11259bb60a8ce05538ba1676f141989a73ff4eb5c0 test/extractor-tests/generated/RecordExpr/RecordExpr_getPath.ql 2eb8f7591f08199d124732d7f2d7dd3e81792a52f8e6c90003aa0609923f8cb0 27e245224d6c9aa20023b418ce8dffff1293b50a0e10938932631fca7c559e78 test/extractor-tests/generated/RecordExpr/RecordExpr_getRecordExprFieldList.ql 6d3d872eb64ff8cd7317190f9b2627d3fa6a74976e362cfb49e21c6623d63f82 d98b07f932ecb25a427e655017de47f951d3eabc4eedbc6f873571ce8921e9ff +test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedCrateOrigin.ql 87d463c7950407c86783b9ccbcf6daa4f62f5fcb75bc20f1879bde9240281d4d 5659b4fb8b25cd998211aa3edb11188b3c487cabaf7a09989ce6fe0e4f67ba25 +test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedPath.ql 0de885c7efdd257ee44d2c8a2ad91e419d604517471966059ddae321e80597b6 7977fb7a8c954733dbb5cf8378d6103688d16bc4c9b891c68098d0ec224429b4 test/extractor-tests/generated/RecordExprField/RecordExprField.ql 62ee00e478fcf07421b5989943a487ecc0c99cf50ec87f05aabe89dfb03f2a32 ad7c6ce362032e18fc9950b885c4b7b5c907e6abd2af2d13ecef84eb980027fb test/extractor-tests/generated/RecordExprField/RecordExprField_getAttr.ql 789d20f8c0bb0e9567d3d9a0c0266a04841cda0dbdbe10af8c450d5a82bb289e 9036f5b0e7ddf301012f52f3919804382421061366d2a4f3a016e9783befec6d test/extractor-tests/generated/RecordExprField/RecordExprField_getExpr.ql 7dcb5cf0d04bcd62b655fa0626535526cdaa0f891845f4b22cb50fcf1ae3e511 a177db76e4e9583438fad9bfb1300fed9e812c1046c44dccd307bf3a46603a69 @@ -948,9 +953,11 @@ test/extractor-tests/generated/RecordField/RecordField_getTy.ql 601fbb244267f366 test/extractor-tests/generated/RecordField/RecordField_getVisibility.ql cc45e9bb9418d15cef07a1827358c3f18a8737324c8e6852591a2da70df89360 45557497fc165a212fffda71dedabc8159a4f72323430df732698a18922b366c test/extractor-tests/generated/RecordFieldList/RecordFieldList.ql 586bccfa550243177d9fdfd6900a473f51a76ed360b537f19cb300330d5dad5b a063373dfdbf06b68c69694ea4ae72a26b906c910f9095894c09e72f8fb52819 test/extractor-tests/generated/RecordFieldList/RecordFieldList_getField.ql 2eb92ef8528204f3f105c19a36cdc06b3b6d20242463ff2ed1fb81c544812a71 d69091899e7157099f117e14fe60cd3705cfda45f28f6a6a2b7234a4a9c1e664 -test/extractor-tests/generated/RecordPat/RecordPat.ql 01510828e1facc6551e06241e41636259883a546ad43b08499468c14d6052768 fcf3873fe1cd1ebe4910150763aa350f882ca8e84603f35520bb0beeea2c21af +test/extractor-tests/generated/RecordPat/RecordPat.ql 24469c2a0902196d49249a37a0b56bf9fe62d1e7af3150813200b25ccb46dfaa 479e58d4fe6db7048e0649fd5a9c1b8ca1ceb8aa52a80dd07a999a07e32b0a3f test/extractor-tests/generated/RecordPat/RecordPat_getPath.ql 187b8d44de158fc809257e28b2e8fdd246c8eb3c60115d54cd53396a320e372d 74813fd13c6f34927420ed44620743f7c80c537984e0db72c1c5f4b754b40b83 test/extractor-tests/generated/RecordPat/RecordPat_getRecordPatFieldList.ql 32e45a6f59cdb8edbf7f9326164e225a7f545fabd2dd168b660699954a999fdf 325c9121dc130459426b473691876a0698b51d5cdf4530698a398510ce8e3051 +test/extractor-tests/generated/RecordPat/RecordPat_getResolvedCrateOrigin.ql 61a47db765e0c45797d3f92318fb6dbf07dfe1a2e63704294c58d49cb0894676 86a636746458053278a8ba0be062a9b1cfcad4866e065a8317fa8f033518ecae +test/extractor-tests/generated/RecordPat/RecordPat_getResolvedPath.ql 0221208e93c4a26e555dd848238b4f5bcabf2ccf3fc38ceb2eef45c39d67b21a 37d80014a21a19e9132ad645a17234e33bb20f2352b450277b8fa919a54b95e9 test/extractor-tests/generated/RecordPatField/RecordPatField.ql 6c51343258e56673d21b7ae73e7de011319ffa2eb65390e697f875bb428d25d1 82c3232db0cb353140618749b1cba5549b0ff43cbbaafb203077e18dbedb2c10 test/extractor-tests/generated/RecordPatField/RecordPatField_getAttr.ql fb0592f7a1be4fd9c6f36c79dee5a0f6711b0a7820b079f8e95413722ae1aeb7 9dfb0de00ec9c4a23efd38515c63a3567204f2a3ac2634858296f58aa564d170 test/extractor-tests/generated/RecordPatField/RecordPatField_getNameRef.ql 3380a41d6cecd80681fc955719fa11377c32a5e0be276871f2d0d75ae62d8f0a 44efe89657d3a59fb94962d0fbf52d06571e203863a3d9e9dd47a5135a8ba4d9 @@ -1046,9 +1053,11 @@ test/extractor-tests/generated/TupleFieldList/TupleFieldList.ql 7dc88440222ff036 test/extractor-tests/generated/TupleFieldList/TupleFieldList_getField.ql ad552a9c0b9964d1770f14cabbb436db60ebedc3c569006542a8eae9ddb30f6d 3a8c49d629376a9b8326138836b05ee2366b1021ffd19f5be74ab023e70aa50d test/extractor-tests/generated/TuplePat/TuplePat.ql 24ee56bc848537da65eb8ecef71e84cc351a2aedcc31d6fb53a5b7865f15f7c2 81db1076e2e4921ceb50933b96cd7b574caab1818de257c1e9038f3f97447d59 test/extractor-tests/generated/TuplePat/TuplePat_getField.ql f000bed41af031bc56d0705ce312abe7ab3dc6745b2936798c9938781e51475e f464a84dbc36aa371d60d6db68d6251f6b275dc4ecebdc56f195637be390b067 -test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql 6e6cfba0d2565782088af55ca977ada3d8093200aa180a49a67c9a176c52c254 c10c93823a9d814d694ca88fdf65a9bf8c1bb178e50c08982a97aa8d445284b3 +test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql 194b2fbfc83a84caf76032f3c63a1f7e618f71e5ea5be449e9d2691b0fce9829 0ff24488ba5729591ce86a702fdfb6f4e0498f96d89bf5c4bd05bd90523f9435 test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.ql f3f2e23cc2a32aa5abc1e0fda1300dab1693230632b9eaa75bb3b1e82ee9ea1a 24b87a39ec639a26ff8c1d04dc3429b72266b2a3b1650a06a7cd4387b6f0e615 test/extractor-tests/generated/TupleStructPat/TupleStructPat_getPath.ql 13a06696bbf1fa8d5b73107e28cdba40e93da04b27f9c54381b78a52368d2ad1 5558c35ea9bb371ad90a5b374d7530dd1936f83e6ba656ebfbfd5bd63598e088 +test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedCrateOrigin.ql e409667233331a038e482de4b2669d9fac9d7eb0e3bd5580ea19828f0c4ed7ad 588e4628471f1004575900d7365490efcf9168b555ff26becfc3f27b9e657de3 +test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedPath.ql 150898b6e55cc74b9ddb947f136b5a7f538ee5598928c5724d80e3ddf93ae499 66e0bd7b32df8f5bbe229cc02be6a07cb9ec0fe8b444dad3f5b32282a90551ee test/extractor-tests/generated/TupleType/TupleType.ql e5951a30817b8c51fe9cb9435f75bfdca2a1277b2094267d3205e33ef1ee9a9c 9a4d57322ed2cff57057654272981b056f833136f983141b033afaf64e19c117 test/extractor-tests/generated/TupleType/TupleType_getField.ql b73a8cdaf6ba46cf9b63d8819239d2d2c06b3496ed4768e8a387a7558178fbd8 6efbcf13c25d0ff3ed0c6d194ba44d2abfa620406badef8184953395fab92bb4 test/extractor-tests/generated/TypeAlias/TypeAlias.ql 87645d4aa0e2c789dfd7111c6150e72c65b2e108b371bb5fc247aa8d34a25893 6335b4e56d998eed57d8f026d2d1dbfc018754e87c755e1194a2ef9f7a468233 diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index c75ea349c0d..973f32e7d9b 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -372,7 +372,6 @@ /lib/codeql/rust/elements/internal/TuplePatConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/TuplePatImpl.qll linguist-generated /lib/codeql/rust/elements/internal/TupleStructPatConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/TupleStructPatImpl.qll linguist-generated /lib/codeql/rust/elements/internal/TupleTypeConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/TupleTypeImpl.qll linguist-generated /lib/codeql/rust/elements/internal/TypeAliasConstructor.qll linguist-generated @@ -729,6 +728,8 @@ /test/extractor-tests/generated/FormatArgsExpr/FormatArgument.ql linguist-generated /test/extractor-tests/generated/FormatArgsExpr/FormatArgument_getVariable.ql linguist-generated /test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql linguist-generated +/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedPath.ql linguist-generated /test/extractor-tests/generated/FormatArgsExpr/Format_getArgument.ql linguist-generated /test/extractor-tests/generated/Function/Function.ql linguist-generated /test/extractor-tests/generated/Function/Function_getAbi.ql linguist-generated @@ -901,8 +902,12 @@ /test/extractor-tests/generated/Path/PathExpr.ql linguist-generated /test/extractor-tests/generated/Path/PathExpr_getAttr.ql linguist-generated /test/extractor-tests/generated/Path/PathExpr_getPath.ql linguist-generated +/test/extractor-tests/generated/Path/PathExpr_getResolvedCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Path/PathExpr_getResolvedPath.ql linguist-generated /test/extractor-tests/generated/Path/PathPat.ql linguist-generated /test/extractor-tests/generated/Path/PathPat_getPath.ql linguist-generated +/test/extractor-tests/generated/Path/PathPat_getResolvedCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Path/PathPat_getResolvedPath.ql linguist-generated /test/extractor-tests/generated/Path/PathSegment.ql linguist-generated /test/extractor-tests/generated/Path/PathSegment_getGenericArgList.ql linguist-generated /test/extractor-tests/generated/Path/PathSegment_getNameRef.ql linguist-generated @@ -915,8 +920,6 @@ /test/extractor-tests/generated/Path/PathType_getPath.ql linguist-generated /test/extractor-tests/generated/Path/Path_getPart.ql linguist-generated /test/extractor-tests/generated/Path/Path_getQualifier.ql linguist-generated -/test/extractor-tests/generated/Path/Path_getResolvedCrateOrigin.ql linguist-generated -/test/extractor-tests/generated/Path/Path_getResolvedPath.ql linguist-generated /test/extractor-tests/generated/PrefixExpr/PrefixExpr.ql linguist-generated /test/extractor-tests/generated/PrefixExpr/PrefixExpr_getAttr.ql linguist-generated /test/extractor-tests/generated/PrefixExpr/PrefixExpr_getExpr.ql linguist-generated @@ -935,6 +938,8 @@ /test/extractor-tests/generated/RecordExpr/RecordExpr.ql linguist-generated /test/extractor-tests/generated/RecordExpr/RecordExpr_getPath.ql linguist-generated /test/extractor-tests/generated/RecordExpr/RecordExpr_getRecordExprFieldList.ql linguist-generated +/test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedPath.ql linguist-generated /test/extractor-tests/generated/RecordExprField/RecordExprField.ql linguist-generated /test/extractor-tests/generated/RecordExprField/RecordExprField_getAttr.ql linguist-generated /test/extractor-tests/generated/RecordExprField/RecordExprField_getExpr.ql linguist-generated @@ -953,6 +958,8 @@ /test/extractor-tests/generated/RecordPat/RecordPat.ql linguist-generated /test/extractor-tests/generated/RecordPat/RecordPat_getPath.ql linguist-generated /test/extractor-tests/generated/RecordPat/RecordPat_getRecordPatFieldList.ql linguist-generated +/test/extractor-tests/generated/RecordPat/RecordPat_getResolvedCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/RecordPat/RecordPat_getResolvedPath.ql linguist-generated /test/extractor-tests/generated/RecordPatField/RecordPatField.ql linguist-generated /test/extractor-tests/generated/RecordPatField/RecordPatField_getAttr.ql linguist-generated /test/extractor-tests/generated/RecordPatField/RecordPatField_getNameRef.ql linguist-generated @@ -1051,6 +1058,8 @@ /test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql linguist-generated /test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.ql linguist-generated /test/extractor-tests/generated/TupleStructPat/TupleStructPat_getPath.ql linguist-generated +/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedPath.ql linguist-generated /test/extractor-tests/generated/TupleType/TupleType.ql linguist-generated /test/extractor-tests/generated/TupleType/TupleType_getField.ql linguist-generated /test/extractor-tests/generated/TypeAlias/TypeAlias.ql linguist-generated diff --git a/rust/ql/lib/codeql/rust/elements/Path.qll b/rust/ql/lib/codeql/rust/elements/Path.qll index cb228373cf5..a3549e66a85 100644 --- a/rust/ql/lib/codeql/rust/elements/Path.qll +++ b/rust/ql/lib/codeql/rust/elements/Path.qll @@ -4,8 +4,8 @@ */ private import internal.PathImpl +import codeql.rust.elements.AstNode import codeql.rust.elements.PathSegment -import codeql.rust.elements.Resolvable /** * A path. For example: diff --git a/rust/ql/lib/codeql/rust/elements/PathExprBase.qll b/rust/ql/lib/codeql/rust/elements/PathExprBase.qll index e2e45e718f0..95fd48d6386 100644 --- a/rust/ql/lib/codeql/rust/elements/PathExprBase.qll +++ b/rust/ql/lib/codeql/rust/elements/PathExprBase.qll @@ -5,6 +5,7 @@ private import internal.PathExprBaseImpl import codeql.rust.elements.Expr +import codeql.rust.elements.Resolvable /** * A path expression or a variable access in a formatting template. See `PathExpr` and `FormatTemplateVariableAccess` for further details. diff --git a/rust/ql/lib/codeql/rust/elements/PathPat.qll b/rust/ql/lib/codeql/rust/elements/PathPat.qll index 17dc5f71381..2c360a2b858 100644 --- a/rust/ql/lib/codeql/rust/elements/PathPat.qll +++ b/rust/ql/lib/codeql/rust/elements/PathPat.qll @@ -6,6 +6,7 @@ private import internal.PathPatImpl import codeql.rust.elements.Pat import codeql.rust.elements.Path +import codeql.rust.elements.Resolvable /** * A path pattern. For example: diff --git a/rust/ql/lib/codeql/rust/elements/RecordExpr.qll b/rust/ql/lib/codeql/rust/elements/RecordExpr.qll index 90edf3d0c03..c993059e977 100644 --- a/rust/ql/lib/codeql/rust/elements/RecordExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/RecordExpr.qll @@ -7,6 +7,7 @@ private import internal.RecordExprImpl import codeql.rust.elements.Expr import codeql.rust.elements.Path import codeql.rust.elements.RecordExprFieldList +import codeql.rust.elements.Resolvable /** * A record expression. For example: diff --git a/rust/ql/lib/codeql/rust/elements/RecordPat.qll b/rust/ql/lib/codeql/rust/elements/RecordPat.qll index 671bafda1c3..fb37a42659b 100644 --- a/rust/ql/lib/codeql/rust/elements/RecordPat.qll +++ b/rust/ql/lib/codeql/rust/elements/RecordPat.qll @@ -7,6 +7,7 @@ private import internal.RecordPatImpl import codeql.rust.elements.Pat import codeql.rust.elements.Path import codeql.rust.elements.RecordPatFieldList +import codeql.rust.elements.Resolvable /** * A record pattern. For example: diff --git a/rust/ql/lib/codeql/rust/elements/Resolvable.qll b/rust/ql/lib/codeql/rust/elements/Resolvable.qll index e3e7b772501..200809dd852 100644 --- a/rust/ql/lib/codeql/rust/elements/Resolvable.qll +++ b/rust/ql/lib/codeql/rust/elements/Resolvable.qll @@ -7,6 +7,6 @@ private import internal.ResolvableImpl import codeql.rust.elements.AstNode /** - * Either a `Path`, or a `MethodCallExpr`. + * Either a `PathExpr`, a `PathPat`, or a `MethodCallExpr`. */ final class Resolvable = Impl::Resolvable; diff --git a/rust/ql/lib/codeql/rust/elements/TupleStructPat.qll b/rust/ql/lib/codeql/rust/elements/TupleStructPat.qll index c43672509f7..5470d18d35a 100644 --- a/rust/ql/lib/codeql/rust/elements/TupleStructPat.qll +++ b/rust/ql/lib/codeql/rust/elements/TupleStructPat.qll @@ -6,6 +6,7 @@ private import internal.TupleStructPatImpl import codeql.rust.elements.Pat import codeql.rust.elements.Path +import codeql.rust.elements.Resolvable /** * A tuple struct pattern. For example: diff --git a/rust/ql/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll index d0e4049a05d..e65f02afdb7 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CallExprBaseImpl.qll @@ -5,6 +5,7 @@ */ private import codeql.rust.elements.internal.generated.CallExprBase +private import codeql.rust.elements.Resolvable /** * INTERNAL: This module contains the customizable definition of `CallExprBase` and should not @@ -20,7 +21,7 @@ module Impl { private Resolvable getCallResolvable(CallExprBase call) { result = call.(MethodCallExpr) or - result = call.(CallExpr).getFunction().(PathExpr).getPath() + result = call.(CallExpr).getFunction().(PathExpr) } // the following QLdoc is generated: if you need to edit it, do it in the schema file diff --git a/rust/ql/lib/codeql/rust/elements/internal/ResolvableImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ResolvableImpl.qll index fafb86d46c0..eacd777c7e2 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ResolvableImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ResolvableImpl.qll @@ -15,7 +15,7 @@ module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * Either a `Path`, or a `MethodCallExpr`. + * Either a `PathExpr`, a `PathPat`, or a `MethodCallExpr`. */ class Resolvable extends Generated::Resolvable { /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/TupleStructPatImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/TupleStructPatImpl.qll index 1f92ed5a190..29ec980c2eb 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/TupleStructPatImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/TupleStructPatImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `TupleStructPat`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.TupleStructPat * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A tuple struct pattern. For example: * ```rust @@ -22,5 +22,7 @@ module Impl { * }; * ``` */ - class TupleStructPat extends Generated::TupleStructPat { } + class TupleStructPat extends Generated::TupleStructPat { + override string toString() { result = this.getPath().toAbbreviatedString() + "(...)" } + } } 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 6709629e8b4..aabbb0668d8 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -670,6 +670,25 @@ private module Impl { ) } + private Element getImmediateChildOfPath(Path e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n, int nQualifier, int nPart | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + nQualifier = n + 1 and + nPart = nQualifier + 1 and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or + index = n and result = e.getQualifier() and partialPredicateCall = "Qualifier()" + or + index = nQualifier and result = e.getPart() and partialPredicateCall = "Part()" + ) + ) + } + private Element getImmediateChildOfPathSegment( PathSegment e, int index, string partialPredicateCall ) { @@ -2166,52 +2185,40 @@ private module Impl { ) } - private Element getImmediateChildOfPath(Path e, int index, string partialPredicateCall) { - exists(int b, int bResolvable, int n, int nQualifier, int nPart | - b = 0 and - bResolvable = - b + 1 + max(int i | i = -1 or exists(getImmediateChildOfResolvable(e, i, _)) | i) and - n = bResolvable and - nQualifier = n + 1 and - nPart = nQualifier + 1 and - ( - none() - or - result = getImmediateChildOfResolvable(e, index - b, partialPredicateCall) - or - index = n and result = e.getQualifier() and partialPredicateCall = "Qualifier()" - or - index = nQualifier and result = e.getPart() and partialPredicateCall = "Part()" - ) - ) - } - private Element getImmediateChildOfPathExprBase( PathExprBase e, int index, string partialPredicateCall ) { - exists(int b, int bExpr, int n | + exists(int b, int bExpr, int bResolvable, int n | b = 0 and bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and - n = bExpr and + bResolvable = + bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfResolvable(e, i, _)) | i) and + n = bResolvable and ( none() or result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or + result = getImmediateChildOfResolvable(e, index - bExpr, partialPredicateCall) ) ) } private Element getImmediateChildOfPathPat(PathPat e, int index, string partialPredicateCall) { - exists(int b, int bPat, int n, int nPath | + exists(int b, int bPat, int bResolvable, int n, int nPath | b = 0 and bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and - n = bPat and + bResolvable = + bPat + 1 + max(int i | i = -1 or exists(getImmediateChildOfResolvable(e, i, _)) | i) and + n = bResolvable and nPath = n + 1 and ( none() or result = getImmediateChildOfPat(e, index - b, partialPredicateCall) or + result = getImmediateChildOfResolvable(e, index - bPat, partialPredicateCall) + or index = n and result = e.getPath() and partialPredicateCall = "Path()" ) ) @@ -2312,10 +2319,12 @@ private module Impl { } private Element getImmediateChildOfRecordExpr(RecordExpr e, int index, string partialPredicateCall) { - exists(int b, int bExpr, int n, int nPath, int nRecordExprFieldList | + exists(int b, int bExpr, int bResolvable, int n, int nPath, int nRecordExprFieldList | b = 0 and bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and - n = bExpr and + bResolvable = + bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfResolvable(e, i, _)) | i) and + n = bResolvable and nPath = n + 1 and nRecordExprFieldList = nPath + 1 and ( @@ -2323,6 +2332,8 @@ private module Impl { or result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) or + result = getImmediateChildOfResolvable(e, index - bExpr, partialPredicateCall) + or index = n and result = e.getPath() and partialPredicateCall = "Path()" or index = nPath and @@ -2352,10 +2363,12 @@ private module Impl { } private Element getImmediateChildOfRecordPat(RecordPat e, int index, string partialPredicateCall) { - exists(int b, int bPat, int n, int nPath, int nRecordPatFieldList | + exists(int b, int bPat, int bResolvable, int n, int nPath, int nRecordPatFieldList | b = 0 and bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and - n = bPat and + bResolvable = + bPat + 1 + max(int i | i = -1 or exists(getImmediateChildOfResolvable(e, i, _)) | i) and + n = bResolvable and nPath = n + 1 and nRecordPatFieldList = nPath + 1 and ( @@ -2363,6 +2376,8 @@ private module Impl { or result = getImmediateChildOfPat(e, index - b, partialPredicateCall) or + result = getImmediateChildOfResolvable(e, index - bPat, partialPredicateCall) + or index = n and result = e.getPath() and partialPredicateCall = "Path()" or index = nPath and @@ -2596,10 +2611,12 @@ private module Impl { private Element getImmediateChildOfTupleStructPat( TupleStructPat e, int index, string partialPredicateCall ) { - exists(int b, int bPat, int n, int nField, int nPath | + exists(int b, int bPat, int bResolvable, int n, int nField, int nPath | b = 0 and bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and - n = bPat and + bResolvable = + bPat + 1 + max(int i | i = -1 or exists(getImmediateChildOfResolvable(e, i, _)) | i) and + n = bResolvable and nField = n + 1 + max(int i | i = -1 or exists(e.getField(i)) | i) and nPath = nField + 1 and ( @@ -2607,6 +2624,8 @@ private module Impl { or result = getImmediateChildOfPat(e, index - b, partialPredicateCall) or + result = getImmediateChildOfResolvable(e, index - bPat, partialPredicateCall) + or result = e.getField(index - n) and partialPredicateCall = "Field(" + (index - n).toString() + ")" or @@ -3652,6 +3671,8 @@ private module Impl { or result = getImmediateChildOfParamList(e, index, partialAccessor) or + result = getImmediateChildOfPath(e, index, partialAccessor) + or result = getImmediateChildOfPathSegment(e, index, partialAccessor) or result = getImmediateChildOfRecordExprField(e, index, partialAccessor) @@ -3782,8 +3803,6 @@ private module Impl { or result = getImmediateChildOfParenType(e, index, partialAccessor) or - result = getImmediateChildOfPath(e, index, partialAccessor) - or result = getImmediateChildOfPathPat(e, index, partialAccessor) or result = getImmediateChildOfPathType(e, index, partialAccessor) diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Path.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Path.qll index 36313ca9fe9..b9a6edce9f4 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Path.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Path.qll @@ -6,9 +6,9 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw +import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl import codeql.rust.elements.Path import codeql.rust.elements.PathSegment -import codeql.rust.elements.internal.ResolvableImpl::Impl as ResolvableImpl /** * INTERNAL: This module contains the fully generated definition of `Path` and should not @@ -24,7 +24,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::Path` class directly. * Use the subclass `Path`, where the following predicates are available. */ - class Path extends Synth::TPath, ResolvableImpl::Resolvable { + class Path extends Synth::TPath, AstNodeImpl::AstNode { override string getAPrimaryQlClass() { result = "Path" } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/PathExprBase.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/PathExprBase.qll index cf924962dbe..2efc1fd3dae 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/PathExprBase.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/PathExprBase.qll @@ -7,6 +7,7 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl +import codeql.rust.elements.internal.ResolvableImpl::Impl as ResolvableImpl /** * INTERNAL: This module contains the fully generated definition of `PathExprBase` and should not @@ -18,5 +19,5 @@ module Generated { * INTERNAL: Do not reference the `Generated::PathExprBase` class directly. * Use the subclass `PathExprBase`, where the following predicates are available. */ - class PathExprBase extends Synth::TPathExprBase, ExprImpl::Expr { } + class PathExprBase extends Synth::TPathExprBase, ExprImpl::Expr, ResolvableImpl::Resolvable { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/PathPat.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/PathPat.qll index f91949de40e..e37e1e154db 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/PathPat.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/PathPat.qll @@ -8,6 +8,7 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.internal.PatImpl::Impl as PatImpl import codeql.rust.elements.Path +import codeql.rust.elements.internal.ResolvableImpl::Impl as ResolvableImpl /** * INTERNAL: This module contains the fully generated definition of `PathPat` and should not @@ -25,7 +26,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::PathPat` class directly. * Use the subclass `PathPat`, where the following predicates are available. */ - class PathPat extends Synth::TPathPat, PatImpl::Pat { + class PathPat extends Synth::TPathPat, PatImpl::Pat, ResolvableImpl::Resolvable { override string getAPrimaryQlClass() { result = "PathPat" } /** 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 1c85daa22cf..368be81ad06 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -590,6 +590,28 @@ module Raw { */ class Pat extends @pat, AstNode { } + /** + * INTERNAL: Do not use. + * A path. For example: + * ```rust + * use some_crate::some_module::some_item; + * foo::bar; + * ``` + */ + class Path extends @path, AstNode { + override string toString() { result = "Path" } + + /** + * Gets the qualifier of this path, if it exists. + */ + Path getQualifier() { path_qualifiers(this, result) } + + /** + * Gets the part of this path, if it exists. + */ + PathSegment getPart() { path_parts(this, result) } + } + /** * INTERNAL: Do not use. * A path segment, which is one part of a whole path. @@ -781,7 +803,7 @@ module Raw { /** * INTERNAL: Do not use. - * Either a `Path`, or a `MethodCallExpr`. + * Either a `PathExpr`, a `PathPat`, or a `MethodCallExpr`. */ class Resolvable extends @resolvable, AstNode { /** @@ -2278,33 +2300,11 @@ module Raw { TypeRef getTy() { paren_type_ties(this, result) } } - /** - * INTERNAL: Do not use. - * A path. For example: - * ```rust - * use some_crate::some_module::some_item; - * foo::bar; - * ``` - */ - class Path extends @path, Resolvable { - override string toString() { result = "Path" } - - /** - * Gets the qualifier of this path, if it exists. - */ - Path getQualifier() { path_qualifiers(this, result) } - - /** - * Gets the part of this path, if it exists. - */ - PathSegment getPart() { path_parts(this, result) } - } - /** * INTERNAL: Do not use. * A path expression or a variable access in a formatting template. See `PathExpr` and `FormatTemplateVariableAccess` for further details. */ - class PathExprBase extends @path_expr_base, Expr { } + class PathExprBase extends @path_expr_base, Expr, Resolvable { } /** * INTERNAL: Do not use. @@ -2316,7 +2316,7 @@ module Raw { * } * ``` */ - class PathPat extends @path_pat, Pat { + class PathPat extends @path_pat, Pat, Resolvable { override string toString() { result = "PathPat" } /** @@ -2472,7 +2472,7 @@ module Raw { * Foo { .. } = second; * ``` */ - class RecordExpr extends @record_expr, Expr { + class RecordExpr extends @record_expr, Expr, Resolvable { override string toString() { result = "RecordExpr" } /** @@ -2514,7 +2514,7 @@ module Raw { * } * ``` */ - class RecordPat extends @record_pat, Pat { + class RecordPat extends @record_pat, Pat, Resolvable { override string toString() { result = "RecordPat" } /** @@ -2812,7 +2812,7 @@ module Raw { * }; * ``` */ - class TupleStructPat extends @tuple_struct_pat, Pat { + class TupleStructPat extends @tuple_struct_pat, Pat, Resolvable { override string toString() { result = "TupleStructPat" } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/RecordExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/RecordExpr.qll index 96fc2aa61d0..d7c6a11f21a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/RecordExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/RecordExpr.qll @@ -9,6 +9,7 @@ private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl import codeql.rust.elements.Path import codeql.rust.elements.RecordExprFieldList +import codeql.rust.elements.internal.ResolvableImpl::Impl as ResolvableImpl /** * INTERNAL: This module contains the fully generated definition of `RecordExpr` and should not @@ -26,7 +27,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::RecordExpr` class directly. * Use the subclass `RecordExpr`, where the following predicates are available. */ - class RecordExpr extends Synth::TRecordExpr, ExprImpl::Expr { + class RecordExpr extends Synth::TRecordExpr, ExprImpl::Expr, ResolvableImpl::Resolvable { override string getAPrimaryQlClass() { result = "RecordExpr" } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/RecordPat.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/RecordPat.qll index b4aa66a71a0..03f2c525180 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/RecordPat.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/RecordPat.qll @@ -9,6 +9,7 @@ private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.internal.PatImpl::Impl as PatImpl import codeql.rust.elements.Path import codeql.rust.elements.RecordPatFieldList +import codeql.rust.elements.internal.ResolvableImpl::Impl as ResolvableImpl /** * INTERNAL: This module contains the fully generated definition of `RecordPat` and should not @@ -26,7 +27,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::RecordPat` class directly. * Use the subclass `RecordPat`, where the following predicates are available. */ - class RecordPat extends Synth::TRecordPat, PatImpl::Pat { + class RecordPat extends Synth::TRecordPat, PatImpl::Pat, ResolvableImpl::Resolvable { override string getAPrimaryQlClass() { result = "RecordPat" } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Resolvable.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Resolvable.qll index 018c451e584..ecd1e7db50a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Resolvable.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Resolvable.qll @@ -14,7 +14,7 @@ import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl */ module Generated { /** - * Either a `Path`, or a `MethodCallExpr`. + * Either a `PathExpr`, a `PathPat`, or a `MethodCallExpr`. * INTERNAL: Do not reference the `Generated::Resolvable` class directly. * Use the subclass `Resolvable`, where the following predicates are available. */ 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 0b4fa39cd84..8a236d3f322 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll @@ -630,7 +630,7 @@ module Synth { TGenericArg or TGenericArgList or TGenericParam or TGenericParamList or TItemList or TLabel or TLetElse or TLifetime or TMacroItems or TMacroStmts or TMatchArm or TMatchArmList or TMatchGuard or TMeta or TName or TNameRef or TParamBase or TParamList or - TPat or TPathSegment or TRecordExprField or TRecordExprFieldList or TRecordField or + TPat or TPath or TPathSegment or TRecordExprField or TRecordExprFieldList or TRecordField or TRecordPatField or TRecordPatFieldList or TRename or TResolvable or TRetType or TReturnTypeSyntax or TSourceFile or TStmt or TStmtList or TToken or TTokenTree or TTupleField or TTypeBound or TTypeBoundList or TTypeRef or TUseTree or TUseTreeList or @@ -721,7 +721,8 @@ module Synth { /** * INTERNAL: Do not use. */ - class TResolvable = TMethodCallExpr or TPath; + class TResolvable = + TMethodCallExpr or TPathExprBase or TPathPat or TRecordExpr or TRecordPat or TTupleStructPat; /** * INTERNAL: Do not use. @@ -1727,6 +1728,8 @@ module Synth { or result = convertPatFromRaw(e) or + result = convertPathFromRaw(e) + or result = convertPathSegmentFromRaw(e) or result = convertRecordExprFieldFromRaw(e) @@ -2067,7 +2070,15 @@ module Synth { TResolvable convertResolvableFromRaw(Raw::Element e) { result = convertMethodCallExprFromRaw(e) or - result = convertPathFromRaw(e) + result = convertPathExprBaseFromRaw(e) + or + result = convertPathPatFromRaw(e) + or + result = convertRecordExprFromRaw(e) + or + result = convertRecordPatFromRaw(e) + or + result = convertTupleStructPatFromRaw(e) } /** @@ -3111,6 +3122,8 @@ module Synth { or result = convertPatToRaw(e) or + result = convertPathToRaw(e) + or result = convertPathSegmentToRaw(e) or result = convertRecordExprFieldToRaw(e) @@ -3451,7 +3464,15 @@ module Synth { Raw::Element convertResolvableToRaw(TResolvable e) { result = convertMethodCallExprToRaw(e) or - result = convertPathToRaw(e) + result = convertPathExprBaseToRaw(e) + or + result = convertPathPatToRaw(e) + or + result = convertRecordExprToRaw(e) + or + result = convertRecordPatToRaw(e) + or + result = convertTupleStructPatToRaw(e) } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/TupleStructPat.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/TupleStructPat.qll index ed4e57d8719..9e57c0a9ad8 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/TupleStructPat.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/TupleStructPat.qll @@ -9,6 +9,7 @@ private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.Pat import codeql.rust.elements.internal.PatImpl::Impl as PatImpl import codeql.rust.elements.Path +import codeql.rust.elements.internal.ResolvableImpl::Impl as ResolvableImpl /** * INTERNAL: This module contains the fully generated definition of `TupleStructPat` and should not @@ -27,7 +28,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::TupleStructPat` class directly. * Use the subclass `TupleStructPat`, where the following predicates are available. */ - class TupleStructPat extends Synth::TTupleStructPat, PatImpl::Pat { + class TupleStructPat extends Synth::TTupleStructPat, PatImpl::Pat, ResolvableImpl::Resolvable { override string getAPrimaryQlClass() { result = "TupleStructPat" } /** diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index fe0f5bc436c..d63c6d62298 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -166,6 +166,7 @@ locatable_locations( | @param_base | @param_list | @pat +| @path | @path_segment | @record_expr_field | @record_expr_field_list @@ -652,6 +653,22 @@ param_list_self_params( | @wildcard_pat ; +paths( + unique int id: @path +); + +#keyset[id] +path_qualifiers( + int id: @path ref, + int qualifier: @path ref +); + +#keyset[id] +path_parts( + int id: @path ref, + int part: @path_segment ref +); + path_segments( unique int id: @path_segment ); @@ -826,7 +843,11 @@ rename_names( @resolvable = @method_call_expr -| @path +| @path_expr_base +| @path_pat +| @record_expr +| @record_pat +| @tuple_struct_pat ; #keyset[id] @@ -1963,22 +1984,6 @@ paren_type_ties( int ty: @type_ref ref ); -paths( - unique int id: @path -); - -#keyset[id] -path_qualifiers( - int id: @path ref, - int qualifier: @path ref -); - -#keyset[id] -path_parts( - int id: @path ref, - int part: @path_segment ref -); - @path_expr_base = @path_expr ; diff --git a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected index 0b973174828..09583dcf9f6 100644 --- a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected +++ b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected @@ -34,34 +34,15 @@ canonicalPaths | regular.rs:40:1:46:1 | fn enum_qualified_usage | repo::test | crate::regular::enum_qualified_usage | | regular.rs:48:1:55:1 | fn enum_unqualified_usage | repo::test | crate::regular::enum_unqualified_usage | | regular.rs:51:5:51:18 | Use | None | None | +| regular.rs:57:1:63:1 | fn enum_match | repo::test | crate::regular::enum_match | resolvedPaths -| anonymous.rs:1:5:1:9 | super | None | None | -| anonymous.rs:1:5:1:18 | ...::regular | repo::test | crate::regular | -| anonymous.rs:1:5:1:25 | ...::Trait | repo::test | crate::regular::Trait | -| anonymous.rs:10:10:10:19 | OtherTrait | repo::test | {0}::OtherTrait | -| anonymous.rs:10:25:10:35 | OtherStruct | repo::test | {0}::OtherStruct | -| anonymous.rs:14:10:14:19 | OtherTrait | repo::test | {0}::OtherTrait | -| anonymous.rs:14:25:14:29 | crate | None | None | -| anonymous.rs:14:25:14:38 | ...::regular | repo::test | crate::regular | -| anonymous.rs:14:25:14:46 | ...::Struct | repo::test | crate::regular::Struct | -| anonymous.rs:18:10:18:14 | crate | None | None | -| anonymous.rs:18:10:18:23 | ...::regular | repo::test | crate::regular | -| anonymous.rs:18:10:18:30 | ...::Trait | repo::test | crate::regular::Trait | -| anonymous.rs:18:36:18:46 | OtherStruct | repo::test | {0}::OtherStruct | -| anonymous.rs:27:17:27:27 | OtherStruct | repo::test | {0}::OtherStruct | +| anonymous.rs:27:17:27:30 | OtherStruct {...} | repo::test | {0}::OtherStruct | | anonymous.rs:28:9:28:9 | s | None | None | | anonymous.rs:28:9:28:13 | ... .f(...) | repo::test | <{0}::OtherStruct as crate::regular::Trait>::f | | anonymous.rs:29:9:29:9 | s | None | None | | anonymous.rs:29:9:29:13 | ... .g(...) | repo::test | <{0}::OtherStruct as {0}::OtherTrait>::g | | anonymous.rs:30:9:30:14 | nested | repo::test | {0}::nested | -| regular.rs:1:3:1:8 | derive | None | None | -| regular.rs:8:6:8:10 | Trait | repo::test | crate::regular::Trait | -| regular.rs:8:16:8:21 | Struct | repo::test | crate::regular::Struct | -| regular.rs:12:6:12:11 | Struct | repo::test | crate::regular::Struct | -| regular.rs:20:9:20:10 | Eq | lang:core | crate::cmp::Eq | -| regular.rs:20:13:20:32 | TraitWithBlanketImpl | repo::test | crate::regular::TraitWithBlanketImpl | -| regular.rs:20:38:20:38 | T | None | None | -| regular.rs:27:13:27:18 | Struct | repo::test | crate::regular::Struct | +| regular.rs:27:13:27:21 | Struct {...} | repo::test | crate::regular::Struct | | regular.rs:28:5:28:5 | s | None | None | | regular.rs:28:5:28:9 | ... .f(...) | repo::test | ::f | | regular.rs:29:5:29:5 | s | None | None | @@ -69,21 +50,17 @@ resolvedPaths | regular.rs:30:5:30:5 | s | None | None | | regular.rs:30:5:30:9 | ... .h(...) | repo::test | <_ as crate::regular::TraitWithBlanketImpl>::h | | regular.rs:31:5:31:8 | free | repo::test | crate::regular::free | -| regular.rs:36:14:36:18 | usize | None | None | -| regular.rs:37:19:37:23 | usize | None | None | -| regular.rs:41:9:41:14 | Option | lang:core | crate::option::Option | | regular.rs:41:9:41:26 | ...::None::<...> | lang:core | crate::option::Option::None | -| regular.rs:42:9:42:14 | Option | lang:core | crate::option::Option | | regular.rs:42:9:42:20 | ...::Some | lang:core | crate::option::Option::Some | -| regular.rs:43:9:43:14 | MyEnum | repo::test | crate::regular::MyEnum | | regular.rs:43:9:43:24 | ...::Variant1 | repo::test | crate::regular::MyEnum::Variant1 | -| regular.rs:44:9:44:14 | MyEnum | repo::test | crate::regular::MyEnum | | regular.rs:44:9:44:24 | ...::Variant2 | repo::test | crate::regular::MyEnum::Variant2 | -| regular.rs:45:9:45:14 | MyEnum | repo::test | crate::regular::MyEnum | -| regular.rs:45:9:45:24 | ...::Variant3 | repo::test | crate::regular::MyEnum::Variant3 | +| regular.rs:45:9:45:33 | ...::Variant3 {...} | repo::test | crate::regular::MyEnum::Variant3 | | regular.rs:49:9:49:18 | None::<...> | lang:core | crate::option::Option::None | | regular.rs:50:9:50:12 | Some | lang:core | crate::option::Option::Some | -| regular.rs:51:9:51:14 | MyEnum | repo::test | crate::regular::MyEnum | | regular.rs:52:9:52:16 | Variant1 | repo::test | crate::regular::MyEnum::Variant1 | | regular.rs:53:9:53:16 | Variant2 | repo::test | crate::regular::MyEnum::Variant2 | -| regular.rs:54:9:54:16 | Variant3 | repo::test | crate::regular::MyEnum::Variant3 | +| regular.rs:54:9:54:25 | Variant3 {...} | repo::test | crate::regular::MyEnum::Variant3 | +| regular.rs:58:11:58:11 | e | None | None | +| regular.rs:59:9:59:24 | ...::Variant1 | repo::test | crate::regular::MyEnum::Variant1 | +| regular.rs:60:9:60:27 | ...::Variant2(...) | repo::test | crate::regular::MyEnum::Variant2 | +| regular.rs:61:9:61:31 | ...::Variant3 {...} | repo::test | crate::regular::MyEnum::Variant3 | diff --git a/rust/ql/test/extractor-tests/canonical_path/regular.rs b/rust/ql/test/extractor-tests/canonical_path/regular.rs index ac06a12d24a..82b0525489f 100644 --- a/rust/ql/test/extractor-tests/canonical_path/regular.rs +++ b/rust/ql/test/extractor-tests/canonical_path/regular.rs @@ -53,3 +53,11 @@ fn enum_unqualified_usage() { _ = Variant2(0); _ = Variant3 { x: 1 }; } + +fn enum_match(e: MyEnum) { + match e { + MyEnum::Variant1 => {} + MyEnum::Variant2(_) => {} + MyEnum::Variant3 { .. } => {} + } +} diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.expected index df4fdad5c91..4f9a487e85d 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.expected +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.expected @@ -1,5 +1,5 @@ -| gen_format_args_expr.rs:9:20:9:20 | x | -| gen_format_args_expr.rs:9:25:9:25 | y | -| gen_format_argument.rs:5:22:5:26 | value | -| gen_format_argument.rs:5:29:5:33 | width | -| gen_format_argument.rs:5:36:5:44 | precision | +| gen_format_args_expr.rs:9:20:9:20 | x | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | +| gen_format_args_expr.rs:9:25:9:25 | y | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | +| gen_format_argument.rs:5:22:5:26 | value | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | +| gen_format_argument.rs:5:29:5:33 | width | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | +| gen_format_argument.rs:5:36:5:44 | precision | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql index 4f43ca11870..488207bc5bb 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql @@ -2,6 +2,12 @@ import codeql.rust.elements import TestUtils -from FormatTemplateVariableAccess x -where toBeTested(x) and not x.isUnknown() -select x +from FormatTemplateVariableAccess x, string hasResolvedPath, string hasResolvedCrateOrigin +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasResolvedPath() then hasResolvedPath = "yes" else hasResolvedPath = "no") and + if x.hasResolvedCrateOrigin() + then hasResolvedCrateOrigin = "yes" + else hasResolvedCrateOrigin = "no" +select x, "hasResolvedPath:", hasResolvedPath, "hasResolvedCrateOrigin:", hasResolvedCrateOrigin diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedCrateOrigin.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedCrateOrigin.ql new file mode 100644 index 00000000000..8022e46e327 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from FormatTemplateVariableAccess x +where toBeTested(x) and not x.isUnknown() +select x, x.getResolvedCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedPath.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedPath.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedPath.ql b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedPath.ql new file mode 100644 index 00000000000..916fb7da09b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from FormatTemplateVariableAccess x +where toBeTested(x) and not x.isUnknown() +select x, x.getResolvedPath() diff --git a/rust/ql/test/extractor-tests/generated/Path/Path.expected b/rust/ql/test/extractor-tests/generated/Path/Path.expected index dfc303c3293..21eeab9c7a3 100644 --- a/rust/ql/test/extractor-tests/generated/Path/Path.expected +++ b/rust/ql/test/extractor-tests/generated/Path/Path.expected @@ -1,26 +1,26 @@ -| gen_path.rs:5:9:5:18 | some_crate | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | -| gen_path.rs:5:9:5:31 | ...::some_module | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | yes | hasPart: | yes | -| gen_path.rs:5:9:5:42 | ...::some_item | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | yes | hasPart: | yes | -| gen_path.rs:6:5:6:7 | foo | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | -| gen_path.rs:6:5:6:12 | ...::bar | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | yes | hasPart: | yes | -| gen_path_expr.rs:5:13:5:20 | variable | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | -| gen_path_expr.rs:6:13:6:15 | foo | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | -| gen_path_expr.rs:6:13:6:20 | ...::bar | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | yes | hasPart: | yes | -| gen_path_expr.rs:7:13:7:15 | <...> | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | -| gen_path_expr.rs:7:13:7:20 | ...::foo | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | yes | hasPart: | yes | -| gen_path_expr.rs:7:14:7:14 | T | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | -| gen_path_expr.rs:7:14:7:14 | T | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | -| gen_path_expr.rs:8:13:8:30 | <...> | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | -| gen_path_expr.rs:8:13:8:35 | ...::foo | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | yes | hasPart: | yes | -| gen_path_expr.rs:8:14:8:20 | TypeRef | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | -| gen_path_expr.rs:8:14:8:20 | TypeRef | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | -| gen_path_pat.rs:5:11:5:11 | x | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | -| gen_path_pat.rs:6:9:6:11 | Foo | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | -| gen_path_pat.rs:6:9:6:16 | ...::Bar | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | yes | hasPart: | yes | -| gen_path_type.rs:5:14:5:16 | std | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | -| gen_path_type.rs:5:14:5:29 | ...::collections | hasResolvedPath: | yes | hasResolvedCrateOrigin: | yes | hasQualifier: | yes | hasPart: | yes | -| gen_path_type.rs:5:14:5:48 | ...::HashMap::<...> | hasResolvedPath: | yes | hasResolvedCrateOrigin: | yes | hasQualifier: | yes | hasPart: | yes | -| gen_path_type.rs:5:40:5:42 | i32 | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | -| gen_path_type.rs:5:45:5:47 | i32 | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | -| gen_path_type.rs:6:14:6:14 | X | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | no | hasPart: | yes | -| gen_path_type.rs:6:14:6:20 | ...::Item | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasQualifier: | yes | hasPart: | yes | +| gen_path.rs:5:9:5:18 | some_crate | hasQualifier: | no | hasPart: | yes | +| gen_path.rs:5:9:5:31 | ...::some_module | hasQualifier: | yes | hasPart: | yes | +| gen_path.rs:5:9:5:42 | ...::some_item | hasQualifier: | yes | hasPart: | yes | +| gen_path.rs:6:5:6:7 | foo | hasQualifier: | no | hasPart: | yes | +| gen_path.rs:6:5:6:12 | ...::bar | hasQualifier: | yes | hasPart: | yes | +| gen_path_expr.rs:5:13:5:20 | variable | hasQualifier: | no | hasPart: | yes | +| gen_path_expr.rs:6:13:6:15 | foo | hasQualifier: | no | hasPart: | yes | +| gen_path_expr.rs:6:13:6:20 | ...::bar | hasQualifier: | yes | hasPart: | yes | +| gen_path_expr.rs:7:13:7:15 | <...> | hasQualifier: | no | hasPart: | yes | +| gen_path_expr.rs:7:13:7:20 | ...::foo | hasQualifier: | yes | hasPart: | yes | +| gen_path_expr.rs:7:14:7:14 | T | hasQualifier: | no | hasPart: | yes | +| gen_path_expr.rs:7:14:7:14 | T | hasQualifier: | no | hasPart: | yes | +| gen_path_expr.rs:8:13:8:30 | <...> | hasQualifier: | no | hasPart: | yes | +| gen_path_expr.rs:8:13:8:35 | ...::foo | hasQualifier: | yes | hasPart: | yes | +| gen_path_expr.rs:8:14:8:20 | TypeRef | hasQualifier: | no | hasPart: | yes | +| gen_path_expr.rs:8:14:8:20 | TypeRef | hasQualifier: | no | hasPart: | yes | +| gen_path_pat.rs:5:11:5:11 | x | hasQualifier: | no | hasPart: | yes | +| gen_path_pat.rs:6:9:6:11 | Foo | hasQualifier: | no | hasPart: | yes | +| gen_path_pat.rs:6:9:6:16 | ...::Bar | hasQualifier: | yes | hasPart: | yes | +| gen_path_type.rs:5:14:5:16 | std | hasQualifier: | no | hasPart: | yes | +| gen_path_type.rs:5:14:5:29 | ...::collections | hasQualifier: | yes | hasPart: | yes | +| gen_path_type.rs:5:14:5:48 | ...::HashMap::<...> | hasQualifier: | yes | hasPart: | yes | +| gen_path_type.rs:5:40:5:42 | i32 | hasQualifier: | no | hasPart: | yes | +| gen_path_type.rs:5:45:5:47 | i32 | hasQualifier: | no | hasPart: | yes | +| gen_path_type.rs:6:14:6:14 | X | hasQualifier: | no | hasPart: | yes | +| gen_path_type.rs:6:14:6:20 | ...::Item | hasQualifier: | yes | hasPart: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Path/Path.ql b/rust/ql/test/extractor-tests/generated/Path/Path.ql index d84c2d86987..c5e1ba9d78a 100644 --- a/rust/ql/test/extractor-tests/generated/Path/Path.ql +++ b/rust/ql/test/extractor-tests/generated/Path/Path.ql @@ -2,18 +2,10 @@ import codeql.rust.elements import TestUtils -from - Path x, string hasResolvedPath, string hasResolvedCrateOrigin, string hasQualifier, string hasPart +from Path x, string hasQualifier, string hasPart where toBeTested(x) and not x.isUnknown() and - (if x.hasResolvedPath() then hasResolvedPath = "yes" else hasResolvedPath = "no") and - ( - if x.hasResolvedCrateOrigin() - then hasResolvedCrateOrigin = "yes" - else hasResolvedCrateOrigin = "no" - ) and (if x.hasQualifier() then hasQualifier = "yes" else hasQualifier = "no") and if x.hasPart() then hasPart = "yes" else hasPart = "no" -select x, "hasResolvedPath:", hasResolvedPath, "hasResolvedCrateOrigin:", hasResolvedCrateOrigin, - "hasQualifier:", hasQualifier, "hasPart:", hasPart +select x, "hasQualifier:", hasQualifier, "hasPart:", hasPart diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected b/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected index 4f6def5dd43..540ad015ddb 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected +++ b/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected @@ -1,6 +1,6 @@ -| gen_path.rs:6:5:6:12 | ...::bar | getNumberOfAttrs: | 0 | hasPath: | yes | -| gen_path_expr.rs:5:13:5:20 | variable | getNumberOfAttrs: | 0 | hasPath: | yes | -| gen_path_expr.rs:6:13:6:20 | ...::bar | getNumberOfAttrs: | 0 | hasPath: | yes | -| gen_path_expr.rs:7:13:7:20 | ...::foo | getNumberOfAttrs: | 0 | hasPath: | yes | -| gen_path_expr.rs:8:13:8:35 | ...::foo | getNumberOfAttrs: | 0 | hasPath: | yes | -| gen_path_pat.rs:5:11:5:11 | x | getNumberOfAttrs: | 0 | hasPath: | yes | +| gen_path.rs:6:5:6:12 | ...::bar | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | getNumberOfAttrs: | 0 | hasPath: | yes | +| gen_path_expr.rs:5:13:5:20 | variable | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | getNumberOfAttrs: | 0 | hasPath: | yes | +| gen_path_expr.rs:6:13:6:20 | ...::bar | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | getNumberOfAttrs: | 0 | hasPath: | yes | +| gen_path_expr.rs:7:13:7:20 | ...::foo | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | getNumberOfAttrs: | 0 | hasPath: | yes | +| gen_path_expr.rs:8:13:8:35 | ...::foo | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | getNumberOfAttrs: | 0 | hasPath: | yes | +| gen_path_pat.rs:5:11:5:11 | x | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | getNumberOfAttrs: | 0 | hasPath: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr.ql b/rust/ql/test/extractor-tests/generated/Path/PathExpr.ql index 4d472add336..62db075a1ac 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathExpr.ql +++ b/rust/ql/test/extractor-tests/generated/Path/PathExpr.ql @@ -2,10 +2,19 @@ import codeql.rust.elements import TestUtils -from PathExpr x, int getNumberOfAttrs, string hasPath +from + PathExpr x, string hasResolvedPath, string hasResolvedCrateOrigin, int getNumberOfAttrs, + string hasPath where toBeTested(x) and not x.isUnknown() and + (if x.hasResolvedPath() then hasResolvedPath = "yes" else hasResolvedPath = "no") and + ( + if x.hasResolvedCrateOrigin() + then hasResolvedCrateOrigin = "yes" + else hasResolvedCrateOrigin = "no" + ) and getNumberOfAttrs = x.getNumberOfAttrs() and if x.hasPath() then hasPath = "yes" else hasPath = "no" -select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasPath:", hasPath +select x, "hasResolvedPath:", hasResolvedPath, "hasResolvedCrateOrigin:", hasResolvedCrateOrigin, + "getNumberOfAttrs:", getNumberOfAttrs, "hasPath:", hasPath diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedCrateOrigin.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedCrateOrigin.ql new file mode 100644 index 00000000000..24e07918484 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from PathExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getResolvedCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedPath.expected b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedPath.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedPath.ql b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedPath.ql new file mode 100644 index 00000000000..10e6ceb2a0b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from PathExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getResolvedPath() diff --git a/rust/ql/test/extractor-tests/generated/Path/PathPat.expected b/rust/ql/test/extractor-tests/generated/Path/PathPat.expected index 159f006eecb..cf90175a84c 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathPat.expected +++ b/rust/ql/test/extractor-tests/generated/Path/PathPat.expected @@ -1 +1 @@ -| gen_path_pat.rs:6:9:6:16 | ...::Bar | hasPath: | yes | +| gen_path_pat.rs:6:9:6:16 | ...::Bar | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathPat.ql b/rust/ql/test/extractor-tests/generated/Path/PathPat.ql index 3e6cce8f151..a105c20c39e 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathPat.ql +++ b/rust/ql/test/extractor-tests/generated/Path/PathPat.ql @@ -2,9 +2,16 @@ import codeql.rust.elements import TestUtils -from PathPat x, string hasPath +from PathPat x, string hasResolvedPath, string hasResolvedCrateOrigin, string hasPath where toBeTested(x) and not x.isUnknown() and + (if x.hasResolvedPath() then hasResolvedPath = "yes" else hasResolvedPath = "no") and + ( + if x.hasResolvedCrateOrigin() + then hasResolvedCrateOrigin = "yes" + else hasResolvedCrateOrigin = "no" + ) and if x.hasPath() then hasPath = "yes" else hasPath = "no" -select x, "hasPath:", hasPath +select x, "hasResolvedPath:", hasResolvedPath, "hasResolvedCrateOrigin:", hasResolvedCrateOrigin, + "hasPath:", hasPath diff --git a/rust/ql/test/extractor-tests/generated/Path/PathPat_getResolvedCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/Path/PathPat_getResolvedCrateOrigin.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/Path/PathPat_getResolvedCrateOrigin.ql similarity index 91% rename from rust/ql/test/extractor-tests/generated/Path/Path_getResolvedCrateOrigin.ql rename to rust/ql/test/extractor-tests/generated/Path/PathPat_getResolvedCrateOrigin.ql index c998981364f..7ed41155d77 100644 --- a/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedCrateOrigin.ql +++ b/rust/ql/test/extractor-tests/generated/Path/PathPat_getResolvedCrateOrigin.ql @@ -2,6 +2,6 @@ import codeql.rust.elements import TestUtils -from Path x +from PathPat x where toBeTested(x) and not x.isUnknown() select x, x.getResolvedCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/Path/PathPat_getResolvedPath.expected b/rust/ql/test/extractor-tests/generated/Path/PathPat_getResolvedPath.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedPath.ql b/rust/ql/test/extractor-tests/generated/Path/PathPat_getResolvedPath.ql similarity index 91% rename from rust/ql/test/extractor-tests/generated/Path/Path_getResolvedPath.ql rename to rust/ql/test/extractor-tests/generated/Path/PathPat_getResolvedPath.ql index c8969309836..cbe1932925a 100644 --- a/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedPath.ql +++ b/rust/ql/test/extractor-tests/generated/Path/PathPat_getResolvedPath.ql @@ -2,6 +2,6 @@ import codeql.rust.elements import TestUtils -from Path x +from PathPat x where toBeTested(x) and not x.isUnknown() select x, x.getResolvedPath() diff --git a/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedCrateOrigin.expected deleted file mode 100644 index df80e22f744..00000000000 --- a/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedCrateOrigin.expected +++ /dev/null @@ -1,2 +0,0 @@ -| gen_path_type.rs:5:14:5:29 | ...::collections | lang:std | -| gen_path_type.rs:5:14:5:48 | ...::HashMap::<...> | lang:std | diff --git a/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedPath.expected b/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedPath.expected deleted file mode 100644 index 7d1c698b0ce..00000000000 --- a/rust/ql/test/extractor-tests/generated/Path/Path_getResolvedPath.expected +++ /dev/null @@ -1,2 +0,0 @@ -| gen_path_type.rs:5:14:5:29 | ...::collections | crate::collections | -| gen_path_type.rs:5:14:5:48 | ...::HashMap::<...> | crate::collections::hash::map::HashMap | diff --git a/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr.expected b/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr.expected index 445b906bf88..90cc595d61e 100644 --- a/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr.expected +++ b/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr.expected @@ -1,4 +1,4 @@ -| gen_record_expr.rs:5:17:5:34 | Foo {...} | hasPath: | yes | hasRecordExprFieldList: | yes | -| gen_record_expr.rs:6:18:6:38 | Foo {...} | hasPath: | yes | hasRecordExprFieldList: | yes | -| gen_record_expr.rs:7:5:7:22 | Foo {...} | hasPath: | yes | hasRecordExprFieldList: | yes | -| gen_record_expr.rs:8:5:8:14 | Foo {...} | hasPath: | yes | hasRecordExprFieldList: | yes | +| gen_record_expr.rs:5:17:5:34 | Foo {...} | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | hasRecordExprFieldList: | yes | +| gen_record_expr.rs:6:18:6:38 | Foo {...} | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | hasRecordExprFieldList: | yes | +| gen_record_expr.rs:7:5:7:22 | Foo {...} | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | hasRecordExprFieldList: | yes | +| gen_record_expr.rs:8:5:8:14 | Foo {...} | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | hasRecordExprFieldList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr.ql b/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr.ql index 41cd6a41c4b..56c14f27dfd 100644 --- a/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr.ql +++ b/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr.ql @@ -2,12 +2,21 @@ import codeql.rust.elements import TestUtils -from RecordExpr x, string hasPath, string hasRecordExprFieldList +from + RecordExpr x, string hasResolvedPath, string hasResolvedCrateOrigin, string hasPath, + string hasRecordExprFieldList where toBeTested(x) and not x.isUnknown() and + (if x.hasResolvedPath() then hasResolvedPath = "yes" else hasResolvedPath = "no") and + ( + if x.hasResolvedCrateOrigin() + then hasResolvedCrateOrigin = "yes" + else hasResolvedCrateOrigin = "no" + ) and (if x.hasPath() then hasPath = "yes" else hasPath = "no") and if x.hasRecordExprFieldList() then hasRecordExprFieldList = "yes" else hasRecordExprFieldList = "no" -select x, "hasPath:", hasPath, "hasRecordExprFieldList:", hasRecordExprFieldList +select x, "hasResolvedPath:", hasResolvedPath, "hasResolvedCrateOrigin:", hasResolvedCrateOrigin, + "hasPath:", hasPath, "hasRecordExprFieldList:", hasRecordExprFieldList diff --git a/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedCrateOrigin.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedCrateOrigin.ql new file mode 100644 index 00000000000..25635cb050f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from RecordExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getResolvedCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedPath.expected b/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedPath.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedPath.ql b/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedPath.ql new file mode 100644 index 00000000000..0f3230f3314 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from RecordExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getResolvedPath() diff --git a/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat.expected b/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat.expected index 8d7f96229ad..9b996be2368 100644 --- a/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat.expected +++ b/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat.expected @@ -1,2 +1,2 @@ -| gen_record_pat.rs:6:9:6:26 | Foo {...} | hasPath: | yes | hasRecordPatFieldList: | yes | -| gen_record_pat.rs:7:9:7:18 | Foo {...} | hasPath: | yes | hasRecordPatFieldList: | yes | +| gen_record_pat.rs:6:9:6:26 | Foo {...} | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | hasRecordPatFieldList: | yes | +| gen_record_pat.rs:7:9:7:18 | Foo {...} | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | hasRecordPatFieldList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat.ql b/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat.ql index 19bc5ea6e3a..3b079777306 100644 --- a/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat.ql +++ b/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat.ql @@ -2,10 +2,19 @@ import codeql.rust.elements import TestUtils -from RecordPat x, string hasPath, string hasRecordPatFieldList +from + RecordPat x, string hasResolvedPath, string hasResolvedCrateOrigin, string hasPath, + string hasRecordPatFieldList where toBeTested(x) and not x.isUnknown() and + (if x.hasResolvedPath() then hasResolvedPath = "yes" else hasResolvedPath = "no") and + ( + if x.hasResolvedCrateOrigin() + then hasResolvedCrateOrigin = "yes" + else hasResolvedCrateOrigin = "no" + ) and (if x.hasPath() then hasPath = "yes" else hasPath = "no") and if x.hasRecordPatFieldList() then hasRecordPatFieldList = "yes" else hasRecordPatFieldList = "no" -select x, "hasPath:", hasPath, "hasRecordPatFieldList:", hasRecordPatFieldList +select x, "hasResolvedPath:", hasResolvedPath, "hasResolvedCrateOrigin:", hasResolvedCrateOrigin, + "hasPath:", hasPath, "hasRecordPatFieldList:", hasRecordPatFieldList diff --git a/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getResolvedCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getResolvedCrateOrigin.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getResolvedCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getResolvedCrateOrigin.ql new file mode 100644 index 00000000000..f80865d0515 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getResolvedCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from RecordPat x +where toBeTested(x) and not x.isUnknown() +select x, x.getResolvedCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getResolvedPath.expected b/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getResolvedPath.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getResolvedPath.ql b/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getResolvedPath.ql new file mode 100644 index 00000000000..a816942e47b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getResolvedPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from RecordPat x +where toBeTested(x) and not x.isUnknown() +select x, x.getResolvedPath() diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.expected b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.expected index a0d12cc8509..9fa41161bcb 100644 --- a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.expected +++ b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.expected @@ -1,3 +1,3 @@ -| gen_tuple_struct_pat.rs:6:9:6:27 | TupleStructPat | getNumberOfFields: | 4 | hasPath: | yes | -| gen_tuple_struct_pat.rs:7:9:7:20 | TupleStructPat | getNumberOfFields: | 2 | hasPath: | yes | -| gen_tuple_struct_pat.rs:8:9:8:17 | TupleStructPat | getNumberOfFields: | 1 | hasPath: | yes | +| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | getNumberOfFields: | 4 | hasPath: | yes | +| gen_tuple_struct_pat.rs:7:9:7:20 | Tuple(...) | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | getNumberOfFields: | 2 | hasPath: | yes | +| gen_tuple_struct_pat.rs:8:9:8:17 | Tuple(...) | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | getNumberOfFields: | 1 | hasPath: | yes | diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql index d12f3427df5..14ba21627af 100644 --- a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql +++ b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql @@ -2,10 +2,19 @@ import codeql.rust.elements import TestUtils -from TupleStructPat x, int getNumberOfFields, string hasPath +from + TupleStructPat x, string hasResolvedPath, string hasResolvedCrateOrigin, int getNumberOfFields, + string hasPath where toBeTested(x) and not x.isUnknown() and + (if x.hasResolvedPath() then hasResolvedPath = "yes" else hasResolvedPath = "no") and + ( + if x.hasResolvedCrateOrigin() + then hasResolvedCrateOrigin = "yes" + else hasResolvedCrateOrigin = "no" + ) and getNumberOfFields = x.getNumberOfFields() and if x.hasPath() then hasPath = "yes" else hasPath = "no" -select x, "getNumberOfFields:", getNumberOfFields, "hasPath:", hasPath +select x, "hasResolvedPath:", hasResolvedPath, "hasResolvedCrateOrigin:", hasResolvedCrateOrigin, + "getNumberOfFields:", getNumberOfFields, "hasPath:", hasPath diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.expected b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.expected index 5885cbcea3e..21e1a701963 100644 --- a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.expected +++ b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.expected @@ -1,7 +1,7 @@ -| gen_tuple_struct_pat.rs:6:9:6:27 | TupleStructPat | 0 | gen_tuple_struct_pat.rs:6:15:6:17 | "a" | -| gen_tuple_struct_pat.rs:6:9:6:27 | TupleStructPat | 1 | gen_tuple_struct_pat.rs:6:20:6:20 | 1 | -| gen_tuple_struct_pat.rs:6:9:6:27 | TupleStructPat | 2 | gen_tuple_struct_pat.rs:6:23:6:23 | 2 | -| gen_tuple_struct_pat.rs:6:9:6:27 | TupleStructPat | 3 | gen_tuple_struct_pat.rs:6:26:6:26 | 3 | -| gen_tuple_struct_pat.rs:7:9:7:20 | TupleStructPat | 0 | gen_tuple_struct_pat.rs:7:15:7:16 | .. | -| gen_tuple_struct_pat.rs:7:9:7:20 | TupleStructPat | 1 | gen_tuple_struct_pat.rs:7:19:7:19 | 3 | -| gen_tuple_struct_pat.rs:8:9:8:17 | TupleStructPat | 0 | gen_tuple_struct_pat.rs:8:15:8:16 | .. | +| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | 0 | gen_tuple_struct_pat.rs:6:15:6:17 | "a" | +| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | 1 | gen_tuple_struct_pat.rs:6:20:6:20 | 1 | +| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | 2 | gen_tuple_struct_pat.rs:6:23:6:23 | 2 | +| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | 3 | gen_tuple_struct_pat.rs:6:26:6:26 | 3 | +| gen_tuple_struct_pat.rs:7:9:7:20 | Tuple(...) | 0 | gen_tuple_struct_pat.rs:7:15:7:16 | .. | +| gen_tuple_struct_pat.rs:7:9:7:20 | Tuple(...) | 1 | gen_tuple_struct_pat.rs:7:19:7:19 | 3 | +| gen_tuple_struct_pat.rs:8:9:8:17 | Tuple(...) | 0 | gen_tuple_struct_pat.rs:8:15:8:16 | .. | diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getPath.expected b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getPath.expected index 0c07d081720..34f30ed8ae1 100644 --- a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getPath.expected +++ b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getPath.expected @@ -1,3 +1,3 @@ -| gen_tuple_struct_pat.rs:6:9:6:27 | TupleStructPat | gen_tuple_struct_pat.rs:6:9:6:13 | Tuple | -| gen_tuple_struct_pat.rs:7:9:7:20 | TupleStructPat | gen_tuple_struct_pat.rs:7:9:7:13 | Tuple | -| gen_tuple_struct_pat.rs:8:9:8:17 | TupleStructPat | gen_tuple_struct_pat.rs:8:9:8:13 | Tuple | +| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | gen_tuple_struct_pat.rs:6:9:6:13 | Tuple | +| gen_tuple_struct_pat.rs:7:9:7:20 | Tuple(...) | gen_tuple_struct_pat.rs:7:9:7:13 | Tuple | +| gen_tuple_struct_pat.rs:8:9:8:17 | Tuple(...) | gen_tuple_struct_pat.rs:8:9:8:13 | Tuple | diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedCrateOrigin.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedCrateOrigin.ql new file mode 100644 index 00000000000..144302946a9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TupleStructPat x +where toBeTested(x) and not x.isUnknown() +select x, x.getResolvedCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedPath.expected b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedPath.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedPath.ql b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedPath.ql new file mode 100644 index 00000000000..561c303d968 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TupleStructPat x +where toBeTested(x) and not x.isUnknown() +select x, x.getResolvedPath() diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index b0d7296dbad..05a163de9bf 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -76,7 +76,7 @@ class _: ``` """ -@annotate(Path, replace_bases={AstNode: Resolvable}) +@annotate(Path) class _: """ A path. For example: @@ -114,7 +114,7 @@ class _: """ -class PathExprBase(Expr): +class PathExprBase(Expr, Resolvable): """ A path expression or a variable access in a formatting template. See `PathExpr` and `FormatTemplateVariableAccess` for further details. """ @@ -412,7 +412,7 @@ class _: """ -@annotate(RecordExpr, cfg = True) +@annotate(RecordExpr, add_bases=(Resolvable,), cfg = True) class _: """ A record expression. For example: @@ -682,7 +682,7 @@ class _: """ -@annotate(RecordPat, cfg = True) +@annotate(RecordPat, add_bases=(Resolvable,), cfg = True) class _: """ A record pattern. For example: @@ -723,7 +723,7 @@ class _: """ -@annotate(PathPat, cfg = True) +@annotate(PathPat, add_bases=(Resolvable,), cfg = True) @qltest.test_with(Path) class _: """ @@ -769,7 +769,7 @@ class _: """ -@annotate(TupleStructPat, cfg = True) +@annotate(TupleStructPat, add_bases=(Resolvable,), cfg = True) class _: """ A tuple struct pattern. For example: diff --git a/rust/schema/prelude.py b/rust/schema/prelude.py index ffd65959b5a..9b9858be6a5 100644 --- a/rust/schema/prelude.py +++ b/rust/schema/prelude.py @@ -89,7 +89,7 @@ class Addressable(AstNode): class Resolvable(AstNode): """ - Either a `Path`, or a `MethodCallExpr`. + Either a `PathExpr`, a `PathPat`, or a `MethodCallExpr`. """ resolved_path: optional[string] | rust.detach | ql.internal resolved_crate_origin: optional[string] | rust.detach | ql.internal From c46f44da5f17a6b14a36d47c978780d94e942b19 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Fri, 29 Nov 2024 15:55:51 +0100 Subject: [PATCH 2/9] Rust: fix QL compilation errors --- rust/extractor/src/generated/.generated.list | 2 +- rust/extractor/src/generated/top.rs | 675 ++++++++++-------- rust/ql/.generated.list | 49 +- rust/ql/.gitattributes | 5 +- .../internal/generated/CfgNodes.qll | 50 -- .../rust/dataflow/internal/DataFlowImpl.qll | 30 +- rust/ql/lib/codeql/rust/elements.qll | 1 + .../lib/codeql/rust/elements/PathAstNode.qll | 13 + rust/ql/lib/codeql/rust/elements/PathExpr.qll | 2 +- .../lib/codeql/rust/elements/PathExprBase.qll | 1 - rust/ql/lib/codeql/rust/elements/PathPat.qll | 3 +- .../lib/codeql/rust/elements/RecordExpr.qll | 3 +- .../ql/lib/codeql/rust/elements/RecordPat.qll | 3 +- .../lib/codeql/rust/elements/Resolvable.qll | 2 +- .../codeql/rust/elements/TupleStructPat.qll | 3 +- .../elements/internal/PathAstNodeImpl.qll | 19 + .../rust/elements/internal/ResolvableImpl.qll | 2 +- .../internal/generated/ParentChild.qll | 231 +++--- .../internal/generated/PathAstNode.qll | 36 + .../elements/internal/generated/PathExpr.qll | 19 +- .../internal/generated/PathExprBase.qll | 3 +- .../elements/internal/generated/PathPat.qll | 17 +- .../rust/elements/internal/generated/Raw.qll | 178 +++-- .../internal/generated/RecordExpr.qll | 18 +- .../elements/internal/generated/RecordPat.qll | 18 +- .../internal/generated/Resolvable.qll | 2 +- .../elements/internal/generated/Synth.qll | 60 +- .../internal/generated/TupleStructPat.qll | 20 +- .../ql/lib/codeql/rust/frameworks/Reqwest.qll | 5 +- .../lib/codeql/rust/frameworks/stdlib/Env.qll | 6 +- rust/ql/lib/rust.dbscheme | 114 ++- .../security/CWE-696/BadCtorInitialization.ql | 2 +- .../FormatTemplateVariableAccess.expected | 10 +- .../FormatTemplateVariableAccess.ql | 12 +- ...ableAccess_getResolvedCrateOrigin.expected | 0 ...teVariableAccess_getResolvedCrateOrigin.ql | 7 - ...ateVariableAccess_getResolvedPath.expected | 0 ...tTemplateVariableAccess_getResolvedPath.ql | 7 - .../generated/Path/PathExpr.expected | 12 +- .../generated/Path/PathExpr.ql | 10 +- .../TupleStructPat/TupleStructPat.expected | 6 +- .../TupleStructPat/TupleStructPat.ql | 10 +- .../dataflow/sources/InlineFlow.ql | 6 +- rust/schema/annotations.py | 17 +- rust/schema/prelude.py | 9 +- 45 files changed, 855 insertions(+), 843 deletions(-) create mode 100644 rust/ql/lib/codeql/rust/elements/PathAstNode.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/PathAstNodeImpl.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/generated/PathAstNode.qll delete mode 100644 rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedCrateOrigin.expected delete mode 100644 rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedCrateOrigin.ql delete mode 100644 rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedPath.expected delete mode 100644 rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedPath.ql diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index 8ca2c6931b1..cb1f2ee7ca5 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 8db75515b09f6c96beb8c2895e7495350e76557d01399de5faf6c314a45ce594 8db75515b09f6c96beb8c2895e7495350e76557d01399de5faf6c314a45ce594 +top.rs 4b7dc25409974b210c908c4a15d5b69d242c07305e6e78c9dfe0fa434c22e2bd 4b7dc25409974b210c908c4a15d5b69d242c07305e6e78c9dfe0fa434c22e2bd diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index 8cdec4c9b9f..3a1fc7bea67 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -6055,6 +6055,51 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct PathAstNode { + _unused: () +} + +impl trap::TrapClass for PathAstNode { + fn class_name() -> &'static str { "PathAstNode" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme PathAstNode is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme PathAstNode is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme PathAstNode is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme PathAstNode is a subclass of Resolvable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct PathExprBase { _unused: () @@ -6100,83 +6145,6 @@ impl From> for trap::Label { } } -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme PathExprBase is a subclass of Resolvable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -#[derive(Debug)] -pub struct PathPat { - pub id: trap::TrapId, - pub path: Option>, -} - -impl trap::TrapEntry for PathPat { - 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("path_pats", vec![id.into()]); - if let Some(v) = self.path { - out.add_tuple("path_pat_paths", vec![id.into(), v.into()]); - } - } -} - -impl trap::TrapClass for PathPat { - fn class_name() -> &'static str { "PathPat" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme PathPat is a subclass of AstNode - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme PathPat is a subclass of Element - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme PathPat is a subclass of Locatable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme PathPat is a subclass of Pat - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme PathPat is a subclass of Resolvable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct PathType { pub id: trap::TrapId, @@ -6508,78 +6476,6 @@ impl From> for trap::Label { } } -#[derive(Debug)] -pub struct RecordExpr { - pub id: trap::TrapId, - pub path: Option>, - pub record_expr_field_list: Option>, -} - -impl trap::TrapEntry for RecordExpr { - 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("record_exprs", vec![id.into()]); - if let Some(v) = self.path { - out.add_tuple("record_expr_paths", vec![id.into(), v.into()]); - } - if let Some(v) = self.record_expr_field_list { - out.add_tuple("record_expr_record_expr_field_lists", vec![id.into(), v.into()]); - } - } -} - -impl trap::TrapClass for RecordExpr { - fn class_name() -> &'static str { "RecordExpr" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme RecordExpr is a subclass of AstNode - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme RecordExpr is a subclass of Element - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme RecordExpr is a subclass of Expr - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme RecordExpr is a subclass of Locatable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme RecordExpr is a subclass of Resolvable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct RecordFieldList { pub id: trap::TrapId, @@ -6639,78 +6535,6 @@ impl From> for trap::Label { } } -#[derive(Debug)] -pub struct RecordPat { - pub id: trap::TrapId, - pub path: Option>, - pub record_pat_field_list: Option>, -} - -impl trap::TrapEntry for RecordPat { - 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("record_pats", vec![id.into()]); - if let Some(v) = self.path { - out.add_tuple("record_pat_paths", vec![id.into(), v.into()]); - } - if let Some(v) = self.record_pat_field_list { - out.add_tuple("record_pat_record_pat_field_lists", vec![id.into(), v.into()]); - } - } -} - -impl trap::TrapClass for RecordPat { - fn class_name() -> &'static str { "RecordPat" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme RecordPat is a subclass of AstNode - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme RecordPat is a subclass of Element - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme RecordPat is a subclass of Locatable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme RecordPat is a subclass of Pat - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme RecordPat is a subclass of Resolvable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct RefExpr { pub id: trap::TrapId, @@ -7475,78 +7299,6 @@ impl From> for trap::Label { } } -#[derive(Debug)] -pub struct TupleStructPat { - pub id: trap::TrapId, - pub fields: Vec>, - pub path: Option>, -} - -impl trap::TrapEntry for TupleStructPat { - 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("tuple_struct_pats", vec![id.into()]); - for (i, v) in self.fields.into_iter().enumerate() { - out.add_tuple("tuple_struct_pat_fields", vec![id.into(), i.into(), v.into()]); - } - if let Some(v) = self.path { - out.add_tuple("tuple_struct_pat_paths", vec![id.into(), v.into()]); - } - } -} - -impl trap::TrapClass for TupleStructPat { - fn class_name() -> &'static str { "TupleStructPat" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme TupleStructPat is a subclass of AstNode - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme TupleStructPat is a subclass of Element - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme TupleStructPat is a subclass of Locatable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme TupleStructPat is a subclass of Pat - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme TupleStructPat is a subclass of Resolvable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct TupleType { pub id: trap::TrapId, @@ -9411,8 +9163,8 @@ impl From> for trap::Label { #[derive(Debug)] pub struct PathExpr { pub id: trap::TrapId, - pub attrs: Vec>, pub path: Option>, + pub attrs: Vec>, } impl trap::TrapEntry for PathExpr { @@ -9422,12 +9174,12 @@ impl trap::TrapEntry for PathExpr { fn emit(self, id: trap::Label, out: &mut trap::Writer) { out.add_tuple("path_exprs", vec![id.into()]); + if let Some(v) = self.path { + out.add_tuple("path_ast_node_paths", vec![id.into(), v.into()]); + } for (i, v) in self.attrs.into_iter().enumerate() { out.add_tuple("path_expr_attrs", vec![id.into(), i.into(), v.into()]); } - if let Some(v) = self.path { - out.add_tuple("path_expr_paths", vec![id.into(), v.into()]); - } } } @@ -9471,6 +9223,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme PathExpr is a subclass of PathAstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + impl From> for trap::Label { fn from(value: trap::Label) -> Self { // SAFETY: this is safe because in the dbscheme PathExpr is a subclass of PathExprBase @@ -9489,6 +9250,245 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct PathPat { + pub id: trap::TrapId, + pub path: Option>, +} + +impl trap::TrapEntry for PathPat { + 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("path_pats", vec![id.into()]); + if let Some(v) = self.path { + out.add_tuple("path_ast_node_paths", vec![id.into(), v.into()]); + } + } +} + +impl trap::TrapClass for PathPat { + fn class_name() -> &'static str { "PathPat" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme PathPat is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme PathPat is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme PathPat is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme PathPat is a subclass of Pat + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme PathPat is a subclass of PathAstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme PathPat is a subclass of Resolvable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +#[derive(Debug)] +pub struct RecordExpr { + pub id: trap::TrapId, + pub path: Option>, + pub record_expr_field_list: Option>, +} + +impl trap::TrapEntry for RecordExpr { + 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("record_exprs", vec![id.into()]); + if let Some(v) = self.path { + out.add_tuple("path_ast_node_paths", vec![id.into(), v.into()]); + } + if let Some(v) = self.record_expr_field_list { + out.add_tuple("record_expr_record_expr_field_lists", vec![id.into(), v.into()]); + } + } +} + +impl trap::TrapClass for RecordExpr { + fn class_name() -> &'static str { "RecordExpr" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme RecordExpr is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme RecordExpr is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme RecordExpr is a subclass of Expr + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme RecordExpr is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme RecordExpr is a subclass of PathAstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme RecordExpr is a subclass of Resolvable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +#[derive(Debug)] +pub struct RecordPat { + pub id: trap::TrapId, + pub path: Option>, + pub record_pat_field_list: Option>, +} + +impl trap::TrapEntry for RecordPat { + 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("record_pats", vec![id.into()]); + if let Some(v) = self.path { + out.add_tuple("path_ast_node_paths", vec![id.into(), v.into()]); + } + if let Some(v) = self.record_pat_field_list { + out.add_tuple("record_pat_record_pat_field_lists", vec![id.into(), v.into()]); + } + } +} + +impl trap::TrapClass for RecordPat { + fn class_name() -> &'static str { "RecordPat" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme RecordPat is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme RecordPat is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme RecordPat is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme RecordPat is a subclass of Pat + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme RecordPat is a subclass of PathAstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme RecordPat is a subclass of Resolvable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct Static { pub id: trap::TrapId, @@ -9902,6 +9902,87 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct TupleStructPat { + pub id: trap::TrapId, + pub path: Option>, + pub fields: Vec>, +} + +impl trap::TrapEntry for TupleStructPat { + 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("tuple_struct_pats", vec![id.into()]); + if let Some(v) = self.path { + out.add_tuple("path_ast_node_paths", vec![id.into(), v.into()]); + } + for (i, v) in self.fields.into_iter().enumerate() { + out.add_tuple("tuple_struct_pat_fields", vec![id.into(), i.into(), v.into()]); + } + } +} + +impl trap::TrapClass for TupleStructPat { + fn class_name() -> &'static str { "TupleStructPat" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme TupleStructPat is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme TupleStructPat is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme TupleStructPat is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme TupleStructPat is a subclass of Pat + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme TupleStructPat is a subclass of PathAstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme TupleStructPat is a subclass of Resolvable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct TypeAlias { pub id: trap::TrapId, diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index dff9541b449..b5427026044 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -1,4 +1,4 @@ -lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll a8e083c7d8c4dea6459c5e128e2123f5cf8fd14c076f2256ebda508c13d553cd 16fcc0d34097b0b37a0041281515ca028d2702eec6d9c1d03c39a1158883bdef +lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll 7411cdfc2c93ad1e70afd41edb6ba098e2bc9db77213850936a48d07b9f716c4 f2dd71fd4fd8a98681f1d931d04b28a01d6eb3987ab56aa4425e2c57316c81f6 lib/codeql/rust/elements/Abi.qll 4c973d28b6d628f5959d1f1cc793704572fd0acaae9a97dfce82ff9d73f73476 250f68350180af080f904cd34cb2af481c5c688dc93edf7365fd0ae99855e893 lib/codeql/rust/elements/Addressable.qll 13011bfd2e1556694c3d440cc34af8527da4df49ad92b62f2939d3699ff2cea5 ddb25935f7553a1a384b1abe2e4b4fa90ab50b952dadec32fd867afcb054f4be lib/codeql/rust/elements/ArgList.qll 661f5100f5d3ef8351452d9058b663a2a5c720eea8cf11bedd628969741486a2 28e424aac01a90fb58cd6f9f83c7e4cf379eea39e636bc0ba07efc818be71c71 @@ -102,28 +102,29 @@ lib/codeql/rust/elements/ParenPat.qll 40d033de6c85ad042223e0da80479adebab3549439 lib/codeql/rust/elements/ParenType.qll e1f5695b143c97b98ccdb460a5cf872461cfc13b83a4f005f26c288dc0afae10 1164f8efae7f255925411bddb33939fab0bf1c07955a16fef173b3f4675d09ae lib/codeql/rust/elements/Pat.qll 56211c5cb4709e7c12a2bfd2da5e413a451672d99e23a8386c08ad0b999fd45c b1b1893a13a75c4f0390f7e2a14ee98a46f067cfdc991a8d43adc82497d20aff lib/codeql/rust/elements/Path.qll 16264a9c978a3027f623530e386a9ad16541305b252fed5e1bedcfbe1d6475d5 8c21063c7f344ce686342e7c12542fec05004e364681f7a31b65f5ee9263a46d -lib/codeql/rust/elements/PathExpr.qll 906df1d80c662b79f1b0b0428c39754b7f8dbcb2234919dd45dd8206a099dd36 1d6015afab6378c926c5838c9a5772cfcfeedf474e2eeca3e46085300ff8d4e1 -lib/codeql/rust/elements/PathExprBase.qll db8702a2e2cec7c1daaad38649c27b657759103ca451dfa9d34b9be873fdc0af d770e983fb55e06f3fcee6b7511cf5d4ed4c4f6a18d8b1d1f14553cdbe8666df -lib/codeql/rust/elements/PathPat.qll 9d0b29b964bfe3a90af4c9930868a3d2046d2210a1575f9b9af84f6fd3fccbab 21748a5bd01d5531c846e6b7c1cc9fddf4adc0c959843e668df200a2490a5f94 +lib/codeql/rust/elements/PathAstNode.qll c5c8627caaf863089d4d6004e206b2e62bc466db2ed5da9f3f443bf3dc29faf9 01107b1ce17cbee08a764962fb13d3f02edbd10675fa5bd89e089f03075ba443 +lib/codeql/rust/elements/PathExpr.qll 803309419841293a640e0b2f0bf5b5bcdf00dd46d275797d4bc51c2fe651c944 083cd7768a03ac11a9d892ca190334d465d183f66509613c2e87c52b36c6df7c +lib/codeql/rust/elements/PathExprBase.qll bb41092ec690ae926e3233c215dcaf1fd8e161b8a6955151949f492e02dba13a b2257072f8062d31c29c63ee1311b07e0d2eb37075f582cfc76bb542ef773198 +lib/codeql/rust/elements/PathPat.qll a7069d1dd77ba66814d6c84e135ed2975d7fcf379624079e6a76dc44b5de832e 2294d524b65ab0d038094b2a00f73feb8ab70c8f49fb4d91e9d390073205631d lib/codeql/rust/elements/PathSegment.qll 9560551cf8b65e84705e7f302e12b48330e048613129e87c0f65a7eb297a6cc3 3aa75a5fd81f8ea32bd2b4bf0c51c386de57cbe9ab035fe3ec68ad7fcf51b375 lib/codeql/rust/elements/PathType.qll 257ede178bb74ebdb8e266ebaa95082e7fb7cc8d921ef476f4df268ee8a1366c c48f6e04a8945a11f965e71819f68c00abc53a055042882b61716feda3ca63ae lib/codeql/rust/elements/PrefixExpr.qll 107e7bd111b637fd6d76026062d54c2780760b965f172ef119c50dd0714a377d 46954a9404e561c51682395729daac3bda5442113f29839d043e9605d63f7f6d lib/codeql/rust/elements/PtrType.qll b137f47a53e41b3b30c7d80dbdd6724bf15f99530ca40cc264a04af5f07aa878 b2ffdf739bfb7564d942fe54409834a59511c0b305b6d5b2219a8ee0ef594332 lib/codeql/rust/elements/RangeExpr.qll 43785bea08a6a537010db1138e68ae92eed7e481744188dfb3bad119425ff740 5e81cfbdf4617372a73d662a248a0b380c1f40988a5daefb7f00057cae10d3d4 lib/codeql/rust/elements/RangePat.qll b5c0cfc84b8a767d58593fa7102dcf4be3ff8b02ba2f5360c384fa8af4aac830 cc28399dd99630bfa50c54e641a3833abe6643137d010a0a25749d1d70e8c911 -lib/codeql/rust/elements/RecordExpr.qll d368aaf18319c0560c04d0438caf64b3b7aad3aa0cf4bbb643bfbb58d6d71091 44323e15b5a6fab187e846abe9cb530c6472ed673993c5e3679279b1286792da +lib/codeql/rust/elements/RecordExpr.qll b8541a33ef408f2070103c1db8b6ec845bc6b1d8c810f5d8d208e5eeb9f86b30 a6d9602a64c9acf48f033f06fe7e1d86382512fd378ee3044f1126726847f696 lib/codeql/rust/elements/RecordExprField.qll edac04146849e2aeca27e7bbb896c21aa2e2b15736b1e8a06ac51ab01433b3ac 7c062bd6d5dd5b1d972450fb0b3272cd9b45f94ccd668c3bd4347e2dce3279ed lib/codeql/rust/elements/RecordExprFieldList.qll 672c3854cb84090c8a2e9311c43448016dc2614ecbf86dbe404156304674e38f 01ae0ffca0bf640c61120e36fcf2c560555f4aabbd49ddce6f5c1a3561dbfc31 lib/codeql/rust/elements/RecordField.qll 9c462033cc889756876cb3d2a07e4f0d9a67064cf188cdd68e08ab21e5edc459 437254bbf6537f1a575ae344c2e23ffad7138776db8f7ebf90026c13886a2638 lib/codeql/rust/elements/RecordFieldList.qll cebab3fba41221e61cda801070a7f414b62b4fbcf2206e35462c0da35ad75c3f db092d47eea871d61541b9711d7139a99394e0ed83901a8ae60f03dfa8ed722f -lib/codeql/rust/elements/RecordPat.qll bb21f25373afd03232f8e2977134b6a10ac525f0bd654bbf95713b964b99ba0f 28313e566c86d09ae3b60df538a3c7561f73c02b8ac93eaa5ff9914b2c9b241c +lib/codeql/rust/elements/RecordPat.qll 3e31af707f72e9af42142e54b7251da8cbc88a9d5f448a4e6b3ca578f92f5680 0b459d751c26a062608ef0b6f3859e9ed1342e129b004ec218694d011955cfbd lib/codeql/rust/elements/RecordPatField.qll 7487461887e82bcf224b02628dfc64457121ab17e731e2dc7aa7e731ab16c02f f2018e55722245eb4273fb067242aaa503c43f91671a55b3a4bb51fe7bc0a03c lib/codeql/rust/elements/RecordPatFieldList.qll c3198c997f389ce95db377ca40ac69a1448f120093f37ab1c92a5a3f1f6aa0d4 9db36d274f1ec77c442ae7e38f940a65c9a92f1541f66140188b226965851535 lib/codeql/rust/elements/RefExpr.qll 91a0d3a86002289dc01ffbe8daca13e34e92e522fbb508241a9d51faf1d4a9d2 b6e63d8e6f8956d2501706d129a6f5f24b410ea6539839757c76ba950c410582 lib/codeql/rust/elements/RefPat.qll fe076bdccb454111b38f360837d180274ba8a003b4cffe910b5197cd74188089 2604c8bb2b0b47091d5fc4aa276de46fe3561e346bd98f291c3783cef402ba06 lib/codeql/rust/elements/RefType.qll 5dc6012188d5baf36cd7bf0ebc127e28e98862a3f91ea4df2f9b9c962f3a395d ddb06ebe7fb92ad7bbe86cf182270e8494b74edf91b8c841aaf7ba932e5092ac lib/codeql/rust/elements/Rename.qll 55fa06145f2160304caac0a5ce4cf6a496e41adfd66f44b3c0a1d23229ed8ce0 80262f0abf61749cdf0d5701637db359960f5404ad1dbfdd90f5048d2e7c315d -lib/codeql/rust/elements/Resolvable.qll 550d516d55b2c10e6e2afd0b9df7434448405ac8a84c4ded8b56fa1173612d32 0b59f31f411a14dd4eb0fe9df5483e4a00501a480bde6db9e6a499b9c0a57184 +lib/codeql/rust/elements/Resolvable.qll efeec2b4b14d85334ec745b9a0c5aa6f7b9f86fe3caa45b005dccaee4f5265c4 7efe0063340ba61dd31125bc770773ca23a7067893c0d1e06d149da6e9a9ee92 lib/codeql/rust/elements/RestPat.qll a898a2c396f974a52424efbc8168174416ac6ed30f90d57c81646d2c08455794 db635ead3fa236e45bbd9955c714ff0abb1e57e1ce80d99dc5bb13438475adbf lib/codeql/rust/elements/RetType.qll 36ea39240a56c504d94d5487ea9679563eef3dfe0e23bf42d992d1ab2b883518 2fe5b6f62a634c6aa30a1ecd620f3446c167669cf1285c8ef8dd5e5a6ef5fc71 lib/codeql/rust/elements/ReturnExpr.qll b87187cff55bc33c8c18558c9b88617179183d1341b322c1cab35ba07167bbdb 892f3a9df2187e745c869e67f33c228ee42754bc9e4f8f4c1718472eb8f8c80f @@ -145,7 +146,7 @@ lib/codeql/rust/elements/TupleExpr.qll 561486554f0c397bc37c87894c56507771174bfb2 lib/codeql/rust/elements/TupleField.qll e58d024fc41519b559eef36cf6081d03a786b05357e4322e7046092131ea508f cad861b23fb4cdf2fbe90595de0e4776f1db9b69c3f3825221e475bc92895351 lib/codeql/rust/elements/TupleFieldList.qll 73397eef1cf8c18286b8f5bb12fbdc9bb75eee3b7bd64d149892952b79e498a3 13ac90f466ab22e5750af9e44aff9605b9e16f8350b4eaecff6a99e83d154e25 lib/codeql/rust/elements/TuplePat.qll 028cdea43868b0fdd2fc4c31ff25b6bbb40813e8aaccf72186051a280db7632e 38c56187971671e6a9dd0c6ccccb2ee4470aa82852110c6b89884496eb4abc64 -lib/codeql/rust/elements/TupleStructPat.qll 743022ff471131aa58cd8ff131eef1568400da0ddefa5dbab1609a7ce00797d7 c6ddf777c3ee3a0f4d55c42f3af6a01e190a1e8892237c6e85c9ae65c84e39f3 +lib/codeql/rust/elements/TupleStructPat.qll da398a23eb616bf7dd586b2a87f4ab00f28623418f081cd7b1cc3de497ef1819 6573bf3f8501c30af3aeb23d96db9f5bea7ab73e2b7ef3473095c03e96c20a5c lib/codeql/rust/elements/TupleType.qll b5c798f7c9b08c8a6cc0a57fc5c36d714e70d5e955a9e87b6b309c18365d7596 ebea533ab126392344d080da1bc9efabcabb5397e93c9d213ffc71a61bb8d47c lib/codeql/rust/elements/TypeAlias.qll 64780697f5869266345d040fdaee05c62b8670b9b5c6369692f9a9dc646986fc afcc7617d0e2e16d92d2a53c3e6661fd184bf5cf21b154f121dbf4d3b7ab30e6 lib/codeql/rust/elements/TypeArg.qll 39aea9a9f0b74e8b90e957dbc3ce593cbdb1d2e0d9320428ce2e9cbfcb772e53 f1f2612633de9f534faf76c368b6154a8dc20feb9297262fcb10a8f192aa2e02 @@ -301,6 +302,7 @@ lib/codeql/rust/elements/internal/ParenExprConstructor.qll 104b67dc3fd53ab52e2a4 lib/codeql/rust/elements/internal/ParenPatConstructor.qll 9aea3c3b677755177d85c63e20234c234f530a16db20ab699de05ca3f1b59787 29f24aed0d880629a53b30550467ade09a0a778dbf88891769c1e11b0b239f98 lib/codeql/rust/elements/internal/ParenTypeConstructor.qll d62e656a4a3c8ffd4eb87d49585a7a3bfb5dbe3826fbcbd11cb87b46f34c19ae febf6535965afa0f6eac4d2b08730f5a07bbb36a7434abe0a7663d7264961a3f lib/codeql/rust/elements/internal/PatImpl.qll 37c9b1da7aa625117644e2cd74ec0b174f69a38cf66926add01786a05d5ad2ad 143685a0b4873fa0b73b204285dca956e59b32d527bfac6cc336326d244994b7 +lib/codeql/rust/elements/internal/PathAstNodeImpl.qll 5a38c42a9127fc2071a9e8f0914996d8c3763e2708805de922e42771de50f649 ebe319cce565497071118cd4c291668bbcdf5fc8942c07efc5a10181b4ce5880 lib/codeql/rust/elements/internal/PathConstructor.qll 5c6354c28faf9f28f3efee8e19bdb82773adcf4b0c1a38788b06af25bcb6bc4a 3e2aeef7b6b9cda7f7f45a6c8119c98803aa644cf6a492cf0fce318eba40fe8f lib/codeql/rust/elements/internal/PathExprBaseImpl.qll e8b09447ee41b4123f7d94c6b366b2602d8022c9644f1088c670c7794307ab2e 96b9b328771aaf19ba18d0591e85fcc915c0f930b2479b433de3bfdd2ea25249 lib/codeql/rust/elements/internal/PathExprConstructor.qll cf6e0a338a8ed2d1042bdee4c2c49be5827e8c572d8c56e828db265d39e59ae3 36a3d1b7c5cc2cf527616be787b32071b9e2a6613a4f6b3f82e2a3b0e02a516f @@ -511,12 +513,13 @@ 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 ce24b8f8ecbf0f204af200317405724063887257460c80cf250c39b2fdf37185 e7c87d37e1a0ca7ea03840017e1aa9ddb7f927f1f3b6396c0305b46aeee33db6 lib/codeql/rust/elements/internal/generated/ParenType.qll 9cc954d73f8330dcac7b475f97748b63af5c8766dee9d2f2872c0a7e4c903537 c07534c8a9c683c4a9b11d490095647e420de0a0bfc23273eaf6f31b00244273 -lib/codeql/rust/elements/internal/generated/ParentChild.qll 03c1d8e0c0d0f7e34164f6ede37bdc744790fa25b252b5b34b006c48735daef6 7675198b227e5cb357cabe6a7622f461103e3829c0135560b37013c2a914edb2 +lib/codeql/rust/elements/internal/generated/ParentChild.qll db8cf5d75d53414409fbe1c85865238a026164ea8225736f62de30f334079e1c d0d5bab0287122d754dcb50e6473d178405ba3e4d8e78a82764cbecf5cc6593c lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll bf6a86e7fcb7164624cc070dcce86d2bda50a2516b95115b87d0ebb5596e50a1 fd7a9ad4034cdebe8dfe495619c46f464630d38195313072e0bd904061b0fb00 -lib/codeql/rust/elements/internal/generated/PathExpr.qll 2096e3c1db22ee488a761690adabfc9cfdea501c99f7c5d96c0019cb113fc506 54245ce0449c4e263173213df01e079d5168a758503a5dbd61b25ad35a311140 -lib/codeql/rust/elements/internal/generated/PathExprBase.qll 696f580d56804c000983cd839671f0d0d573a9d3dbb151f500e4fe3bf900320b ebae99d1541e0d4e519599b2c5e4d734c20b7ed7ba1dbe1772f59ad7bb2c9f0f -lib/codeql/rust/elements/internal/generated/PathPat.qll 551864a9ba7d60b5662044578f0e12e6995c71710d75d8955eec2d7ab52e4d44 fedd7249e7f00229aa8632154fce2c6f1a37e017f9d4d53a5d309ba40e0c22a5 +lib/codeql/rust/elements/internal/generated/PathAstNode.qll e6d4d5bffd3c623baaaee46bc183eb31ce88795535f164f6a9b9b4d98bbd6101 168db515404933479ba6b150c72e012d28592cbc32366aefcb1bf9599dbcd183 +lib/codeql/rust/elements/internal/generated/PathExpr.qll 3c807f3b01ed24032d7d0e7a3a014452652945f86feeec963a31615084ad5721 3e5e2ea10cadb48c97aaf0fab756563c19039dcc7ec072e886ee5c7b5b06655d +lib/codeql/rust/elements/internal/generated/PathExprBase.qll d8218e201b8557fa6d9ca2c30b764e5ad9a04a2e4fb695cc7219bbd7636a6ac2 4ef178426d7095a156f4f8c459b4d16f63abc64336cb50a6cf883a5f7ee09113 +lib/codeql/rust/elements/internal/generated/PathPat.qll 003d10a4d18681da67c7b20fcb16b15047cf9cc4b1723e7674ef74e40589cc5a 955e66f6d317ca5562ad1b5b13e1cd230c29e2538b8e86f072795b0fdd8a1c66 lib/codeql/rust/elements/internal/generated/PathSegment.qll 0fa07886deb0fc4d909d7edf691238a344f2739900aafb168cbac171eb1729a8 8f4bb418d8bea5e40128a87977c57d0a9183d06d111601ad93130c8615c11465 lib/codeql/rust/elements/internal/generated/PathType.qll df6fd322ba0d99d6cb315edce8dbf099b661b84fdfcc3ad629fdd1fd066c1986 e11c8615cd7b02034b47b58f30a7b6fcbc6d33ec53303288dfd34d9a25f5a186 lib/codeql/rust/elements/internal/generated/PrefixExpr.qll c9ede5f2deb7b41bc8240969e8554f645057018fe96e7e9ad9c2924c8b14722b 5ae2e3c3dc8fa73e7026ef6534185afa6b0b5051804435d8b741dd3640c864e1 @@ -524,20 +527,20 @@ lib/codeql/rust/elements/internal/generated/PtrType.qll 40099c5a4041314b66932dfd lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll ea294a3ba33fd1bc632046c4fedbcb84dcb961a8e4599969d65893b19d90e590 ea294a3ba33fd1bc632046c4fedbcb84dcb961a8e4599969d65893b19d90e590 lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll efd93730de217cf50dcba5875595263a5eadf9f7e4e1272401342a094d158614 229b251b3d118932e31e78ac4dfb75f48b766f240f20d436062785606d44467b -lib/codeql/rust/elements/internal/generated/Raw.qll b6bfb4c58f879143b78546b9a1f657876a245facdd01f7dd944825ca9dcf3464 867f32b72030b2b234f818e07b55abc3a3b516c91162dda736b8bc761c16afd6 -lib/codeql/rust/elements/internal/generated/RecordExpr.qll 57a25e78a1e501fa6e2876b8412056fb9a50fed79645542e420789333049335e 5f3692fe36d3590ddbb4b6228adf17528a0ab91057940bd9faac000ae735bec1 +lib/codeql/rust/elements/internal/generated/Raw.qll aa46ac03eea469d7f8ea52c1b9d1f266870c3a1bcd034a9efcf3becef984d8f7 36bcd61f69be5a713d151f3583cca20ea92e3e8e09343c7ddebb618f6de8649f +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 lib/codeql/rust/elements/internal/generated/RecordField.qll 9f7840e1a2a194d5ed1d5201ab483eb01129849d49392581e0328bbc0934305c 0e019b5b8fe91bc96c7c07933c766d8a09c066d48ed96f24ae3dad303c00585e lib/codeql/rust/elements/internal/generated/RecordFieldList.qll d7bb2677338cf420b0d6371aeec781aacc2272c73413ea96b7418177ad149fb9 5ef52074b9f4ec31e7422b70efdb2e650d673b2625efdfec18a4e48c30e35cf6 -lib/codeql/rust/elements/internal/generated/RecordPat.qll 0431a89f30da9dff98b850998d58fcf4d7b475f503e9a9eddf3576965514d22a eb06e4b716f6bc4aed962d609a08679a336cfd375fbd34b2c9fce3f4642ed385 +lib/codeql/rust/elements/internal/generated/RecordPat.qll 32a495778fc479d597cb722742a3b8821c4af45944773a055e6be0660d93daca 539b1af822c3f20ce093a03152b18047e9cbad1a55014d6e5e4d8bf27d260196 lib/codeql/rust/elements/internal/generated/RecordPatField.qll f17b1aa265091fd8309fd90d5c3822d170870e304f160225327de5a844a9aed4 0458e39dbe88060b4b664692cf0b41ebf4364de268d9417658c14c883c9c1b33 lib/codeql/rust/elements/internal/generated/RecordPatFieldList.qll 08d4740bbb519f15ab20b694b3c45e396a2a59cce0f68fa4b9698348784cae43 99919809607ae61c707f591ee609c50bcfb90d5b4f9c263f6b8e78658d21b605 lib/codeql/rust/elements/internal/generated/RefExpr.qll 7d995884e3dc1c25fc719f5d7253179344d63650e217e9ff6530285fe7a57f64 f2c3c12551deea4964b66553fb9b6423ee16fec53bd63db4796191aa60dc6c66 lib/codeql/rust/elements/internal/generated/RefPat.qll 5c4d908f851d89f42cf765007c46ac4199200f9b997f368d5b0e2a435efa82cd 42fd637bc98b5a9275386f1c5fb3ae8c4681987289a89b060991416a25131306 lib/codeql/rust/elements/internal/generated/RefType.qll 3603a3e000acc25c5e675bd4bc4a5551b8f63851591e1e9247709e48d1769dc5 91bea4a1d5ef0779d575567253cd007157d3982524e63a7c49c5cae85cb42e5f lib/codeql/rust/elements/internal/generated/Rename.qll d23f999dab4863f9412e142756f956d79867a3579bd077c56993bdde0a5ac2f1 9256c487d3614bf3d22faa294314f490cf312ab526b8de0882e3a4a371434931 -lib/codeql/rust/elements/internal/generated/Resolvable.qll 5579fbd90b106c36828b713b6344c5547d3e449078702efa43b21400f69a1aa8 6ad7f9a0285eb4c69c62de7f23ac1da517f3d468407547685d6607d90fd30641 +lib/codeql/rust/elements/internal/generated/Resolvable.qll 586eefb01794220679c3b5d69c059d50c2238cf78ab33efe7185bbd07dea8dbd 1b7c7297d541b9de9e881d18fed4ae40dd327396366a3a6f52a24b85685fa9c1 lib/codeql/rust/elements/internal/generated/RestPat.qll b3a4206e68cf67a0310a466721e7c4b3ab855e65490d589d3d856ad333b3d5e8 30b471bec377784f61d73ef93e74fc0dcec7f512ac4b8791d1ca65f2bcea14b8 lib/codeql/rust/elements/internal/generated/RetType.qll a26860cd526b339b9527c089d126c5486e678dd080e88c60ea2fe641e7d661fd a83c1ce32fd043945ad455b892a60c2a9b6a62d7a5aadf121c4b4056d1dfb094 lib/codeql/rust/elements/internal/generated/ReturnExpr.qll c9c05400d326cd8e0da11c3bfa524daa08b2579ecaee80e468076e5dd7911d56 e7694926727220f46a7617b6ca336767450e359c6fa3782e82b1e21d85d37268 @@ -550,7 +553,7 @@ lib/codeql/rust/elements/internal/generated/Static.qll 5fbd6879858cf356d4bdaa6da 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 1aeee823f44fe6ee94ca8dcace6b6cae952be9fe3f50b4c500a392d01139f322 2cdd764b8c508e8a8288368fc8ac729c4469f08304711960de6ef9ec72434942 +lib/codeql/rust/elements/internal/generated/Synth.qll b635676938a62e67c8c0db6eb21c6d2cbce0d9d3d429f91f8f85bd79c0c4d7c0 444e2bb62325bd1dc1d3a3e9c2b8ae161f0eb70659cf809ce069eb6886417bc4 lib/codeql/rust/elements/internal/generated/SynthConstructors.qll e929c49ea60810a2bbc19ad38110b8bbaf21db54dae90393b21a3459a54abf6f e929c49ea60810a2bbc19ad38110b8bbaf21db54dae90393b21a3459a54abf6f lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b lib/codeql/rust/elements/internal/generated/TokenTree.qll 8577c2b097c1be2f0f7daa5acfcf146f78674a424d99563e08a84dd3e6d91b46 d2f30764e84dbfc0a6a5d3d8a5f935cd432413688cb32da9c94e420fbc10665c @@ -561,7 +564,7 @@ lib/codeql/rust/elements/internal/generated/TupleExpr.qll 75186da7c077287b9a86fc lib/codeql/rust/elements/internal/generated/TupleField.qll d2580e046a576a1a7669463956c929912e383de304854a86eea5e45807a0a882 b41cbc48fcbb56543705e6bf708b72156307c71735d2ed42b97d8bf3c1099dd1 lib/codeql/rust/elements/internal/generated/TupleFieldList.qll 9d4981d04c2ee005e41035b9699f03bff270c4e0515af5482d02e614a0b1a875 4e60b857fbcb668fa1a001e0eff03f1aa3a7465d32ce68e23544b705fa54fc5d lib/codeql/rust/elements/internal/generated/TuplePat.qll d61163a380f3f2c1709080e2df69a90764509af060e607e27e832862e4dae18c 108b7db493a21fe1fa0db99fceee952aabb0a128eac41e050877ab9136407403 -lib/codeql/rust/elements/internal/generated/TupleStructPat.qll 987745c3c58df38a41f14fce1b59ee82859de7706680f23e52010937fc4646ee 91446a75fd63af87566ff347a7c25c3f6c9cbd75c0d72bdc99590a1af27e8ef4 +lib/codeql/rust/elements/internal/generated/TupleStructPat.qll 3864e3b88a23558397a885cd8caca25aa5e8a9e9e372b688d357bb8fe38ee3b8 1889e0ea07cfb9ad7347510906b5abf14374d1306dece1606ebc228b19bf0ad2 lib/codeql/rust/elements/internal/generated/TupleType.qll 7fae8e881157a24c4ce4f960269ba8010e227a81d3055b571f861f7196f868e2 18085a19a102df8e2cded938b49709225e89f0ce68b4a003310647bb259a6bd3 lib/codeql/rust/elements/internal/generated/TypeAlias.qll af02bb172b6f2d7f5eab8645a5a219eee8a4bbc445838f5739f18ba217c7e608 6d871471d673adae99c8b146f6f7ab204f24d52b5013b4582037a42b279c9f05 lib/codeql/rust/elements/internal/generated/TypeArg.qll fe4441b3faa44e542c43a85353347df23d3f74da0c4b17cb0fdc60f5aca9dee7 1473d044e979e7cb6628525ffd454549cd8a37560488c695f534243946cf83bc @@ -585,7 +588,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 ced76fbeebc6e2e972ecaed65ef97851f90a215cf330f28a0f31a253f1c03442 ced76fbeebc6e2e972ecaed65ef97851f90a215cf330f28a0f31a253f1c03442 +lib/codeql/rust/elements.qll ba73bcb718837cc3d9d6f283609a869dc48b7848109e07496d5f52723dc2e62c ba73bcb718837cc3d9d6f283609a869dc48b7848109e07496d5f52723dc2e62c 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 @@ -725,9 +728,7 @@ test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getFormat.ql 02d3fa test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getTemplate.ql c912ac37275cbe7b3b29607bed1a3190c80779436422c14a475113e1bfd91a54 ef90f67a9b952a38ce557b1afbf0b5ce8551e83ddfaad8309a0c9523e40b5ea7 test/extractor-tests/generated/FormatArgsExpr/FormatArgument.ql 7a7ee3a3322b4af8cb3b525cfed8cc9719d136ea80aa6b3fb30c7e16394dd93f 5aa8a77d7741b02f8ceb9e5991efa4c2c43c6f1624989218990e985108dae535 test/extractor-tests/generated/FormatArgsExpr/FormatArgument_getVariable.ql 7bd4ec3dde2ef0463585794101e6cc426c368b0e4ab95fbb1f24f8f0a76cf471 e7b01e8b21df5b22c51643e2c909c6fc4ca96fda41b3290c907ba228abe8669b -test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql f1b727be65d0563c8dffab61248a1b9a59b221fdaae28d3a3fbde3fb17592f5b dbf2395213d261bcf01c3258ab51f073e7934d58af5e2044b64292ed8f71f9a4 -test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedCrateOrigin.ql f7288c9be7b31a6c78da9e2f4e774522013c2db8ff457dfb5edced009b65ebdd 58ea795ccf649f733c995c49da4680f68599d58f466cb63415a12f4cc9d0ab11 -test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedPath.ql 56a0347a705b5719a97f520b2c0777c97e73bc2d977dc5d00910679950eae5ca 1ef63883dd83a22f56f226348e8fb9bf72817df19ff2708a4559a5f7b8a2855a +test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql 2793ba1ff52182dab992d82d3767a000928f6b2fbfdb621349cafc183f0d2480 c3777d03214f7feb9020de3ce45af6556129e39e9b30d083de605b70ab9a0a12 test/extractor-tests/generated/FormatArgsExpr/Format_getArgument.ql 26d592398a17795427b5b6b51ff4a013ee15c31443e732a000baca5f2e65acca 7940a864b84b89e84d7fb186599cb8b6bcbead7141c592b8ab0c59fcd380d5fb test/extractor-tests/generated/Function/Function.ql c1c2a9b68c35f839ccd2b5e62e87d1acd94dcc2a3dc4c307c269b84b2a0806e6 1c446f19d2f81dd139aa5a1578d1b165e13bddbaeab8cfee8f0430bced3a99ab test/extractor-tests/generated/Function/Function_getAbi.ql e5c9c97de036ddd51cae5d99d41847c35c6b2eabbbd145f4467cb501edc606d8 0b81511528bd0ef9e63b19edfc3cb638d8af43eb87d018fad69d6ef8f8221454 @@ -897,7 +898,7 @@ test/extractor-tests/generated/ParenPat/ParenPat_getPat.ql 96f3db0ec4e71fd870619 test/extractor-tests/generated/ParenType/ParenType.ql 81c8ad667397ce36157941abd9b879e9305a440018853af4528eb737ae4d2935 3ef3b86203b0143be2d7f7f4833f55fd6c226cb9205e3c1940b6c2a1371622f3 test/extractor-tests/generated/ParenType/ParenType_getTy.ql 41dd6605e7b348618156712b559e2f1b6aac02d6c727e8cbf8653530794ec969 30ac6611c730e76cfb75f98efcf817783a50cec0cf3b3197459d7642f74dde85 test/extractor-tests/generated/Path/Path.ql 2bdcd99b3b5ffc83ac47d8cc27a4561d616bcf06844f0c452c699cd10ee640ca 5a7d7ffb8b0c04d6a8cbb2a953761df8561b796c4372bef1bd55c359b2f19911 -test/extractor-tests/generated/Path/PathExpr.ql 7716664d4f2254456df9d0f44836e761df60c96133d484cbda39e6cbb3152610 4ee3dd2b9fb1f223de0151db71cb623e93dea9afec125222f91e2bc02173173d +test/extractor-tests/generated/Path/PathExpr.ql 5039fe730998a561f51813a0716e18c7c1d36b6da89936e4cfbdb4ef0e895560 cd3ddf8ab93cd573381807f59cded7fb3206f1dbdff582490be6f23bed2d6f29 test/extractor-tests/generated/Path/PathExpr_getAttr.ql 2ccac48cd91d86670c1d2742de20344135d424e6f0e3dafcc059555046f92d92 9b7b5f5f9e3674fad9b3a5bcd3cabc0dff32a95640da0fce6f4d0eb931f1757d test/extractor-tests/generated/Path/PathExpr_getPath.ql e7894071313a74166bdd31d7cd974037fcd5a7f0e92d5eec42833266196eb858 46a06e8a1207e7a0fa175cd4b61068e5fd6c43b5575b88986409f0ac2be64c51 test/extractor-tests/generated/Path/PathExpr_getResolvedCrateOrigin.ql a68a1f0d865d10c955f7ab1fd7614b517e660553b65fabb9daa8f302adbc2602 c47480d6440ae63be27d8158a35536a8d9051817dec1521cdcab297ddb52e1ae @@ -1053,7 +1054,7 @@ test/extractor-tests/generated/TupleFieldList/TupleFieldList.ql 7dc88440222ff036 test/extractor-tests/generated/TupleFieldList/TupleFieldList_getField.ql ad552a9c0b9964d1770f14cabbb436db60ebedc3c569006542a8eae9ddb30f6d 3a8c49d629376a9b8326138836b05ee2366b1021ffd19f5be74ab023e70aa50d test/extractor-tests/generated/TuplePat/TuplePat.ql 24ee56bc848537da65eb8ecef71e84cc351a2aedcc31d6fb53a5b7865f15f7c2 81db1076e2e4921ceb50933b96cd7b574caab1818de257c1e9038f3f97447d59 test/extractor-tests/generated/TuplePat/TuplePat_getField.ql f000bed41af031bc56d0705ce312abe7ab3dc6745b2936798c9938781e51475e f464a84dbc36aa371d60d6db68d6251f6b275dc4ecebdc56f195637be390b067 -test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql 194b2fbfc83a84caf76032f3c63a1f7e618f71e5ea5be449e9d2691b0fce9829 0ff24488ba5729591ce86a702fdfb6f4e0498f96d89bf5c4bd05bd90523f9435 +test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql 967409c7bddd7fc8d0b9fdfab2f5e6c82e8b4ff57020822aa0cda177244dfbc5 eaf0b7e56c38db60fafb39f8de75b67ee1099ac540fa92b5dfe84b601d31781a test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.ql f3f2e23cc2a32aa5abc1e0fda1300dab1693230632b9eaa75bb3b1e82ee9ea1a 24b87a39ec639a26ff8c1d04dc3429b72266b2a3b1650a06a7cd4387b6f0e615 test/extractor-tests/generated/TupleStructPat/TupleStructPat_getPath.ql 13a06696bbf1fa8d5b73107e28cdba40e93da04b27f9c54381b78a52368d2ad1 5558c35ea9bb371ad90a5b374d7530dd1936f83e6ba656ebfbfd5bd63598e088 test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedCrateOrigin.ql e409667233331a038e482de4b2669d9fac9d7eb0e3bd5580ea19828f0c4ed7ad 588e4628471f1004575900d7365490efcf9168b555ff26becfc3f27b9e657de3 diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index 973f32e7d9b..68cfe403c89 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -104,6 +104,7 @@ /lib/codeql/rust/elements/ParenType.qll linguist-generated /lib/codeql/rust/elements/Pat.qll linguist-generated /lib/codeql/rust/elements/Path.qll linguist-generated +/lib/codeql/rust/elements/PathAstNode.qll linguist-generated /lib/codeql/rust/elements/PathExpr.qll linguist-generated /lib/codeql/rust/elements/PathExprBase.qll linguist-generated /lib/codeql/rust/elements/PathPat.qll linguist-generated @@ -303,6 +304,7 @@ /lib/codeql/rust/elements/internal/ParenPatConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/ParenTypeConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/PatImpl.qll linguist-generated +/lib/codeql/rust/elements/internal/PathAstNodeImpl.qll linguist-generated /lib/codeql/rust/elements/internal/PathConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/PathExprBaseImpl.qll linguist-generated /lib/codeql/rust/elements/internal/PathExprConstructor.qll linguist-generated @@ -516,6 +518,7 @@ /lib/codeql/rust/elements/internal/generated/ParentChild.qll linguist-generated /lib/codeql/rust/elements/internal/generated/Pat.qll linguist-generated /lib/codeql/rust/elements/internal/generated/Path.qll linguist-generated +/lib/codeql/rust/elements/internal/generated/PathAstNode.qll linguist-generated /lib/codeql/rust/elements/internal/generated/PathExpr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/PathExprBase.qll linguist-generated /lib/codeql/rust/elements/internal/generated/PathPat.qll linguist-generated @@ -728,8 +731,6 @@ /test/extractor-tests/generated/FormatArgsExpr/FormatArgument.ql linguist-generated /test/extractor-tests/generated/FormatArgsExpr/FormatArgument_getVariable.ql linguist-generated /test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql linguist-generated -/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedCrateOrigin.ql linguist-generated -/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedPath.ql linguist-generated /test/extractor-tests/generated/FormatArgsExpr/Format_getArgument.ql linguist-generated /test/extractor-tests/generated/Function/Function.ql linguist-generated /test/extractor-tests/generated/Function/Function_getAbi.ql linguist-generated diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll b/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll index 1c3afbc83b0..fd5bdf320d3 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll @@ -2060,16 +2060,6 @@ module MakeCfgNodes Input> { * Gets the number of attrs of this path expression. */ int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } - - /** - * Gets the path of this path expression, if it exists. - */ - Path getPath() { result = node.getPath() } - - /** - * Holds if `getPath()` exists. - */ - predicate hasPath() { exists(this.getPath()) } } final private class ParentPathExprBase extends ParentAstNode, PathExprBase { @@ -2108,16 +2098,6 @@ module MakeCfgNodes Input> { /** Gets the underlying `PathPat`. */ PathPat getPathPat() { result = node } - - /** - * Gets the path of this path pat, if it exists. - */ - Path getPath() { result = node.getPath() } - - /** - * Holds if `getPath()` exists. - */ - predicate hasPath() { exists(this.getPath()) } } final private class ParentPrefixExpr extends ParentAstNode, PrefixExpr { @@ -2345,16 +2325,6 @@ module MakeCfgNodes Input> { /** Gets the underlying `RecordExpr`. */ RecordExpr getRecordExpr() { result = node } - /** - * Gets the path of this record expression, if it exists. - */ - Path getPath() { result = node.getPath() } - - /** - * Holds if `getPath()` exists. - */ - predicate hasPath() { exists(this.getPath()) } - /** * Gets the record expression field list of this record expression, if it exists. */ @@ -2387,16 +2357,6 @@ module MakeCfgNodes Input> { /** Gets the underlying `RecordPat`. */ RecordPat getRecordPat() { result = node } - /** - * Gets the path of this record pat, if it exists. - */ - Path getPath() { result = node.getPath() } - - /** - * Holds if `getPath()` exists. - */ - predicate hasPath() { exists(this.getPath()) } - /** * Gets the record pat field list of this record pat, if it exists. */ @@ -2889,16 +2849,6 @@ module MakeCfgNodes Input> { * Gets the number of fields of this tuple struct pat. */ int getNumberOfFields() { result = count(int i | exists(this.getField(i))) } - - /** - * Gets the path of this tuple struct pat, if it exists. - */ - Path getPath() { result = node.getPath() } - - /** - * Holds if `getPath()` exists. - */ - predicate hasPath() { exists(this.getPath()) } } final private class ParentUnderscoreExpr extends ParentAstNode, UnderscoreExpr { diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll index 4de9842d54f..2103579291b 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll @@ -598,31 +598,33 @@ module RustDataFlow implements InputSig { predicate jumpStep(Node node1, Node node2) { none() } /** Holds if path `p` resolves to variant `v`. */ - private predicate pathResolveToVariantCanonicalPath(Path p, VariantCanonicalPath v) { - exists(CrateOriginOption crate, string path | - resolveExtendedCanonicalPath(p.getQualifier(), crate, path) and - v = MkVariantCanonicalPath(crate, path, p.getPart().getNameRef().getText()) + private predicate pathResolveToVariantCanonicalPath(PathAstNode p, VariantCanonicalPath v) { + exists(CrateOriginOption crate, string path, string name | + // TODO: this is bad, but will be solved by moving to semantic paths away from strings + resolveExtendedCanonicalPath(p, crate, path + "::" + name) and + v = MkVariantCanonicalPath(crate, path, name) ) or // TODO: Remove once library types are extracted - not p.hasQualifier() and - v = MkVariantCanonicalPath(_, "crate::std::option::Option", p.getPart().getNameRef().getText()) - or - // TODO: Remove once library types are extracted - not p.hasQualifier() and - v = MkVariantCanonicalPath(_, "crate::std::result::Result", p.getPart().getNameRef().getText()) + exists(Path path | + path = p.getPath() and + not path.hasQualifier() and + v = + MkVariantCanonicalPath(_, ["crate::std::option::Option", "crate::std::result::Result"], + path.getPart().getNameRef().getText()) + ) } /** Holds if `p` destructs an enum variant `v`. */ pragma[nomagic] private predicate tupleVariantDestruction(TupleStructPat p, VariantCanonicalPath v) { - pathResolveToVariantCanonicalPath(p.getPath(), v) + pathResolveToVariantCanonicalPath(p, v) } /** Holds if `p` destructs an enum variant `v`. */ pragma[nomagic] private predicate recordVariantDestruction(RecordPat p, VariantCanonicalPath v) { - pathResolveToVariantCanonicalPath(p.getPath(), v) + pathResolveToVariantCanonicalPath(p, v) } /** @@ -651,13 +653,13 @@ module RustDataFlow implements InputSig { /** Holds if `ce` constructs an enum value of type `v`. */ pragma[nomagic] private predicate tupleVariantConstruction(CallExpr ce, VariantCanonicalPath v) { - pathResolveToVariantCanonicalPath(ce.getFunction().(PathExpr).getPath(), v) + pathResolveToVariantCanonicalPath(ce.getFunction().(PathExpr), v) } /** Holds if `re` constructs an enum value of type `v`. */ pragma[nomagic] private predicate recordVariantConstruction(RecordExpr re, VariantCanonicalPath v) { - pathResolveToVariantCanonicalPath(re.getPath(), v) + pathResolveToVariantCanonicalPath(re, v) } /** diff --git a/rust/ql/lib/codeql/rust/elements.qll b/rust/ql/lib/codeql/rust/elements.qll index e37dde90d61..dba1e446054 100644 --- a/rust/ql/lib/codeql/rust/elements.qll +++ b/rust/ql/lib/codeql/rust/elements.qll @@ -106,6 +106,7 @@ import codeql.rust.elements.ParenPat import codeql.rust.elements.ParenType import codeql.rust.elements.Pat import codeql.rust.elements.Path +import codeql.rust.elements.PathAstNode import codeql.rust.elements.PathExpr import codeql.rust.elements.PathExprBase import codeql.rust.elements.PathPat diff --git a/rust/ql/lib/codeql/rust/elements/PathAstNode.qll b/rust/ql/lib/codeql/rust/elements/PathAstNode.qll new file mode 100644 index 00000000000..c8ff02e634c --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/PathAstNode.qll @@ -0,0 +1,13 @@ +// generated by codegen, do not edit +/** + * This module provides the public class `PathAstNode`. + */ + +private import internal.PathAstNodeImpl +import codeql.rust.elements.Path +import codeql.rust.elements.Resolvable + +/** + * An AST element wrapping a path (`PathExpr`, `RecordExpr`, `PathPat`, `RecordPat`, `TupleStructPat`). + */ +final class PathAstNode = Impl::PathAstNode; diff --git a/rust/ql/lib/codeql/rust/elements/PathExpr.qll b/rust/ql/lib/codeql/rust/elements/PathExpr.qll index e1bf10488e3..5c768530e21 100644 --- a/rust/ql/lib/codeql/rust/elements/PathExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/PathExpr.qll @@ -5,7 +5,7 @@ private import internal.PathExprImpl import codeql.rust.elements.Attr -import codeql.rust.elements.Path +import codeql.rust.elements.PathAstNode import codeql.rust.elements.PathExprBase /** diff --git a/rust/ql/lib/codeql/rust/elements/PathExprBase.qll b/rust/ql/lib/codeql/rust/elements/PathExprBase.qll index 95fd48d6386..e2e45e718f0 100644 --- a/rust/ql/lib/codeql/rust/elements/PathExprBase.qll +++ b/rust/ql/lib/codeql/rust/elements/PathExprBase.qll @@ -5,7 +5,6 @@ private import internal.PathExprBaseImpl import codeql.rust.elements.Expr -import codeql.rust.elements.Resolvable /** * A path expression or a variable access in a formatting template. See `PathExpr` and `FormatTemplateVariableAccess` for further details. diff --git a/rust/ql/lib/codeql/rust/elements/PathPat.qll b/rust/ql/lib/codeql/rust/elements/PathPat.qll index 2c360a2b858..ae61b5e93e8 100644 --- a/rust/ql/lib/codeql/rust/elements/PathPat.qll +++ b/rust/ql/lib/codeql/rust/elements/PathPat.qll @@ -5,8 +5,7 @@ private import internal.PathPatImpl import codeql.rust.elements.Pat -import codeql.rust.elements.Path -import codeql.rust.elements.Resolvable +import codeql.rust.elements.PathAstNode /** * A path pattern. For example: diff --git a/rust/ql/lib/codeql/rust/elements/RecordExpr.qll b/rust/ql/lib/codeql/rust/elements/RecordExpr.qll index c993059e977..3429ff3597e 100644 --- a/rust/ql/lib/codeql/rust/elements/RecordExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/RecordExpr.qll @@ -5,9 +5,8 @@ private import internal.RecordExprImpl import codeql.rust.elements.Expr -import codeql.rust.elements.Path +import codeql.rust.elements.PathAstNode import codeql.rust.elements.RecordExprFieldList -import codeql.rust.elements.Resolvable /** * A record expression. For example: diff --git a/rust/ql/lib/codeql/rust/elements/RecordPat.qll b/rust/ql/lib/codeql/rust/elements/RecordPat.qll index fb37a42659b..242b7398696 100644 --- a/rust/ql/lib/codeql/rust/elements/RecordPat.qll +++ b/rust/ql/lib/codeql/rust/elements/RecordPat.qll @@ -5,9 +5,8 @@ private import internal.RecordPatImpl import codeql.rust.elements.Pat -import codeql.rust.elements.Path +import codeql.rust.elements.PathAstNode import codeql.rust.elements.RecordPatFieldList -import codeql.rust.elements.Resolvable /** * A record pattern. For example: diff --git a/rust/ql/lib/codeql/rust/elements/Resolvable.qll b/rust/ql/lib/codeql/rust/elements/Resolvable.qll index 200809dd852..6a2304a3be7 100644 --- a/rust/ql/lib/codeql/rust/elements/Resolvable.qll +++ b/rust/ql/lib/codeql/rust/elements/Resolvable.qll @@ -7,6 +7,6 @@ private import internal.ResolvableImpl import codeql.rust.elements.AstNode /** - * Either a `PathExpr`, a `PathPat`, or a `MethodCallExpr`. + * One of `PathExpr`, `RecordExpr`, `PathPat`, `RecordPat`, `TupleStructPat` or `MethodCallExpr`. */ final class Resolvable = Impl::Resolvable; diff --git a/rust/ql/lib/codeql/rust/elements/TupleStructPat.qll b/rust/ql/lib/codeql/rust/elements/TupleStructPat.qll index 5470d18d35a..82c5aa4c0dd 100644 --- a/rust/ql/lib/codeql/rust/elements/TupleStructPat.qll +++ b/rust/ql/lib/codeql/rust/elements/TupleStructPat.qll @@ -5,8 +5,7 @@ private import internal.TupleStructPatImpl import codeql.rust.elements.Pat -import codeql.rust.elements.Path -import codeql.rust.elements.Resolvable +import codeql.rust.elements.PathAstNode /** * A tuple struct pattern. For example: diff --git a/rust/ql/lib/codeql/rust/elements/internal/PathAstNodeImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/PathAstNodeImpl.qll new file mode 100644 index 00000000000..30ad03a4724 --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/PathAstNodeImpl.qll @@ -0,0 +1,19 @@ +// generated by codegen, remove this comment if you wish to edit this file +/** + * This module provides a hand-modifiable wrapper around the generated class `PathAstNode`. + * + * INTERNAL: Do not use. + */ + +private import codeql.rust.elements.internal.generated.PathAstNode + +/** + * INTERNAL: This module contains the customizable definition of `PathAstNode` and should not + * be referenced directly. + */ +module Impl { + /** + * An AST element wrapping a path (`PathExpr`, `RecordExpr`, `PathPat`, `RecordPat`, `TupleStructPat`). + */ + class PathAstNode extends Generated::PathAstNode { } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/ResolvableImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ResolvableImpl.qll index eacd777c7e2..86304cd23de 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ResolvableImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ResolvableImpl.qll @@ -15,7 +15,7 @@ module Impl { // the following QLdoc is generated: if you need to edit it, do it in the schema file /** - * Either a `PathExpr`, a `PathPat`, or a `MethodCallExpr`. + * One of `PathExpr`, `RecordExpr`, `PathPat`, `RecordPat`, `TupleStructPat` or `MethodCallExpr`. */ class Resolvable extends Generated::Resolvable { /** 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 aabbb0668d8..44faa061dae 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -2185,45 +2185,40 @@ private module Impl { ) } - private Element getImmediateChildOfPathExprBase( - PathExprBase e, int index, string partialPredicateCall + private Element getImmediateChildOfPathAstNode( + PathAstNode e, int index, string partialPredicateCall ) { - exists(int b, int bExpr, int bResolvable, int n | + exists(int b, int bResolvable, int n, int nPath | b = 0 and - bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and bResolvable = - bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfResolvable(e, i, _)) | i) and - n = bResolvable and - ( - none() - or - result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) - or - result = getImmediateChildOfResolvable(e, index - bExpr, partialPredicateCall) - ) - ) - } - - private Element getImmediateChildOfPathPat(PathPat e, int index, string partialPredicateCall) { - exists(int b, int bPat, int bResolvable, int n, int nPath | - b = 0 and - bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and - bResolvable = - bPat + 1 + max(int i | i = -1 or exists(getImmediateChildOfResolvable(e, i, _)) | i) and + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfResolvable(e, i, _)) | i) and n = bResolvable and nPath = n + 1 and ( none() or - result = getImmediateChildOfPat(e, index - b, partialPredicateCall) - or - result = getImmediateChildOfResolvable(e, index - bPat, partialPredicateCall) + result = getImmediateChildOfResolvable(e, index - b, partialPredicateCall) or index = n and result = e.getPath() and partialPredicateCall = "Path()" ) ) } + private Element getImmediateChildOfPathExprBase( + PathExprBase e, int index, string partialPredicateCall + ) { + exists(int b, int bExpr, int n | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + ) + ) + } + private Element getImmediateChildOfPathType(PathType e, int index, string partialPredicateCall) { exists(int b, int bTypeRef, int n, int nPath | b = 0 and @@ -2318,31 +2313,6 @@ private module Impl { ) } - private Element getImmediateChildOfRecordExpr(RecordExpr e, int index, string partialPredicateCall) { - exists(int b, int bExpr, int bResolvable, int n, int nPath, int nRecordExprFieldList | - b = 0 and - bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and - bResolvable = - bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfResolvable(e, i, _)) | i) and - n = bResolvable and - nPath = n + 1 and - nRecordExprFieldList = nPath + 1 and - ( - none() - or - result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) - or - result = getImmediateChildOfResolvable(e, index - bExpr, partialPredicateCall) - or - index = n and result = e.getPath() and partialPredicateCall = "Path()" - or - index = nPath and - result = e.getRecordExprFieldList() and - partialPredicateCall = "RecordExprFieldList()" - ) - ) - } - private Element getImmediateChildOfRecordFieldList( RecordFieldList e, int index, string partialPredicateCall ) { @@ -2362,31 +2332,6 @@ private module Impl { ) } - private Element getImmediateChildOfRecordPat(RecordPat e, int index, string partialPredicateCall) { - exists(int b, int bPat, int bResolvable, int n, int nPath, int nRecordPatFieldList | - b = 0 and - bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and - bResolvable = - bPat + 1 + max(int i | i = -1 or exists(getImmediateChildOfResolvable(e, i, _)) | i) and - n = bResolvable and - nPath = n + 1 and - nRecordPatFieldList = nPath + 1 and - ( - none() - or - result = getImmediateChildOfPat(e, index - b, partialPredicateCall) - or - result = getImmediateChildOfResolvable(e, index - bPat, partialPredicateCall) - or - index = n and result = e.getPath() and partialPredicateCall = "Path()" - or - index = nPath and - result = e.getRecordPatFieldList() and - partialPredicateCall = "RecordPatFieldList()" - ) - ) - } - private Element getImmediateChildOfRefExpr(RefExpr e, int index, string partialPredicateCall) { exists(int b, int bExpr, int n, int nAttr, int nExpr | b = 0 and @@ -2608,32 +2553,6 @@ private module Impl { ) } - private Element getImmediateChildOfTupleStructPat( - TupleStructPat e, int index, string partialPredicateCall - ) { - exists(int b, int bPat, int bResolvable, int n, int nField, int nPath | - b = 0 and - bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and - bResolvable = - bPat + 1 + max(int i | i = -1 or exists(getImmediateChildOfResolvable(e, i, _)) | i) and - n = bResolvable and - nField = n + 1 + max(int i | i = -1 or exists(e.getField(i)) | i) and - nPath = nField + 1 and - ( - none() - or - result = getImmediateChildOfPat(e, index - b, partialPredicateCall) - or - result = getImmediateChildOfResolvable(e, index - bPat, partialPredicateCall) - or - result = e.getField(index - n) and - partialPredicateCall = "Field(" + (index - n).toString() + ")" - or - index = nField and result = e.getPath() and partialPredicateCall = "Path()" - ) - ) - } - private Element getImmediateChildOfTupleType(TupleType e, int index, string partialPredicateCall) { exists(int b, int bTypeRef, int n, int nField | b = 0 and @@ -3253,22 +3172,85 @@ private module Impl { } private Element getImmediateChildOfPathExpr(PathExpr e, int index, string partialPredicateCall) { - exists(int b, int bPathExprBase, int n, int nAttr, int nPath | + exists(int b, int bPathExprBase, int bPathAstNode, int n, int nAttr | b = 0 and bPathExprBase = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPathExprBase(e, i, _)) | i) and - n = bPathExprBase and + bPathAstNode = + bPathExprBase + 1 + + max(int i | i = -1 or exists(getImmediateChildOfPathAstNode(e, i, _)) | i) and + n = bPathAstNode and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nPath = nAttr + 1 and ( none() or result = getImmediateChildOfPathExprBase(e, index - b, partialPredicateCall) or + result = getImmediateChildOfPathAstNode(e, index - bPathExprBase, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" + ) + ) + } + + private Element getImmediateChildOfPathPat(PathPat e, int index, string partialPredicateCall) { + exists(int b, int bPat, int bPathAstNode, int n | + b = 0 and + bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and + bPathAstNode = + bPat + 1 + max(int i | i = -1 or exists(getImmediateChildOfPathAstNode(e, i, _)) | i) and + n = bPathAstNode and + ( + none() or - index = nAttr and result = e.getPath() and partialPredicateCall = "Path()" + result = getImmediateChildOfPat(e, index - b, partialPredicateCall) + or + result = getImmediateChildOfPathAstNode(e, index - bPat, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfRecordExpr(RecordExpr e, int index, string partialPredicateCall) { + exists(int b, int bExpr, int bPathAstNode, int n, int nRecordExprFieldList | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + bPathAstNode = + bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfPathAstNode(e, i, _)) | i) and + n = bPathAstNode and + nRecordExprFieldList = n + 1 and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or + result = getImmediateChildOfPathAstNode(e, index - bExpr, partialPredicateCall) + or + index = n and + result = e.getRecordExprFieldList() and + partialPredicateCall = "RecordExprFieldList()" + ) + ) + } + + private Element getImmediateChildOfRecordPat(RecordPat e, int index, string partialPredicateCall) { + exists(int b, int bPat, int bPathAstNode, int n, int nRecordPatFieldList | + b = 0 and + bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and + bPathAstNode = + bPat + 1 + max(int i | i = -1 or exists(getImmediateChildOfPathAstNode(e, i, _)) | i) and + n = bPathAstNode and + nRecordPatFieldList = n + 1 and + ( + none() + or + result = getImmediateChildOfPat(e, index - b, partialPredicateCall) + or + result = getImmediateChildOfPathAstNode(e, index - bPat, partialPredicateCall) + or + index = n and + result = e.getRecordPatFieldList() and + partialPredicateCall = "RecordPatFieldList()" ) ) } @@ -3433,6 +3415,29 @@ private module Impl { ) } + private Element getImmediateChildOfTupleStructPat( + TupleStructPat e, int index, string partialPredicateCall + ) { + exists(int b, int bPat, int bPathAstNode, int n, int nField | + b = 0 and + bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and + bPathAstNode = + bPat + 1 + max(int i | i = -1 or exists(getImmediateChildOfPathAstNode(e, i, _)) | i) and + n = bPathAstNode and + nField = n + 1 + max(int i | i = -1 or exists(e.getField(i)) | i) and + ( + none() + or + result = getImmediateChildOfPat(e, index - b, partialPredicateCall) + or + result = getImmediateChildOfPathAstNode(e, index - bPat, partialPredicateCall) + or + result = e.getField(index - n) and + partialPredicateCall = "Field(" + (index - n).toString() + ")" + ) + ) + } + private Element getImmediateChildOfTypeAlias(TypeAlias e, int index, string partialPredicateCall) { exists( int b, int bAssocItem, int bExternItem, int bItem, int n, int nAttr, int nGenericParamList, @@ -3803,8 +3808,6 @@ private module Impl { or result = getImmediateChildOfParenType(e, index, partialAccessor) or - result = getImmediateChildOfPathPat(e, index, partialAccessor) - or result = getImmediateChildOfPathType(e, index, partialAccessor) or result = getImmediateChildOfPrefixExpr(e, index, partialAccessor) @@ -3815,12 +3818,8 @@ private module Impl { or result = getImmediateChildOfRangePat(e, index, partialAccessor) or - result = getImmediateChildOfRecordExpr(e, index, partialAccessor) - or result = getImmediateChildOfRecordFieldList(e, index, partialAccessor) or - result = getImmediateChildOfRecordPat(e, index, partialAccessor) - or result = getImmediateChildOfRefExpr(e, index, partialAccessor) or result = getImmediateChildOfRefPat(e, index, partialAccessor) @@ -3845,8 +3844,6 @@ private module Impl { or result = getImmediateChildOfTuplePat(e, index, partialAccessor) or - result = getImmediateChildOfTupleStructPat(e, index, partialAccessor) - or result = getImmediateChildOfTupleType(e, index, partialAccessor) or result = getImmediateChildOfTypeArg(e, index, partialAccessor) @@ -3893,6 +3890,12 @@ private module Impl { or result = getImmediateChildOfPathExpr(e, index, partialAccessor) or + result = getImmediateChildOfPathPat(e, index, partialAccessor) + or + result = getImmediateChildOfRecordExpr(e, index, partialAccessor) + or + result = getImmediateChildOfRecordPat(e, index, partialAccessor) + or result = getImmediateChildOfStatic(e, index, partialAccessor) or result = getImmediateChildOfStruct(e, index, partialAccessor) @@ -3901,6 +3904,8 @@ private module Impl { or result = getImmediateChildOfTraitAlias(e, index, partialAccessor) or + result = getImmediateChildOfTupleStructPat(e, index, partialAccessor) + or result = getImmediateChildOfTypeAlias(e, index, partialAccessor) or result = getImmediateChildOfUnion(e, index, partialAccessor) diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/PathAstNode.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/PathAstNode.qll new file mode 100644 index 00000000000..a69957e7545 --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/PathAstNode.qll @@ -0,0 +1,36 @@ +// generated by codegen, do not edit +/** + * This module provides the generated definition of `PathAstNode`. + * 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.Path +import codeql.rust.elements.internal.ResolvableImpl::Impl as ResolvableImpl + +/** + * INTERNAL: This module contains the fully generated definition of `PathAstNode` and should not + * be referenced directly. + */ +module Generated { + /** + * An AST element wrapping a path (`PathExpr`, `RecordExpr`, `PathPat`, `RecordPat`, `TupleStructPat`). + * INTERNAL: Do not reference the `Generated::PathAstNode` class directly. + * Use the subclass `PathAstNode`, where the following predicates are available. + */ + class PathAstNode extends Synth::TPathAstNode, ResolvableImpl::Resolvable { + /** + * Gets the path of this path ast node, if it exists. + */ + Path getPath() { + result = + Synth::convertPathFromRaw(Synth::convertPathAstNodeToRaw(this).(Raw::PathAstNode).getPath()) + } + + /** + * Holds if `getPath()` exists. + */ + final predicate hasPath() { exists(this.getPath()) } + } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/PathExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/PathExpr.qll index 562747d0f11..dbf2c9004da 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/PathExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/PathExpr.qll @@ -7,7 +7,7 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.Attr -import codeql.rust.elements.Path +import codeql.rust.elements.internal.PathAstNodeImpl::Impl as PathAstNodeImpl import codeql.rust.elements.internal.PathExprBaseImpl::Impl as PathExprBaseImpl /** @@ -26,7 +26,9 @@ module Generated { * INTERNAL: Do not reference the `Generated::PathExpr` class directly. * Use the subclass `PathExpr`, where the following predicates are available. */ - class PathExpr extends Synth::TPathExpr, PathExprBaseImpl::PathExprBase { + class PathExpr extends Synth::TPathExpr, PathExprBaseImpl::PathExprBase, + PathAstNodeImpl::PathAstNode + { override string getAPrimaryQlClass() { result = "PathExpr" } /** @@ -46,18 +48,5 @@ module Generated { * Gets the number of attrs of this path expression. */ final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } - - /** - * Gets the path of this path expression, if it exists. - */ - Path getPath() { - result = - Synth::convertPathFromRaw(Synth::convertPathExprToRaw(this).(Raw::PathExpr).getPath()) - } - - /** - * Holds if `getPath()` exists. - */ - final predicate hasPath() { exists(this.getPath()) } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/PathExprBase.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/PathExprBase.qll index 2efc1fd3dae..cf924962dbe 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/PathExprBase.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/PathExprBase.qll @@ -7,7 +7,6 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl -import codeql.rust.elements.internal.ResolvableImpl::Impl as ResolvableImpl /** * INTERNAL: This module contains the fully generated definition of `PathExprBase` and should not @@ -19,5 +18,5 @@ module Generated { * INTERNAL: Do not reference the `Generated::PathExprBase` class directly. * Use the subclass `PathExprBase`, where the following predicates are available. */ - class PathExprBase extends Synth::TPathExprBase, ExprImpl::Expr, ResolvableImpl::Resolvable { } + class PathExprBase extends Synth::TPathExprBase, ExprImpl::Expr { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/PathPat.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/PathPat.qll index e37e1e154db..3e69bb2cb32 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/PathPat.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/PathPat.qll @@ -7,8 +7,7 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.internal.PatImpl::Impl as PatImpl -import codeql.rust.elements.Path -import codeql.rust.elements.internal.ResolvableImpl::Impl as ResolvableImpl +import codeql.rust.elements.internal.PathAstNodeImpl::Impl as PathAstNodeImpl /** * INTERNAL: This module contains the fully generated definition of `PathPat` and should not @@ -26,19 +25,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::PathPat` class directly. * Use the subclass `PathPat`, where the following predicates are available. */ - class PathPat extends Synth::TPathPat, PatImpl::Pat, ResolvableImpl::Resolvable { + class PathPat extends Synth::TPathPat, PatImpl::Pat, PathAstNodeImpl::PathAstNode { override string getAPrimaryQlClass() { result = "PathPat" } - - /** - * Gets the path of this path pat, if it exists. - */ - Path getPath() { - result = Synth::convertPathFromRaw(Synth::convertPathPatToRaw(this).(Raw::PathPat).getPath()) - } - - /** - * Holds if `getPath()` exists. - */ - final predicate hasPath() { exists(this.getPath()) } } } 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 368be81ad06..1a249fbcafa 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -803,7 +803,7 @@ module Raw { /** * INTERNAL: Do not use. - * Either a `PathExpr`, a `PathPat`, or a `MethodCallExpr`. + * One of `PathExpr`, `RecordExpr`, `PathPat`, `RecordPat`, `TupleStructPat` or `MethodCallExpr`. */ class Resolvable extends @resolvable, AstNode { /** @@ -2302,28 +2302,20 @@ module Raw { /** * INTERNAL: Do not use. - * A path expression or a variable access in a formatting template. See `PathExpr` and `FormatTemplateVariableAccess` for further details. + * An AST element wrapping a path (`PathExpr`, `RecordExpr`, `PathPat`, `RecordPat`, `TupleStructPat`). */ - class PathExprBase extends @path_expr_base, Expr, Resolvable { } + class PathAstNode extends @path_ast_node, Resolvable { + /** + * Gets the path of this path ast node, if it exists. + */ + Path getPath() { path_ast_node_paths(this, result) } + } /** * INTERNAL: Do not use. - * A path pattern. For example: - * ```rust - * match x { - * Foo::Bar => "ok", - * _ => "fail", - * } - * ``` + * A path expression or a variable access in a formatting template. See `PathExpr` and `FormatTemplateVariableAccess` for further details. */ - class PathPat extends @path_pat, Pat, Resolvable { - override string toString() { result = "PathPat" } - - /** - * Gets the path of this path pat, if it exists. - */ - Path getPath() { path_pat_paths(this, result) } - } + class PathExprBase extends @path_expr_base, Expr { } /** * INTERNAL: Do not use. @@ -2462,32 +2454,6 @@ module Raw { Pat getStart() { range_pat_starts(this, result) } } - /** - * INTERNAL: Do not use. - * A record expression. For example: - * ```rust - * let first = Foo { a: 1, b: 2 }; - * let second = Foo { a: 2, ..first }; - * Foo { a: 1, b: 2 }[2] = 10; - * Foo { .. } = second; - * ``` - */ - class RecordExpr extends @record_expr, Expr, Resolvable { - override string toString() { result = "RecordExpr" } - - /** - * Gets the path of this record expression, if it exists. - */ - Path getPath() { record_expr_paths(this, result) } - - /** - * Gets the record expression field list of this record expression, if it exists. - */ - RecordExprFieldList getRecordExprFieldList() { - record_expr_record_expr_field_lists(this, result) - } - } - /** * INTERNAL: Do not use. * A RecordFieldList. For example: @@ -2504,30 +2470,6 @@ module Raw { RecordField getField(int index) { record_field_list_fields(this, index, result) } } - /** - * INTERNAL: Do not use. - * A record pattern. For example: - * ```rust - * match x { - * Foo { a: 1, b: 2 } => "ok", - * Foo { .. } => "fail", - * } - * ``` - */ - class RecordPat extends @record_pat, Pat, Resolvable { - override string toString() { result = "RecordPat" } - - /** - * Gets the path of this record pat, if it exists. - */ - Path getPath() { record_pat_paths(this, result) } - - /** - * Gets the record pat field list of this record pat, if it exists. - */ - RecordPatFieldList getRecordPatFieldList() { record_pat_record_pat_field_lists(this, result) } - } - /** * INTERNAL: Do not use. * A reference expression. For example: @@ -2801,31 +2743,6 @@ module Raw { Pat getField(int index) { tuple_pat_fields(this, index, result) } } - /** - * INTERNAL: Do not use. - * A tuple struct pattern. For example: - * ```rust - * match x { - * Tuple("a", 1, 2, 3) => "great", - * Tuple(.., 3) => "fine", - * Tuple(..) => "fail", - * }; - * ``` - */ - class TupleStructPat extends @tuple_struct_pat, Pat, Resolvable { - override string toString() { result = "TupleStructPat" } - - /** - * Gets the `index`th field of this tuple struct pat (0-based). - */ - Pat getField(int index) { tuple_struct_pat_fields(this, index, result) } - - /** - * Gets the path of this tuple struct pat, if it exists. - */ - Path getPath() { tuple_struct_pat_paths(this, result) } - } - /** * INTERNAL: Do not use. * A TupleType. For example: @@ -3546,18 +3463,67 @@ module Raw { * let z = ::foo; * ``` */ - class PathExpr extends @path_expr, PathExprBase { + class PathExpr extends @path_expr, PathExprBase, PathAstNode { override string toString() { result = "PathExpr" } /** * Gets the `index`th attr of this path expression (0-based). */ Attr getAttr(int index) { path_expr_attrs(this, index, result) } + } + + /** + * INTERNAL: Do not use. + * A path pattern. For example: + * ```rust + * match x { + * Foo::Bar => "ok", + * _ => "fail", + * } + * ``` + */ + class PathPat extends @path_pat, Pat, PathAstNode { + override string toString() { result = "PathPat" } + } + + /** + * INTERNAL: Do not use. + * A record expression. For example: + * ```rust + * let first = Foo { a: 1, b: 2 }; + * let second = Foo { a: 2, ..first }; + * Foo { a: 1, b: 2 }[2] = 10; + * Foo { .. } = second; + * ``` + */ + class RecordExpr extends @record_expr, Expr, PathAstNode { + override string toString() { result = "RecordExpr" } /** - * Gets the path of this path expression, if it exists. + * Gets the record expression field list of this record expression, if it exists. */ - Path getPath() { path_expr_paths(this, result) } + RecordExprFieldList getRecordExprFieldList() { + record_expr_record_expr_field_lists(this, result) + } + } + + /** + * INTERNAL: Do not use. + * A record pattern. For example: + * ```rust + * match x { + * Foo { a: 1, b: 2 } => "ok", + * Foo { .. } => "fail", + * } + * ``` + */ + class RecordPat extends @record_pat, Pat, PathAstNode { + override string toString() { result = "RecordPat" } + + /** + * Gets the record pat field list of this record pat, if it exists. + */ + RecordPatFieldList getRecordPatFieldList() { record_pat_record_pat_field_lists(this, result) } } /** @@ -3750,6 +3716,26 @@ module Raw { WhereClause getWhereClause() { trait_alias_where_clauses(this, result) } } + /** + * INTERNAL: Do not use. + * A tuple struct pattern. For example: + * ```rust + * match x { + * Tuple("a", 1, 2, 3) => "great", + * Tuple(.., 3) => "fine", + * Tuple(..) => "fail", + * }; + * ``` + */ + class TupleStructPat extends @tuple_struct_pat, Pat, PathAstNode { + override string toString() { result = "TupleStructPat" } + + /** + * Gets the `index`th field of this tuple struct pat (0-based). + */ + Pat getField(int index) { tuple_struct_pat_fields(this, index, result) } + } + /** * INTERNAL: Do not use. * A TypeAlias. For example: diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/RecordExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/RecordExpr.qll index d7c6a11f21a..b6a0a2ecdd2 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/RecordExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/RecordExpr.qll @@ -7,9 +7,8 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl -import codeql.rust.elements.Path +import codeql.rust.elements.internal.PathAstNodeImpl::Impl as PathAstNodeImpl import codeql.rust.elements.RecordExprFieldList -import codeql.rust.elements.internal.ResolvableImpl::Impl as ResolvableImpl /** * INTERNAL: This module contains the fully generated definition of `RecordExpr` and should not @@ -27,22 +26,9 @@ module Generated { * INTERNAL: Do not reference the `Generated::RecordExpr` class directly. * Use the subclass `RecordExpr`, where the following predicates are available. */ - class RecordExpr extends Synth::TRecordExpr, ExprImpl::Expr, ResolvableImpl::Resolvable { + class RecordExpr extends Synth::TRecordExpr, ExprImpl::Expr, PathAstNodeImpl::PathAstNode { override string getAPrimaryQlClass() { result = "RecordExpr" } - /** - * Gets the path of this record expression, if it exists. - */ - Path getPath() { - result = - Synth::convertPathFromRaw(Synth::convertRecordExprToRaw(this).(Raw::RecordExpr).getPath()) - } - - /** - * Holds if `getPath()` exists. - */ - final predicate hasPath() { exists(this.getPath()) } - /** * Gets the record expression field list of this record expression, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/RecordPat.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/RecordPat.qll index 03f2c525180..5f0ad4f28ae 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/RecordPat.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/RecordPat.qll @@ -7,9 +7,8 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.internal.PatImpl::Impl as PatImpl -import codeql.rust.elements.Path +import codeql.rust.elements.internal.PathAstNodeImpl::Impl as PathAstNodeImpl import codeql.rust.elements.RecordPatFieldList -import codeql.rust.elements.internal.ResolvableImpl::Impl as ResolvableImpl /** * INTERNAL: This module contains the fully generated definition of `RecordPat` and should not @@ -27,22 +26,9 @@ module Generated { * INTERNAL: Do not reference the `Generated::RecordPat` class directly. * Use the subclass `RecordPat`, where the following predicates are available. */ - class RecordPat extends Synth::TRecordPat, PatImpl::Pat, ResolvableImpl::Resolvable { + class RecordPat extends Synth::TRecordPat, PatImpl::Pat, PathAstNodeImpl::PathAstNode { override string getAPrimaryQlClass() { result = "RecordPat" } - /** - * Gets the path of this record pat, if it exists. - */ - Path getPath() { - result = - Synth::convertPathFromRaw(Synth::convertRecordPatToRaw(this).(Raw::RecordPat).getPath()) - } - - /** - * Holds if `getPath()` exists. - */ - final predicate hasPath() { exists(this.getPath()) } - /** * Gets the record pat field list of this record pat, if it exists. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Resolvable.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Resolvable.qll index ecd1e7db50a..fb0d7975cf9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Resolvable.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Resolvable.qll @@ -14,7 +14,7 @@ import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl */ module Generated { /** - * Either a `PathExpr`, a `PathPat`, or a `MethodCallExpr`. + * One of `PathExpr`, `RecordExpr`, `PathPat`, `RecordPat`, `TupleStructPat` or `MethodCallExpr`. * INTERNAL: Do not reference the `Generated::Resolvable` class directly. * Use the subclass `Resolvable`, where the following predicates are available. */ 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 8a236d3f322..affdd5a61b1 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll @@ -713,6 +713,11 @@ module Synth { TPathPat or TRangePat or TRecordPat or TRefPat or TRestPat or TSlicePat or TTuplePat or TTupleStructPat or TWildcardPat; + /** + * INTERNAL: Do not use. + */ + class TPathAstNode = TPathExpr or TPathPat or TRecordExpr or TRecordPat or TTupleStructPat; + /** * INTERNAL: Do not use. */ @@ -721,8 +726,7 @@ module Synth { /** * INTERNAL: Do not use. */ - class TResolvable = - TMethodCallExpr or TPathExprBase or TPathPat or TRecordExpr or TRecordPat or TTupleStructPat; + class TResolvable = TMethodCallExpr or TPathAstNode; /** * INTERNAL: Do not use. @@ -2053,6 +2057,22 @@ module Synth { result = convertWildcardPatFromRaw(e) } + /** + * INTERNAL: Do not use. + * Converts a raw DB element to a synthesized `TPathAstNode`, if possible. + */ + TPathAstNode convertPathAstNodeFromRaw(Raw::Element e) { + result = convertPathExprFromRaw(e) + or + result = convertPathPatFromRaw(e) + or + result = convertRecordExprFromRaw(e) + or + result = convertRecordPatFromRaw(e) + or + result = convertTupleStructPatFromRaw(e) + } + /** * INTERNAL: Do not use. * Converts a raw DB element to a synthesized `TPathExprBase`, if possible. @@ -2070,15 +2090,7 @@ module Synth { TResolvable convertResolvableFromRaw(Raw::Element e) { result = convertMethodCallExprFromRaw(e) or - result = convertPathExprBaseFromRaw(e) - or - result = convertPathPatFromRaw(e) - or - result = convertRecordExprFromRaw(e) - or - result = convertRecordPatFromRaw(e) - or - result = convertTupleStructPatFromRaw(e) + result = convertPathAstNodeFromRaw(e) } /** @@ -3447,6 +3459,22 @@ module Synth { result = convertWildcardPatToRaw(e) } + /** + * INTERNAL: Do not use. + * Converts a synthesized `TPathAstNode` to a raw DB element, if possible. + */ + Raw::Element convertPathAstNodeToRaw(TPathAstNode e) { + result = convertPathExprToRaw(e) + or + result = convertPathPatToRaw(e) + or + result = convertRecordExprToRaw(e) + or + result = convertRecordPatToRaw(e) + or + result = convertTupleStructPatToRaw(e) + } + /** * INTERNAL: Do not use. * Converts a synthesized `TPathExprBase` to a raw DB element, if possible. @@ -3464,15 +3492,7 @@ module Synth { Raw::Element convertResolvableToRaw(TResolvable e) { result = convertMethodCallExprToRaw(e) or - result = convertPathExprBaseToRaw(e) - or - result = convertPathPatToRaw(e) - or - result = convertRecordExprToRaw(e) - or - result = convertRecordPatToRaw(e) - or - result = convertTupleStructPatToRaw(e) + result = convertPathAstNodeToRaw(e) } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/TupleStructPat.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/TupleStructPat.qll index 9e57c0a9ad8..5945467cd1c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/TupleStructPat.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/TupleStructPat.qll @@ -8,8 +8,7 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.Pat import codeql.rust.elements.internal.PatImpl::Impl as PatImpl -import codeql.rust.elements.Path -import codeql.rust.elements.internal.ResolvableImpl::Impl as ResolvableImpl +import codeql.rust.elements.internal.PathAstNodeImpl::Impl as PathAstNodeImpl /** * INTERNAL: This module contains the fully generated definition of `TupleStructPat` and should not @@ -28,7 +27,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::TupleStructPat` class directly. * Use the subclass `TupleStructPat`, where the following predicates are available. */ - class TupleStructPat extends Synth::TTupleStructPat, PatImpl::Pat, ResolvableImpl::Resolvable { + class TupleStructPat extends Synth::TTupleStructPat, PatImpl::Pat, PathAstNodeImpl::PathAstNode { override string getAPrimaryQlClass() { result = "TupleStructPat" } /** @@ -50,20 +49,5 @@ module Generated { * Gets the number of fields of this tuple struct pat. */ final int getNumberOfFields() { result = count(int i | exists(this.getField(i))) } - - /** - * Gets the path of this tuple struct pat, if it exists. - */ - Path getPath() { - result = - Synth::convertPathFromRaw(Synth::convertTupleStructPatToRaw(this) - .(Raw::TupleStructPat) - .getPath()) - } - - /** - * Holds if `getPath()` exists. - */ - final predicate hasPath() { exists(this.getPath()) } } } diff --git a/rust/ql/lib/codeql/rust/frameworks/Reqwest.qll b/rust/ql/lib/codeql/rust/frameworks/Reqwest.qll index f46c12feab9..2d3e04f94b3 100644 --- a/rust/ql/lib/codeql/rust/frameworks/Reqwest.qll +++ b/rust/ql/lib/codeql/rust/frameworks/Reqwest.qll @@ -12,9 +12,8 @@ private class ReqwestGet extends RemoteSource::Range { ReqwestGet() { exists(CallExpr ce | this.asExpr().getExpr() = ce and - ce.getFunction().(PathExpr).getPath().getResolvedCrateOrigin().matches("%reqwest") and - ce.getFunction().(PathExpr).getPath().getResolvedPath() = - ["crate::get", "crate::blocking::get"] + ce.getFunction().(PathExpr).getResolvedCrateOrigin().matches("%reqwest") and + ce.getFunction().(PathExpr).getResolvedPath() = ["crate::get", "crate::blocking::get"] ) } } diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/Env.qll b/rust/ql/lib/codeql/rust/frameworks/stdlib/Env.qll index 3e769ae84d4..8410da77a06 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/Env.qll +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/Env.qll @@ -10,7 +10,7 @@ private import codeql.rust.Concepts */ private class StdEnvArgs extends CommandLineArgsSource::Range { StdEnvArgs() { - this.asExpr().getExpr().(CallExpr).getFunction().(PathExpr).getPath().getResolvedPath() = + this.asExpr().getExpr().(CallExpr).getFunction().(PathExpr).getResolvedPath() = ["crate::env::args", "crate::env::args_os"] } } @@ -20,7 +20,7 @@ private class StdEnvArgs extends CommandLineArgsSource::Range { */ private class StdEnvDir extends CommandLineArgsSource::Range { StdEnvDir() { - this.asExpr().getExpr().(CallExpr).getFunction().(PathExpr).getPath().getResolvedPath() = + this.asExpr().getExpr().(CallExpr).getFunction().(PathExpr).getResolvedPath() = ["crate::env::current_dir", "crate::env::current_exe", "crate::env::home_dir"] } } @@ -30,7 +30,7 @@ private class StdEnvDir extends CommandLineArgsSource::Range { */ private class StdEnvVar extends EnvironmentSource::Range { StdEnvVar() { - this.asExpr().getExpr().(CallExpr).getFunction().(PathExpr).getPath().getResolvedPath() = + this.asExpr().getExpr().(CallExpr).getFunction().(PathExpr).getResolvedPath() = ["crate::env::var", "crate::env::var_os", "crate::env::vars", "crate::env::vars_os"] } } diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index d63c6d62298..801789b2d99 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -843,11 +843,7 @@ rename_names( @resolvable = @method_call_expr -| @path_expr_base -| @path_pat -| @record_expr -| @record_pat -| @tuple_struct_pat +| @path_ast_node ; #keyset[id] @@ -1984,20 +1980,24 @@ paren_type_ties( int ty: @type_ref ref ); +@path_ast_node = + @path_expr +| @path_pat +| @record_expr +| @record_pat +| @tuple_struct_pat +; + +#keyset[id] +path_ast_node_paths( + int id: @path_ast_node ref, + int path: @path ref +); + @path_expr_base = @path_expr ; -path_pats( - unique int id: @path_pat -); - -#keyset[id] -path_pat_paths( - int id: @path_pat ref, - int path: @path ref -); - path_types( unique int id: @path_type ); @@ -2102,22 +2102,6 @@ range_pat_starts( int start: @pat ref ); -record_exprs( - unique int id: @record_expr -); - -#keyset[id] -record_expr_paths( - int id: @record_expr ref, - int path: @path ref -); - -#keyset[id] -record_expr_record_expr_field_lists( - int id: @record_expr ref, - int record_expr_field_list: @record_expr_field_list ref -); - record_field_lists( unique int id: @record_field_list ); @@ -2129,22 +2113,6 @@ record_field_list_fields( int field: @record_field ref ); -record_pats( - unique int id: @record_pat -); - -#keyset[id] -record_pat_paths( - int id: @record_pat ref, - int path: @path ref -); - -#keyset[id] -record_pat_record_pat_field_lists( - int id: @record_pat ref, - int record_pat_field_list: @record_pat_field_list ref -); - ref_exprs( unique int id: @ref_expr ); @@ -2340,23 +2308,6 @@ tuple_pat_fields( int field: @pat ref ); -tuple_struct_pats( - unique int id: @tuple_struct_pat -); - -#keyset[id, index] -tuple_struct_pat_fields( - int id: @tuple_struct_pat ref, - int index: int ref, - int field: @pat ref -); - -#keyset[id] -tuple_struct_pat_paths( - int id: @tuple_struct_pat ref, - int path: @path ref -); - tuple_types( unique int id: @tuple_type ); @@ -2991,10 +2942,28 @@ path_expr_attrs( int attr: @attr ref ); +path_pats( + unique int id: @path_pat +); + +record_exprs( + unique int id: @record_expr +); + #keyset[id] -path_expr_paths( - int id: @path_expr ref, - int path: @path ref +record_expr_record_expr_field_lists( + int id: @record_expr ref, + int record_expr_field_list: @record_expr_field_list ref +); + +record_pats( + unique int id: @record_pat +); + +#keyset[id] +record_pat_record_pat_field_lists( + int id: @record_pat ref, + int record_pat_field_list: @record_pat_field_list ref ); statics( @@ -3181,6 +3150,17 @@ trait_alias_where_clauses( int where_clause: @where_clause ref ); +tuple_struct_pats( + unique int id: @tuple_struct_pat +); + +#keyset[id, index] +tuple_struct_pat_fields( + int id: @tuple_struct_pat ref, + int index: int ref, + int field: @pat ref +); + type_aliases( unique int id: @type_alias ); diff --git a/rust/ql/src/queries/security/CWE-696/BadCtorInitialization.ql b/rust/ql/src/queries/security/CWE-696/BadCtorInitialization.ql index 22ea6514e02..a8607569974 100644 --- a/rust/ql/src/queries/security/CWE-696/BadCtorInitialization.ql +++ b/rust/ql/src/queries/security/CWE-696/BadCtorInitialization.ql @@ -32,7 +32,7 @@ class CtorAttr extends Attr { */ class StdCall extends Expr { StdCall() { - this.(CallExpr).getFunction().(PathExpr).getPath().getResolvedCrateOrigin() = "lang:std" or + this.(CallExpr).getFunction().(PathExpr).getResolvedCrateOrigin() = "lang:std" or this.(MethodCallExpr).getResolvedCrateOrigin() = "lang:std" } } diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.expected index 4f9a487e85d..df4fdad5c91 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.expected +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.expected @@ -1,5 +1,5 @@ -| gen_format_args_expr.rs:9:20:9:20 | x | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | -| gen_format_args_expr.rs:9:25:9:25 | y | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | -| gen_format_argument.rs:5:22:5:26 | value | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | -| gen_format_argument.rs:5:29:5:33 | width | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | -| gen_format_argument.rs:5:36:5:44 | precision | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | +| gen_format_args_expr.rs:9:20:9:20 | x | +| gen_format_args_expr.rs:9:25:9:25 | y | +| gen_format_argument.rs:5:22:5:26 | value | +| gen_format_argument.rs:5:29:5:33 | width | +| gen_format_argument.rs:5:36:5:44 | precision | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql index 488207bc5bb..4f43ca11870 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql @@ -2,12 +2,6 @@ import codeql.rust.elements import TestUtils -from FormatTemplateVariableAccess x, string hasResolvedPath, string hasResolvedCrateOrigin -where - toBeTested(x) and - not x.isUnknown() and - (if x.hasResolvedPath() then hasResolvedPath = "yes" else hasResolvedPath = "no") and - if x.hasResolvedCrateOrigin() - then hasResolvedCrateOrigin = "yes" - else hasResolvedCrateOrigin = "no" -select x, "hasResolvedPath:", hasResolvedPath, "hasResolvedCrateOrigin:", hasResolvedCrateOrigin +from FormatTemplateVariableAccess x +where toBeTested(x) and not x.isUnknown() +select x diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedCrateOrigin.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedCrateOrigin.ql deleted file mode 100644 index 8022e46e327..00000000000 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedCrateOrigin.ql +++ /dev/null @@ -1,7 +0,0 @@ -// generated by codegen, do not edit -import codeql.rust.elements -import TestUtils - -from FormatTemplateVariableAccess x -where toBeTested(x) and not x.isUnknown() -select x, x.getResolvedCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedPath.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedPath.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedPath.ql b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedPath.ql deleted file mode 100644 index 916fb7da09b..00000000000 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess_getResolvedPath.ql +++ /dev/null @@ -1,7 +0,0 @@ -// generated by codegen, do not edit -import codeql.rust.elements -import TestUtils - -from FormatTemplateVariableAccess x -where toBeTested(x) and not x.isUnknown() -select x, x.getResolvedPath() diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected b/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected index 540ad015ddb..b9032fb4384 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected +++ b/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected @@ -1,6 +1,6 @@ -| gen_path.rs:6:5:6:12 | ...::bar | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | getNumberOfAttrs: | 0 | hasPath: | yes | -| gen_path_expr.rs:5:13:5:20 | variable | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | getNumberOfAttrs: | 0 | hasPath: | yes | -| gen_path_expr.rs:6:13:6:20 | ...::bar | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | getNumberOfAttrs: | 0 | hasPath: | yes | -| gen_path_expr.rs:7:13:7:20 | ...::foo | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | getNumberOfAttrs: | 0 | hasPath: | yes | -| gen_path_expr.rs:8:13:8:35 | ...::foo | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | getNumberOfAttrs: | 0 | hasPath: | yes | -| gen_path_pat.rs:5:11:5:11 | x | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | getNumberOfAttrs: | 0 | hasPath: | yes | +| gen_path.rs:6:5:6:12 | ...::bar | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfAttrs: | 0 | +| gen_path_expr.rs:5:13:5:20 | variable | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfAttrs: | 0 | +| gen_path_expr.rs:6:13:6:20 | ...::bar | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfAttrs: | 0 | +| gen_path_expr.rs:7:13:7:20 | ...::foo | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfAttrs: | 0 | +| gen_path_expr.rs:8:13:8:35 | ...::foo | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfAttrs: | 0 | +| gen_path_pat.rs:5:11:5:11 | x | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfAttrs: | 0 | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr.ql b/rust/ql/test/extractor-tests/generated/Path/PathExpr.ql index 62db075a1ac..41b7414d24c 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathExpr.ql +++ b/rust/ql/test/extractor-tests/generated/Path/PathExpr.ql @@ -3,8 +3,8 @@ import codeql.rust.elements import TestUtils from - PathExpr x, string hasResolvedPath, string hasResolvedCrateOrigin, int getNumberOfAttrs, - string hasPath + PathExpr x, string hasResolvedPath, string hasResolvedCrateOrigin, string hasPath, + int getNumberOfAttrs where toBeTested(x) and not x.isUnknown() and @@ -14,7 +14,7 @@ where then hasResolvedCrateOrigin = "yes" else hasResolvedCrateOrigin = "no" ) and - getNumberOfAttrs = x.getNumberOfAttrs() and - if x.hasPath() then hasPath = "yes" else hasPath = "no" + (if x.hasPath() then hasPath = "yes" else hasPath = "no") and + getNumberOfAttrs = x.getNumberOfAttrs() select x, "hasResolvedPath:", hasResolvedPath, "hasResolvedCrateOrigin:", hasResolvedCrateOrigin, - "getNumberOfAttrs:", getNumberOfAttrs, "hasPath:", hasPath + "hasPath:", hasPath, "getNumberOfAttrs:", getNumberOfAttrs diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.expected b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.expected index 9fa41161bcb..9e9de534b1e 100644 --- a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.expected +++ b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.expected @@ -1,3 +1,3 @@ -| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | getNumberOfFields: | 4 | hasPath: | yes | -| gen_tuple_struct_pat.rs:7:9:7:20 | Tuple(...) | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | getNumberOfFields: | 2 | hasPath: | yes | -| gen_tuple_struct_pat.rs:8:9:8:17 | Tuple(...) | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | getNumberOfFields: | 1 | hasPath: | yes | +| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfFields: | 4 | +| gen_tuple_struct_pat.rs:7:9:7:20 | Tuple(...) | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfFields: | 2 | +| gen_tuple_struct_pat.rs:8:9:8:17 | Tuple(...) | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfFields: | 1 | diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql index 14ba21627af..af59101fe75 100644 --- a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql +++ b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql @@ -3,8 +3,8 @@ import codeql.rust.elements import TestUtils from - TupleStructPat x, string hasResolvedPath, string hasResolvedCrateOrigin, int getNumberOfFields, - string hasPath + TupleStructPat x, string hasResolvedPath, string hasResolvedCrateOrigin, string hasPath, + int getNumberOfFields where toBeTested(x) and not x.isUnknown() and @@ -14,7 +14,7 @@ where then hasResolvedCrateOrigin = "yes" else hasResolvedCrateOrigin = "no" ) and - getNumberOfFields = x.getNumberOfFields() and - if x.hasPath() then hasPath = "yes" else hasPath = "no" + (if x.hasPath() then hasPath = "yes" else hasPath = "no") and + getNumberOfFields = x.getNumberOfFields() select x, "hasResolvedPath:", hasResolvedPath, "hasResolvedCrateOrigin:", hasResolvedCrateOrigin, - "getNumberOfFields:", getNumberOfFields, "hasPath:", hasPath + "hasPath:", hasPath, "getNumberOfFields:", getNumberOfFields diff --git a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.ql b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.ql index 2b08aeea63f..5bcbe05229b 100644 --- a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.ql +++ b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.ql @@ -10,9 +10,9 @@ module MyFlowConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof ThreatModelSource } predicate isSink(DataFlow::Node sink) { - any(CallExpr call | - call.getFunction().(PathExpr).getPath().getResolvedPath() = "crate::test::sink" - ).getArgList().getAnArg() = sink.asExpr().getExpr() + any(CallExpr call | call.getFunction().(PathExpr).getResolvedPath() = "crate::test::sink") + .getArgList() + .getAnArg() = sink.asExpr().getExpr() } } diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index 05a163de9bf..d51f5328380 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -114,13 +114,13 @@ class _: """ -class PathExprBase(Expr, Resolvable): +class PathExprBase(Expr): """ A path expression or a variable access in a formatting template. See `PathExpr` and `FormatTemplateVariableAccess` for further details. """ -@annotate(PathExpr, replace_bases={Expr: PathExprBase}, cfg = True) +@annotate(PathExpr, replace_bases={Expr: PathExprBase}, add_bases=(PathAstNode,), cfg = True) @qltest.test_with(Path) class _: """ @@ -132,6 +132,7 @@ class _: let z = ::foo; ``` """ + path: drop @annotate(IfExpr, cfg = True) @@ -412,7 +413,7 @@ class _: """ -@annotate(RecordExpr, add_bases=(Resolvable,), cfg = True) +@annotate(RecordExpr, add_bases=(PathAstNode,), cfg = True) class _: """ A record expression. For example: @@ -423,6 +424,7 @@ class _: Foo { .. } = second; ``` """ + path: drop @annotate(FieldExpr, cfg = True) @@ -682,7 +684,7 @@ class _: """ -@annotate(RecordPat, add_bases=(Resolvable,), cfg = True) +@annotate(RecordPat, add_bases=(PathAstNode,), cfg = True) class _: """ A record pattern. For example: @@ -693,6 +695,7 @@ class _: } ``` """ + path: drop @annotate(RangePat, cfg = True) @@ -723,7 +726,7 @@ class _: """ -@annotate(PathPat, add_bases=(Resolvable,), cfg = True) +@annotate(PathPat, add_bases=(PathAstNode,), cfg = True) @qltest.test_with(Path) class _: """ @@ -735,6 +738,7 @@ class _: } ``` """ + path: drop @annotate(LiteralPat, cfg = True) @@ -769,7 +773,7 @@ class _: """ -@annotate(TupleStructPat, add_bases=(Resolvable,), cfg = True) +@annotate(TupleStructPat, add_bases=(PathAstNode,), cfg = True) class _: """ A tuple struct pattern. For example: @@ -781,6 +785,7 @@ class _: }; ``` """ + path: drop @annotate(RefPat, cfg = True) diff --git a/rust/schema/prelude.py b/rust/schema/prelude.py index 9b9858be6a5..c22875cc858 100644 --- a/rust/schema/prelude.py +++ b/rust/schema/prelude.py @@ -89,7 +89,14 @@ class Addressable(AstNode): class Resolvable(AstNode): """ - Either a `PathExpr`, a `PathPat`, or a `MethodCallExpr`. + One of `PathExpr`, `RecordExpr`, `PathPat`, `RecordPat`, `TupleStructPat` or `MethodCallExpr`. """ resolved_path: optional[string] | rust.detach | ql.internal resolved_crate_origin: optional[string] | rust.detach | ql.internal + + +class PathAstNode(Resolvable): + """ + An AST element wrapping a path (`PathExpr`, `RecordExpr`, `PathPat`, `RecordPat`, `TupleStructPat`). + """ + path: optional["Path"] | child From bb83641634c13ea42c66dbf7d0bfe599354a522a Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 2 Dec 2024 08:22:51 +0100 Subject: [PATCH 3/9] Rust: accept all test changes for now --- .../generated/BoxPat/BoxPat_getPat.expected | 2 +- .../IdentPat/IdentPat_getPat.expected | 2 +- .../generated/LetExpr/LetExpr_getPat.expected | 2 +- .../generated/LetStmt/LetStmt_getPat.expected | 2 +- .../MatchArm/MatchArm_getPat.expected | 4 +- .../generated/OrPat/OrPat_getPat.expected | 2 +- .../generated/RefPat/RefPat_getPat.expected | 2 +- .../controlflow-unstable/Cfg.expected | 6 +- .../library-tests/controlflow/Cfg.expected | 68 +++++----- .../dataflow/local/DataFlowStep.expected | 68 ++++++---- .../dataflow/local/inline-flow.expected | 56 ++++++-- .../test/library-tests/variables/Cfg.expected | 128 +++++++++--------- 12 files changed, 198 insertions(+), 144 deletions(-) diff --git a/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected index 4e12432652d..a43975657a8 100644 --- a/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected @@ -1,2 +1,2 @@ -| gen_box_pat.rs:6:9:6:27 | box ... | gen_box_pat.rs:6:13:6:27 | TupleStructPat | +| gen_box_pat.rs:6:9:6:27 | box ... | gen_box_pat.rs:6:13:6:27 | ...::Some(...) | | gen_box_pat.rs:7:9:7:24 | box ...::None | gen_box_pat.rs:7:13:7:24 | ...::None | diff --git a/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getPat.expected b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getPat.expected index 2e2f0d9228e..3c2fd2dc379 100644 --- a/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getPat.expected @@ -1 +1 @@ -| gen_ident_pat.rs:10:9:10:25 | y | gen_ident_pat.rs:10:11:10:25 | TupleStructPat | +| gen_ident_pat.rs:10:9:10:25 | y | gen_ident_pat.rs:10:11:10:25 | ...::Some(...) | diff --git a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getPat.expected b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getPat.expected index 7c31e314128..b935bd98013 100644 --- a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getPat.expected @@ -1 +1 @@ -| gen_let_expr.rs:5:8:5:31 | let ... = maybe_some | gen_let_expr.rs:5:12:5:18 | TupleStructPat | +| gen_let_expr.rs:5:8:5:31 | let ... = maybe_some | gen_let_expr.rs:5:12:5:18 | Some(...) | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected index 758837c946d..cd4c3f8cc64 100644 --- a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected @@ -3,4 +3,4 @@ | gen_let_stmt.rs:7:5:7:15 | let ... | gen_let_stmt.rs:7:9:7:9 | x | | gen_let_stmt.rs:8:5:8:10 | let ... | gen_let_stmt.rs:8:9:8:9 | x | | gen_let_stmt.rs:9:5:9:24 | let ... = ... | gen_let_stmt.rs:9:9:9:14 | TuplePat | -| gen_let_stmt.rs:10:5:12:6 | let ... = ... else {...} | gen_let_stmt.rs:10:9:10:15 | TupleStructPat | +| gen_let_stmt.rs:10:5:12:6 | let ... = ... else {...} | gen_let_stmt.rs:10:9:10:15 | Some(...) | diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected index 9928555fc32..d4adba7f838 100644 --- a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected @@ -1,4 +1,4 @@ -| gen_match_arm.rs:6:9:6:29 | ... => y | gen_match_arm.rs:6:9:6:23 | TupleStructPat | +| gen_match_arm.rs:6:9:6:29 | ... => y | gen_match_arm.rs:6:9:6:23 | ...::Some(...) | | gen_match_arm.rs:7:9:7:26 | ...::None => 0 | gen_match_arm.rs:7:9:7:20 | ...::None | -| gen_match_arm.rs:10:9:10:35 | ... if ... => ... | gen_match_arm.rs:10:9:10:15 | TupleStructPat | +| gen_match_arm.rs:10:9:10:35 | ... if ... => ... | gen_match_arm.rs:10:9:10:15 | Some(...) | | gen_match_arm.rs:11:9:11:15 | _ => 0 | gen_match_arm.rs:11:9:11:9 | _ | diff --git a/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected b/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected index 22ebce5dde5..9e50c27e035 100644 --- a/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected @@ -1,2 +1,2 @@ -| gen_or_pat.rs:6:9:6:38 | ... \| ...::None | 0 | gen_or_pat.rs:6:9:6:23 | TupleStructPat | +| gen_or_pat.rs:6:9:6:38 | ... \| ...::None | 0 | gen_or_pat.rs:6:9:6:23 | ...::Some(...) | | gen_or_pat.rs:6:9:6:38 | ... \| ...::None | 1 | gen_or_pat.rs:6:27:6:38 | ...::None | diff --git a/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected b/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected index d4f78daeb82..029fd9fa172 100644 --- a/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected @@ -1,2 +1,2 @@ -| gen_ref_pat.rs:6:9:6:28 | &mut ... | gen_ref_pat.rs:6:14:6:28 | TupleStructPat | +| gen_ref_pat.rs:6:9:6:28 | &mut ... | gen_ref_pat.rs:6:14:6:28 | ...::Some(...) | | gen_ref_pat.rs:7:9:7:21 | &...::None | gen_ref_pat.rs:7:10:7:21 | ...::None | diff --git a/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected b/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected index 4260e2384c8..7a7d9884f19 100644 --- a/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected @@ -14,10 +14,10 @@ edges | test.rs:6:12:6:31 | [boolean(false)] ... && ... | test.rs:9:13:9:17 | false | false | | test.rs:6:12:6:31 | [boolean(true)] ... && ... | test.rs:7:13:7:13 | d | true | | test.rs:6:17:6:31 | let ... = b | test.rs:6:31:6:31 | b | | -| test.rs:6:21:6:27 | TupleStructPat | test.rs:6:12:6:31 | [boolean(false)] ... && ... | no-match | -| test.rs:6:21:6:27 | TupleStructPat | test.rs:6:26:6:26 | d | match | +| test.rs:6:21:6:27 | Some(...) | test.rs:6:12:6:31 | [boolean(false)] ... && ... | no-match | +| test.rs:6:21:6:27 | Some(...) | test.rs:6:26:6:26 | d | match | | test.rs:6:26:6:26 | d | test.rs:6:12:6:31 | [boolean(true)] ... && ... | match | -| test.rs:6:31:6:31 | b | test.rs:6:21:6:27 | TupleStructPat | | +| test.rs:6:31:6:31 | b | test.rs:6:21:6:27 | Some(...) | | | test.rs:6:33:8:9 | { ... } | test.rs:6:9:10:9 | if ... {...} else {...} | | | test.rs:7:13:7:13 | d | test.rs:6:33:8:9 | { ... } | | | test.rs:8:16:10:9 | { ... } | test.rs:6:9:10:9 | if ... {...} else {...} | | diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 5137e2f8b89..3165b2354be 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -191,11 +191,11 @@ edges | test.rs:98:27:98:28 | 10 | test.rs:98:24:98:28 | 1..10 | | | test.rs:99:9:103:9 | while ... { ... } | test.rs:97:25:104:5 | { ... } | | | test.rs:99:15:99:39 | let ... = ... | test.rs:99:29:99:32 | iter | | -| test.rs:99:19:99:25 | TupleStructPat | test.rs:99:9:103:9 | while ... { ... } | no-match | -| test.rs:99:19:99:25 | TupleStructPat | test.rs:99:24:99:24 | x | match | +| test.rs:99:19:99:25 | Some(...) | test.rs:99:9:103:9 | while ... { ... } | no-match | +| test.rs:99:19:99:25 | Some(...) | test.rs:99:24:99:24 | x | match | | test.rs:99:24:99:24 | x | test.rs:100:17:100:17 | x | match | | test.rs:99:29:99:32 | iter | test.rs:99:29:99:39 | ... .next(...) | | -| test.rs:99:29:99:39 | ... .next(...) | test.rs:99:19:99:25 | TupleStructPat | | +| test.rs:99:29:99:39 | ... .next(...) | test.rs:99:19:99:25 | Some(...) | | | test.rs:99:41:103:9 | { ... } | test.rs:99:15:99:39 | let ... = ... | | | test.rs:100:13:102:13 | if ... {...} | test.rs:99:41:103:9 | { ... } | | | test.rs:100:17:100:17 | x | test.rs:100:22:100:22 | 5 | | @@ -274,10 +274,10 @@ edges | test.rs:137:48:143:5 | { ... } | test.rs:137:5:143:5 | exit fn test_if_let_else (normal) | | | test.rs:138:9:142:9 | if ... {...} else {...} | test.rs:137:48:143:5 | { ... } | | | test.rs:138:12:138:26 | let ... = a | test.rs:138:26:138:26 | a | | -| test.rs:138:16:138:22 | TupleStructPat | test.rs:138:21:138:21 | n | match | -| test.rs:138:16:138:22 | TupleStructPat | test.rs:141:13:141:13 | 0 | no-match | +| test.rs:138:16:138:22 | Some(...) | test.rs:138:21:138:21 | n | match | +| test.rs:138:16:138:22 | Some(...) | test.rs:141:13:141:13 | 0 | no-match | | test.rs:138:21:138:21 | n | test.rs:139:13:139:13 | n | match | -| test.rs:138:26:138:26 | a | test.rs:138:16:138:22 | TupleStructPat | | +| test.rs:138:26:138:26 | a | test.rs:138:16:138:22 | Some(...) | | | test.rs:138:28:140:9 | { ... } | test.rs:138:9:142:9 | if ... {...} else {...} | | | test.rs:139:13:139:13 | n | test.rs:138:28:140:9 | { ... } | | | test.rs:140:16:142:9 | { ... } | test.rs:138:9:142:9 | if ... {...} else {...} | | @@ -290,10 +290,10 @@ edges | test.rs:146:9:148:9 | ExprStmt | test.rs:146:12:146:26 | let ... = a | | | test.rs:146:9:148:9 | if ... {...} | test.rs:149:9:149:9 | 0 | | | test.rs:146:12:146:26 | let ... = a | test.rs:146:26:146:26 | a | | -| test.rs:146:16:146:22 | TupleStructPat | test.rs:146:9:148:9 | if ... {...} | no-match | -| test.rs:146:16:146:22 | TupleStructPat | test.rs:146:21:146:21 | n | match | +| test.rs:146:16:146:22 | Some(...) | test.rs:146:9:148:9 | if ... {...} | no-match | +| test.rs:146:16:146:22 | Some(...) | test.rs:146:21:146:21 | n | match | | test.rs:146:21:146:21 | n | test.rs:147:13:147:21 | ExprStmt | match | -| test.rs:146:26:146:26 | a | test.rs:146:16:146:22 | TupleStructPat | | +| test.rs:146:26:146:26 | a | test.rs:146:16:146:22 | Some(...) | | | test.rs:147:13:147:20 | return n | test.rs:145:5:150:5 | exit fn test_if_let (normal) | return | | test.rs:147:13:147:21 | ExprStmt | test.rs:147:20:147:20 | n | | | test.rs:147:20:147:20 | n | test.rs:147:13:147:20 | return n | | @@ -663,19 +663,19 @@ edges | test.rs:307:19:307:42 | ...: Option::<...> | test.rs:308:15:308:25 | maybe_digit | | | test.rs:307:52:313:5 | { ... } | test.rs:307:5:313:5 | exit fn test_match (normal) | | | test.rs:308:9:312:9 | match maybe_digit { ... } | test.rs:307:52:313:5 | { ... } | | -| test.rs:308:15:308:25 | maybe_digit | test.rs:309:13:309:27 | TupleStructPat | | -| test.rs:309:13:309:27 | TupleStructPat | test.rs:309:26:309:26 | x | match | -| test.rs:309:13:309:27 | TupleStructPat | test.rs:310:13:310:27 | TupleStructPat | no-match | +| test.rs:308:15:308:25 | maybe_digit | test.rs:309:13:309:27 | ...::Some(...) | | +| test.rs:309:13:309:27 | ...::Some(...) | test.rs:309:26:309:26 | x | match | +| test.rs:309:13:309:27 | ...::Some(...) | test.rs:310:13:310:27 | ...::Some(...) | no-match | | test.rs:309:26:309:26 | x | test.rs:309:32:309:32 | x | match | | test.rs:309:32:309:32 | x | test.rs:309:36:309:37 | 10 | | | test.rs:309:32:309:37 | ... < ... | test.rs:309:42:309:42 | x | true | -| test.rs:309:32:309:37 | ... < ... | test.rs:310:13:310:27 | TupleStructPat | false | +| test.rs:309:32:309:37 | ... < ... | test.rs:310:13:310:27 | ...::Some(...) | false | | test.rs:309:36:309:37 | 10 | test.rs:309:32:309:37 | ... < ... | | | test.rs:309:42:309:42 | x | test.rs:309:46:309:46 | 5 | | | test.rs:309:42:309:46 | ... + ... | test.rs:308:9:312:9 | match maybe_digit { ... } | | | test.rs:309:46:309:46 | 5 | test.rs:309:42:309:46 | ... + ... | | -| test.rs:310:13:310:27 | TupleStructPat | test.rs:310:26:310:26 | x | match | -| test.rs:310:13:310:27 | TupleStructPat | test.rs:311:13:311:24 | ...::None | no-match | +| test.rs:310:13:310:27 | ...::Some(...) | test.rs:310:26:310:26 | x | match | +| test.rs:310:13:310:27 | ...::Some(...) | test.rs:311:13:311:24 | ...::None | no-match | | test.rs:310:26:310:26 | x | test.rs:310:32:310:32 | x | match | | test.rs:310:32:310:32 | x | test.rs:308:9:312:9 | match maybe_digit { ... } | | | test.rs:311:13:311:24 | ...::None | test.rs:311:29:311:29 | 5 | match | @@ -686,7 +686,7 @@ edges | test.rs:315:44:315:67 | ...: Option::<...> | test.rs:316:19:316:29 | maybe_digit | | | test.rs:315:77:324:5 | { ... } | test.rs:315:5:324:5 | exit fn test_match_with_return_in_scrutinee (normal) | | | test.rs:316:9:323:9 | match ... { ... } | test.rs:315:77:324:5 | { ... } | | -| test.rs:316:16:320:9 | if ... {...} else {...} | test.rs:321:13:321:27 | TupleStructPat | | +| test.rs:316:16:320:9 | if ... {...} else {...} | test.rs:321:13:321:27 | ...::Some(...) | | | test.rs:316:19:316:29 | maybe_digit | test.rs:316:34:316:37 | Some | | | test.rs:316:19:316:40 | ... == ... | test.rs:317:13:317:21 | ExprStmt | true | | test.rs:316:19:316:40 | ... == ... | test.rs:319:13:319:23 | maybe_digit | false | @@ -698,8 +698,8 @@ edges | test.rs:317:20:317:20 | 3 | test.rs:317:13:317:20 | return 3 | | | test.rs:318:16:320:9 | { ... } | test.rs:316:16:320:9 | if ... {...} else {...} | | | test.rs:319:13:319:23 | maybe_digit | test.rs:318:16:320:9 | { ... } | | -| test.rs:321:13:321:27 | TupleStructPat | test.rs:321:26:321:26 | x | match | -| test.rs:321:13:321:27 | TupleStructPat | test.rs:322:13:322:24 | ...::None | no-match | +| test.rs:321:13:321:27 | ...::Some(...) | test.rs:321:26:321:26 | x | match | +| test.rs:321:13:321:27 | ...::Some(...) | test.rs:322:13:322:24 | ...::None | no-match | | test.rs:321:26:321:26 | x | test.rs:321:32:321:32 | x | match | | test.rs:321:32:321:32 | x | test.rs:321:36:321:36 | 5 | | | test.rs:321:32:321:36 | ... + ... | test.rs:316:9:323:9 | match ... { ... } | | @@ -716,9 +716,9 @@ edges | test.rs:327:9:330:18 | ... && ... | test.rs:326:60:331:5 | { ... } | | | test.rs:327:10:330:9 | [boolean(false)] match r { ... } | test.rs:327:9:330:18 | ... && ... | false | | test.rs:327:10:330:9 | [boolean(true)] match r { ... } | test.rs:330:15:330:18 | cond | true | -| test.rs:327:16:327:16 | r | test.rs:328:13:328:19 | TupleStructPat | | -| test.rs:328:13:328:19 | TupleStructPat | test.rs:328:18:328:18 | a | match | -| test.rs:328:13:328:19 | TupleStructPat | test.rs:329:13:329:13 | _ | no-match | +| test.rs:327:16:327:16 | r | test.rs:328:13:328:19 | Some(...) | | +| test.rs:328:13:328:19 | Some(...) | test.rs:328:18:328:18 | a | match | +| test.rs:328:13:328:19 | Some(...) | test.rs:329:13:329:13 | _ | no-match | | test.rs:328:18:328:18 | a | test.rs:328:24:328:24 | a | match | | test.rs:328:24:328:24 | a | test.rs:327:10:330:9 | [boolean(false)] match r { ... } | false | | test.rs:328:24:328:24 | a | test.rs:327:10:330:9 | [boolean(true)] match r { ... } | true | @@ -731,12 +731,12 @@ edges | test.rs:333:35:333:58 | ...: Result::<...> | test.rs:334:15:334:15 | r | | | test.rs:333:66:338:5 | { ... } | test.rs:333:5:338:5 | exit fn test_match_with_no_arms (normal) | | | test.rs:334:9:337:9 | match r { ... } | test.rs:333:66:338:5 | { ... } | | -| test.rs:334:15:334:15 | r | test.rs:335:13:335:21 | TupleStructPat | | -| test.rs:335:13:335:21 | TupleStructPat | test.rs:335:16:335:20 | value | match | -| test.rs:335:13:335:21 | TupleStructPat | test.rs:336:13:336:22 | TupleStructPat | no-match | +| test.rs:334:15:334:15 | r | test.rs:335:13:335:21 | Ok(...) | | +| test.rs:335:13:335:21 | Ok(...) | test.rs:335:16:335:20 | value | match | +| test.rs:335:13:335:21 | Ok(...) | test.rs:336:13:336:22 | Err(...) | no-match | | test.rs:335:16:335:20 | value | test.rs:335:26:335:30 | value | match | | test.rs:335:26:335:30 | value | test.rs:334:9:337:9 | match r { ... } | | -| test.rs:336:13:336:22 | TupleStructPat | test.rs:336:17:336:21 | never | match | +| test.rs:336:13:336:22 | Err(...) | test.rs:336:17:336:21 | never | match | | test.rs:336:17:336:21 | never | test.rs:336:33:336:37 | never | match | | test.rs:336:27:336:40 | match never { ... } | test.rs:334:9:337:9 | match r { ... } | | | test.rs:336:33:336:37 | never | test.rs:336:27:336:40 | match never { ... } | | @@ -746,10 +746,10 @@ edges | test.rs:343:23:343:36 | ...: Option::<...> | test.rs:344:9:344:57 | let ... = a else {...} | | | test.rs:343:46:346:5 | { ... } | test.rs:343:5:346:5 | exit fn test_let_match (normal) | | | test.rs:344:9:344:57 | let ... = a else {...} | test.rs:344:23:344:23 | a | | -| test.rs:344:13:344:19 | TupleStructPat | test.rs:344:18:344:18 | n | match | -| test.rs:344:13:344:19 | TupleStructPat | test.rs:344:39:344:53 | MacroStmts | no-match | +| test.rs:344:13:344:19 | Some(...) | test.rs:344:18:344:18 | n | match | +| test.rs:344:13:344:19 | Some(...) | test.rs:344:39:344:53 | MacroStmts | no-match | | test.rs:344:18:344:18 | n | test.rs:345:9:345:9 | n | match | -| test.rs:344:23:344:23 | a | test.rs:344:13:344:19 | TupleStructPat | | +| test.rs:344:23:344:23 | a | test.rs:344:13:344:19 | Some(...) | | | test.rs:344:32:344:54 | ...::panic_fmt | test.rs:344:39:344:53 | "Expected some" | | | test.rs:344:32:344:54 | MacroExpr | test.rs:344:30:344:56 | { ... } | | | test.rs:344:39:344:53 | "Expected some" | test.rs:344:39:344:53 | FormatArgsExpr | | @@ -770,9 +770,9 @@ edges | test.rs:349:9:352:10 | let ... = ... | test.rs:349:25:349:25 | m | | | test.rs:349:13:349:15 | ret | test.rs:353:9:353:12 | true | match | | test.rs:349:19:352:9 | match m { ... } | test.rs:349:13:349:15 | ret | | -| test.rs:349:25:349:25 | m | test.rs:350:13:350:21 | TupleStructPat | | -| test.rs:350:13:350:21 | TupleStructPat | test.rs:350:18:350:20 | ret | match | -| test.rs:350:13:350:21 | TupleStructPat | test.rs:351:13:351:16 | None | no-match | +| test.rs:349:25:349:25 | m | test.rs:350:13:350:21 | Some(...) | | +| test.rs:350:13:350:21 | Some(...) | test.rs:350:18:350:20 | ret | match | +| test.rs:350:13:350:21 | Some(...) | test.rs:351:13:351:16 | None | no-match | | test.rs:350:18:350:20 | ret | test.rs:350:26:350:28 | ret | match | | test.rs:350:26:350:28 | ret | test.rs:349:19:352:9 | match m { ... } | | | test.rs:351:13:351:16 | None | test.rs:351:28:351:32 | false | match | @@ -1030,10 +1030,10 @@ edges | test.rs:484:13:484:13 | x | test.rs:485:9:487:10 | let ... = x else {...} | match | | test.rs:484:30:484:33 | None | test.rs:484:13:484:13 | x | | | test.rs:485:9:487:10 | let ... = x else {...} | test.rs:485:23:485:23 | x | | -| test.rs:485:13:485:19 | TupleStructPat | test.rs:485:18:485:18 | y | match | -| test.rs:485:13:485:19 | TupleStructPat | test.rs:486:13:486:27 | ExprStmt | no-match | +| test.rs:485:13:485:19 | Some(...) | test.rs:485:18:485:18 | y | match | +| test.rs:485:13:485:19 | Some(...) | test.rs:486:13:486:27 | ExprStmt | no-match | | test.rs:485:18:485:18 | y | test.rs:488:9:488:9 | 0 | match | -| test.rs:485:23:485:23 | x | test.rs:485:13:485:19 | TupleStructPat | | +| test.rs:485:23:485:23 | x | test.rs:485:13:485:19 | Some(...) | | | test.rs:486:13:486:26 | break ''block 1 | test.rs:483:18:489:5 | 'block: { ... } | break | | test.rs:486:13:486:27 | ExprStmt | test.rs:486:26:486:26 | 1 | | | test.rs:486:26:486:26 | 1 | test.rs:486:13:486:26 | break ''block 1 | | diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index a49da751679..a6ecc87bebe 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -34,7 +34,7 @@ localStep | main.rs:32:9:32:9 | [SSA] b | main.rs:36:10:36:10 | b | | main.rs:32:9:32:9 | b | main.rs:32:9:32:9 | [SSA] b | | main.rs:32:13:35:5 | match m { ... } | main.rs:32:9:32:9 | b | -| main.rs:32:19:32:19 | m | main.rs:33:9:33:15 | TupleStructPat | +| main.rs:32:19:32:19 | m | main.rs:33:9:33:15 | Some(...) | | main.rs:32:19:32:19 | m | main.rs:34:9:34:12 | None | | main.rs:33:20:33:20 | a | main.rs:32:13:35:5 | match m { ... } | | main.rs:34:17:34:17 | 0 | main.rs:32:13:35:5 | match m { ... } | @@ -82,14 +82,14 @@ localStep | main.rs:105:9:105:10 | [SSA] s2 | main.rs:110:11:110:12 | s2 | | main.rs:105:9:105:10 | s2 | main.rs:105:9:105:10 | [SSA] s2 | | main.rs:105:14:105:28 | ...::Some(...) | main.rs:105:9:105:10 | s2 | -| main.rs:106:11:106:12 | s1 | main.rs:107:9:107:23 | TupleStructPat | +| main.rs:106:11:106:12 | s1 | main.rs:107:9:107:23 | ...::Some(...) | | main.rs:106:11:106:12 | s1 | main.rs:108:9:108:20 | ...::None | | main.rs:107:22:107:22 | [SSA] n | main.rs:107:33:107:33 | n | | main.rs:107:22:107:22 | n | main.rs:107:22:107:22 | [SSA] n | | main.rs:107:28:107:34 | sink(...) | main.rs:106:5:109:5 | match s1 { ... } | | main.rs:108:25:108:31 | sink(...) | main.rs:106:5:109:5 | match s1 { ... } | | main.rs:110:5:113:5 | match s2 { ... } | main.rs:103:37:114:1 | { ... } | -| main.rs:110:11:110:12 | s2 | main.rs:111:9:111:23 | TupleStructPat | +| main.rs:110:11:110:12 | s2 | main.rs:111:9:111:23 | ...::Some(...) | | main.rs:110:11:110:12 | s2 | main.rs:112:9:112:20 | ...::None | | main.rs:111:22:111:22 | [SSA] n | main.rs:111:33:111:33 | n | | main.rs:111:22:111:22 | n | main.rs:111:22:111:22 | [SSA] n | @@ -101,14 +101,14 @@ localStep | main.rs:118:9:118:10 | [SSA] s2 | main.rs:123:11:123:12 | s2 | | main.rs:118:9:118:10 | s2 | main.rs:118:9:118:10 | [SSA] s2 | | main.rs:118:14:118:20 | Some(...) | main.rs:118:9:118:10 | s2 | -| main.rs:119:11:119:12 | s1 | main.rs:120:9:120:15 | TupleStructPat | +| main.rs:119:11:119:12 | s1 | main.rs:120:9:120:15 | Some(...) | | main.rs:119:11:119:12 | s1 | main.rs:121:9:121:12 | None | | main.rs:120:14:120:14 | [SSA] n | main.rs:120:25:120:25 | n | | main.rs:120:14:120:14 | n | main.rs:120:14:120:14 | [SSA] n | | main.rs:120:20:120:26 | sink(...) | main.rs:119:5:122:5 | match s1 { ... } | | main.rs:121:17:121:23 | sink(...) | main.rs:119:5:122:5 | match s1 { ... } | | main.rs:123:5:126:5 | match s2 { ... } | main.rs:116:39:127:1 | { ... } | -| main.rs:123:11:123:12 | s2 | main.rs:124:9:124:15 | TupleStructPat | +| main.rs:123:11:123:12 | s2 | main.rs:124:9:124:15 | Some(...) | | main.rs:123:11:123:12 | s2 | main.rs:125:9:125:12 | None | | main.rs:124:14:124:14 | [SSA] n | main.rs:124:25:124:25 | n | | main.rs:124:14:124:14 | n | main.rs:124:14:124:14 | [SSA] n | @@ -120,8 +120,8 @@ localStep | main.rs:136:9:136:10 | [SSA] s2 | main.rs:144:11:144:12 | s2 | | main.rs:136:9:136:10 | s2 | main.rs:136:9:136:10 | [SSA] s2 | | main.rs:136:14:136:30 | ...::B(...) | main.rs:136:9:136:10 | s2 | -| main.rs:137:11:137:12 | s1 | main.rs:138:9:138:25 | TupleStructPat | -| main.rs:137:11:137:12 | s1 | main.rs:139:9:139:25 | TupleStructPat | +| main.rs:137:11:137:12 | s1 | main.rs:138:9:138:25 | ...::A(...) | +| main.rs:137:11:137:12 | s1 | main.rs:139:9:139:25 | ...::B(...) | | main.rs:137:11:137:12 | s1 | main.rs:141:11:141:12 | s1 | | main.rs:138:24:138:24 | [SSA] n | main.rs:138:35:138:35 | n | | main.rs:138:24:138:24 | n | main.rs:138:24:138:24 | [SSA] n | @@ -130,8 +130,8 @@ localStep | main.rs:139:24:139:24 | n | main.rs:139:24:139:24 | [SSA] n | | main.rs:139:30:139:36 | sink(...) | main.rs:137:5:140:5 | match s1 { ... } | | main.rs:141:11:141:12 | s1 | main.rs:142:10:142:46 | ... \| ... | -| main.rs:142:10:142:46 | ... \| ... | main.rs:142:10:142:26 | TupleStructPat | -| main.rs:142:10:142:46 | ... \| ... | main.rs:142:30:142:46 | TupleStructPat | +| main.rs:142:10:142:46 | ... \| ... | main.rs:142:10:142:26 | ...::A(...) | +| main.rs:142:10:142:46 | ... \| ... | main.rs:142:30:142:46 | ...::B(...) | | main.rs:142:10:142:46 | [SSA] [match(true)] phi | main.rs:142:57:142:57 | n | | main.rs:142:25:142:25 | [SSA] [input] [match(true)] phi | main.rs:142:10:142:46 | [SSA] [match(true)] phi | | main.rs:142:25:142:25 | [SSA] n | main.rs:142:25:142:25 | [SSA] [input] [match(true)] phi | @@ -141,8 +141,8 @@ localStep | main.rs:142:45:142:45 | n | main.rs:142:45:142:45 | [SSA] n | | main.rs:142:52:142:58 | sink(...) | main.rs:141:5:143:5 | match s1 { ... } | | main.rs:144:5:147:5 | match s2 { ... } | main.rs:134:48:148:1 | { ... } | -| main.rs:144:11:144:12 | s2 | main.rs:145:9:145:25 | TupleStructPat | -| main.rs:144:11:144:12 | s2 | main.rs:146:9:146:25 | TupleStructPat | +| main.rs:144:11:144:12 | s2 | main.rs:145:9:145:25 | ...::A(...) | +| main.rs:144:11:144:12 | s2 | main.rs:146:9:146:25 | ...::B(...) | | main.rs:145:24:145:24 | [SSA] n | main.rs:145:35:145:35 | n | | main.rs:145:24:145:24 | n | main.rs:145:24:145:24 | [SSA] n | | main.rs:145:30:145:36 | sink(...) | main.rs:144:5:147:5 | match s2 { ... } | @@ -155,8 +155,8 @@ localStep | main.rs:154:9:154:10 | [SSA] s2 | main.rs:162:11:162:12 | s2 | | main.rs:154:9:154:10 | s2 | main.rs:154:9:154:10 | [SSA] s2 | | main.rs:154:14:154:17 | B(...) | main.rs:154:9:154:10 | s2 | -| main.rs:155:11:155:12 | s1 | main.rs:156:9:156:12 | TupleStructPat | -| main.rs:155:11:155:12 | s1 | main.rs:157:9:157:12 | TupleStructPat | +| main.rs:155:11:155:12 | s1 | main.rs:156:9:156:12 | A(...) | +| main.rs:155:11:155:12 | s1 | main.rs:157:9:157:12 | B(...) | | main.rs:155:11:155:12 | s1 | main.rs:159:11:159:12 | s1 | | main.rs:156:11:156:11 | [SSA] n | main.rs:156:22:156:22 | n | | main.rs:156:11:156:11 | n | main.rs:156:11:156:11 | [SSA] n | @@ -165,8 +165,8 @@ localStep | main.rs:157:11:157:11 | n | main.rs:157:11:157:11 | [SSA] n | | main.rs:157:17:157:23 | sink(...) | main.rs:155:5:158:5 | match s1 { ... } | | main.rs:159:11:159:12 | s1 | main.rs:160:10:160:20 | ... \| ... | -| main.rs:160:10:160:20 | ... \| ... | main.rs:160:10:160:13 | TupleStructPat | -| main.rs:160:10:160:20 | ... \| ... | main.rs:160:17:160:20 | TupleStructPat | +| main.rs:160:10:160:20 | ... \| ... | main.rs:160:10:160:13 | A(...) | +| main.rs:160:10:160:20 | ... \| ... | main.rs:160:17:160:20 | B(...) | | main.rs:160:10:160:20 | [SSA] [match(true)] phi | main.rs:160:31:160:31 | n | | main.rs:160:12:160:12 | [SSA] [input] [match(true)] phi | main.rs:160:10:160:20 | [SSA] [match(true)] phi | | main.rs:160:12:160:12 | [SSA] n | main.rs:160:12:160:12 | [SSA] [input] [match(true)] phi | @@ -176,8 +176,8 @@ localStep | main.rs:160:19:160:19 | n | main.rs:160:19:160:19 | [SSA] n | | main.rs:160:26:160:32 | sink(...) | main.rs:159:5:161:5 | match s1 { ... } | | main.rs:162:5:165:5 | match s2 { ... } | main.rs:152:50:166:1 | { ... } | -| main.rs:162:11:162:12 | s2 | main.rs:163:9:163:12 | TupleStructPat | -| main.rs:162:11:162:12 | s2 | main.rs:164:9:164:12 | TupleStructPat | +| main.rs:162:11:162:12 | s2 | main.rs:163:9:163:12 | A(...) | +| main.rs:162:11:162:12 | s2 | main.rs:164:9:164:12 | B(...) | | main.rs:163:11:163:11 | [SSA] n | main.rs:163:22:163:22 | n | | main.rs:163:11:163:11 | n | main.rs:163:11:163:11 | [SSA] n | | main.rs:163:17:163:23 | sink(...) | main.rs:162:5:165:5 | match s2 { ... } | @@ -285,22 +285,38 @@ storeStep | main.rs:118:19:118:19 | 2 | Some | main.rs:118:14:118:20 | Some(...) | | main.rs:135:29:135:38 | source(...) | A | main.rs:135:14:135:39 | ...::A(...) | | main.rs:136:29:136:29 | 2 | B | main.rs:136:14:136:30 | ...::B(...) | +| main.rs:153:16:153:25 | source(...) | A | main.rs:153:14:153:26 | A(...) | +| main.rs:154:16:154:16 | 2 | B | main.rs:154:14:154:17 | B(...) | | main.rs:175:18:175:27 | source(...) | C | main.rs:174:14:176:5 | ...::C {...} | | main.rs:177:41:177:41 | 2 | D | main.rs:177:14:177:43 | ...::D {...} | +| main.rs:195:18:195:27 | source(...) | C | main.rs:194:14:196:5 | C {...} | +| main.rs:197:27:197:27 | 2 | D | main.rs:197:14:197:29 | D {...} | | main.rs:240:27:240:27 | 0 | Some | main.rs:240:22:240:28 | Some(...) | readStep -| main.rs:33:9:33:15 | TupleStructPat | Some | main.rs:33:14:33:14 | _ | -| main.rs:120:9:120:15 | TupleStructPat | Some | main.rs:120:14:120:14 | n | -| main.rs:124:9:124:15 | TupleStructPat | Some | main.rs:124:14:124:14 | n | -| main.rs:138:9:138:25 | TupleStructPat | A | main.rs:138:24:138:24 | n | -| main.rs:139:9:139:25 | TupleStructPat | B | main.rs:139:24:139:24 | n | -| main.rs:142:10:142:26 | TupleStructPat | A | main.rs:142:25:142:25 | n | -| main.rs:142:30:142:46 | TupleStructPat | B | main.rs:142:45:142:45 | n | -| main.rs:145:9:145:25 | TupleStructPat | A | main.rs:145:24:145:24 | n | -| main.rs:146:9:146:25 | TupleStructPat | B | main.rs:146:24:146:24 | n | +| main.rs:33:9:33:15 | Some(...) | Some | main.rs:33:14:33:14 | _ | +| main.rs:120:9:120:15 | Some(...) | Some | main.rs:120:14:120:14 | n | +| main.rs:124:9:124:15 | Some(...) | Some | main.rs:124:14:124:14 | n | +| main.rs:138:9:138:25 | ...::A(...) | A | main.rs:138:24:138:24 | n | +| main.rs:139:9:139:25 | ...::B(...) | B | main.rs:139:24:139:24 | n | +| main.rs:142:10:142:26 | ...::A(...) | A | main.rs:142:25:142:25 | n | +| main.rs:142:30:142:46 | ...::B(...) | B | main.rs:142:45:142:45 | n | +| main.rs:145:9:145:25 | ...::A(...) | A | main.rs:145:24:145:24 | n | +| main.rs:146:9:146:25 | ...::B(...) | B | main.rs:146:24:146:24 | n | +| main.rs:156:9:156:12 | A(...) | A | main.rs:156:11:156:11 | n | +| main.rs:157:9:157:12 | B(...) | B | main.rs:157:11:157:11 | n | +| main.rs:160:10:160:13 | A(...) | A | main.rs:160:12:160:12 | n | +| main.rs:160:17:160:20 | B(...) | B | main.rs:160:19:160:19 | n | +| main.rs:163:9:163:12 | A(...) | A | main.rs:163:11:163:11 | n | +| main.rs:164:9:164:12 | B(...) | B | main.rs:164:11:164:11 | n | | main.rs:179:9:179:38 | ...::C {...} | C | main.rs:179:36:179:36 | n | | main.rs:180:9:180:38 | ...::D {...} | D | main.rs:180:36:180:36 | n | | main.rs:183:10:183:39 | ...::C {...} | C | main.rs:183:37:183:37 | n | | main.rs:183:43:183:72 | ...::D {...} | D | main.rs:183:70:183:70 | n | | main.rs:186:9:186:38 | ...::C {...} | C | main.rs:186:36:186:36 | n | | main.rs:187:9:187:38 | ...::D {...} | D | main.rs:187:36:187:36 | n | +| main.rs:199:9:199:24 | C {...} | C | main.rs:199:22:199:22 | n | +| main.rs:200:9:200:24 | D {...} | D | main.rs:200:22:200:22 | n | +| main.rs:203:10:203:25 | C {...} | C | main.rs:203:23:203:23 | n | +| main.rs:203:29:203:44 | D {...} | D | main.rs:203:42:203:42 | n | +| main.rs:206:9:206:24 | C {...} | C | main.rs:206:22:206:22 | n | +| main.rs:207:9:207:24 | D {...} | D | main.rs:207:22:207:22 | n | diff --git a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected index bfafa38c3ff..7ec1b3d8916 100644 --- a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected @@ -5,17 +5,24 @@ edges | main.rs:31:13:31:21 | source(...) | main.rs:36:10:36:10 | b | provenance | | | main.rs:45:15:45:23 | source(...) | main.rs:47:10:47:10 | b | provenance | | | main.rs:53:9:53:17 | source(...) | main.rs:54:10:54:10 | i | provenance | | -| main.rs:117:14:117:29 | Some(...) [Some] | main.rs:120:9:120:15 | TupleStructPat [Some] | provenance | | +| main.rs:117:14:117:29 | Some(...) [Some] | main.rs:120:9:120:15 | Some(...) [Some] | provenance | | | main.rs:117:19:117:28 | source(...) | main.rs:117:14:117:29 | Some(...) [Some] | provenance | | -| main.rs:120:9:120:15 | TupleStructPat [Some] | main.rs:120:14:120:14 | n | provenance | | +| main.rs:120:9:120:15 | Some(...) [Some] | main.rs:120:14:120:14 | n | provenance | | | main.rs:120:14:120:14 | n | main.rs:120:25:120:25 | n | provenance | | -| main.rs:135:14:135:39 | ...::A(...) [A] | main.rs:138:9:138:25 | TupleStructPat [A] | provenance | | -| main.rs:135:14:135:39 | ...::A(...) [A] | main.rs:142:10:142:26 | TupleStructPat [A] | provenance | | +| main.rs:135:14:135:39 | ...::A(...) [A] | main.rs:138:9:138:25 | ...::A(...) [A] | provenance | | +| main.rs:135:14:135:39 | ...::A(...) [A] | main.rs:142:10:142:26 | ...::A(...) [A] | provenance | | | main.rs:135:29:135:38 | source(...) | main.rs:135:14:135:39 | ...::A(...) [A] | provenance | | -| main.rs:138:9:138:25 | TupleStructPat [A] | main.rs:138:24:138:24 | n | provenance | | +| main.rs:138:9:138:25 | ...::A(...) [A] | main.rs:138:24:138:24 | n | provenance | | | main.rs:138:24:138:24 | n | main.rs:138:35:138:35 | n | provenance | | -| main.rs:142:10:142:26 | TupleStructPat [A] | main.rs:142:25:142:25 | n | provenance | | +| main.rs:142:10:142:26 | ...::A(...) [A] | main.rs:142:25:142:25 | n | provenance | | | main.rs:142:25:142:25 | n | main.rs:142:57:142:57 | n | provenance | | +| main.rs:153:14:153:26 | A(...) [A] | main.rs:156:9:156:12 | A(...) [A] | provenance | | +| main.rs:153:14:153:26 | A(...) [A] | main.rs:160:10:160:13 | A(...) [A] | provenance | | +| main.rs:153:16:153:25 | source(...) | main.rs:153:14:153:26 | A(...) [A] | provenance | | +| main.rs:156:9:156:12 | A(...) [A] | main.rs:156:11:156:11 | n | provenance | | +| main.rs:156:11:156:11 | n | main.rs:156:22:156:22 | n | provenance | | +| main.rs:160:10:160:13 | A(...) [A] | main.rs:160:12:160:12 | n | provenance | | +| main.rs:160:12:160:12 | n | main.rs:160:31:160:31 | n | provenance | | | main.rs:174:14:176:5 | ...::C {...} [C] | main.rs:179:9:179:38 | ...::C {...} [C] | provenance | | | main.rs:174:14:176:5 | ...::C {...} [C] | main.rs:183:10:183:39 | ...::C {...} [C] | provenance | | | main.rs:175:18:175:27 | source(...) | main.rs:174:14:176:5 | ...::C {...} [C] | provenance | | @@ -23,6 +30,13 @@ edges | main.rs:179:36:179:36 | n | main.rs:179:48:179:48 | n | provenance | | | main.rs:183:10:183:39 | ...::C {...} [C] | main.rs:183:37:183:37 | n | provenance | | | main.rs:183:37:183:37 | n | main.rs:183:83:183:83 | n | provenance | | +| main.rs:194:14:196:5 | C {...} [C] | main.rs:199:9:199:24 | C {...} [C] | provenance | | +| main.rs:194:14:196:5 | C {...} [C] | main.rs:203:10:203:25 | C {...} [C] | provenance | | +| main.rs:195:18:195:27 | source(...) | main.rs:194:14:196:5 | C {...} [C] | provenance | | +| main.rs:199:9:199:24 | C {...} [C] | main.rs:199:22:199:22 | n | provenance | | +| main.rs:199:22:199:22 | n | main.rs:199:34:199:34 | n | provenance | | +| main.rs:203:10:203:25 | C {...} [C] | main.rs:203:23:203:23 | n | provenance | | +| main.rs:203:23:203:23 | n | main.rs:203:55:203:55 | n | provenance | | nodes | main.rs:15:10:15:18 | source(...) | semmle.label | source(...) | | main.rs:19:13:19:21 | source(...) | semmle.label | source(...) | @@ -37,17 +51,25 @@ nodes | main.rs:54:10:54:10 | i | semmle.label | i | | main.rs:117:14:117:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | | main.rs:117:19:117:28 | source(...) | semmle.label | source(...) | -| main.rs:120:9:120:15 | TupleStructPat [Some] | semmle.label | TupleStructPat [Some] | +| main.rs:120:9:120:15 | Some(...) [Some] | semmle.label | Some(...) [Some] | | main.rs:120:14:120:14 | n | semmle.label | n | | main.rs:120:25:120:25 | n | semmle.label | n | | main.rs:135:14:135:39 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | | main.rs:135:29:135:38 | source(...) | semmle.label | source(...) | -| main.rs:138:9:138:25 | TupleStructPat [A] | semmle.label | TupleStructPat [A] | +| main.rs:138:9:138:25 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | | main.rs:138:24:138:24 | n | semmle.label | n | | main.rs:138:35:138:35 | n | semmle.label | n | -| main.rs:142:10:142:26 | TupleStructPat [A] | semmle.label | TupleStructPat [A] | +| main.rs:142:10:142:26 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | | main.rs:142:25:142:25 | n | semmle.label | n | | main.rs:142:57:142:57 | n | semmle.label | n | +| main.rs:153:14:153:26 | A(...) [A] | semmle.label | A(...) [A] | +| main.rs:153:16:153:25 | source(...) | semmle.label | source(...) | +| main.rs:156:9:156:12 | A(...) [A] | semmle.label | A(...) [A] | +| main.rs:156:11:156:11 | n | semmle.label | n | +| main.rs:156:22:156:22 | n | semmle.label | n | +| main.rs:160:10:160:13 | A(...) [A] | semmle.label | A(...) [A] | +| main.rs:160:12:160:12 | n | semmle.label | n | +| main.rs:160:31:160:31 | n | semmle.label | n | | main.rs:174:14:176:5 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | | main.rs:175:18:175:27 | source(...) | semmle.label | source(...) | | main.rs:179:9:179:38 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | @@ -56,8 +78,20 @@ nodes | main.rs:183:10:183:39 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | | main.rs:183:37:183:37 | n | semmle.label | n | | main.rs:183:83:183:83 | n | semmle.label | n | +| main.rs:194:14:196:5 | C {...} [C] | semmle.label | C {...} [C] | +| main.rs:195:18:195:27 | source(...) | semmle.label | source(...) | +| main.rs:199:9:199:24 | C {...} [C] | semmle.label | C {...} [C] | +| main.rs:199:22:199:22 | n | semmle.label | n | +| main.rs:199:34:199:34 | n | semmle.label | n | +| main.rs:203:10:203:25 | C {...} [C] | semmle.label | C {...} [C] | +| main.rs:203:23:203:23 | n | semmle.label | n | +| main.rs:203:55:203:55 | n | semmle.label | n | subpaths testFailures +| main.rs:156:22:156:22 | n | Fixed missing result: hasValueFlow=16 | +| main.rs:160:31:160:31 | n | Fixed missing result: hasValueFlow=16 | +| main.rs:199:34:199:34 | n | Fixed missing result: hasValueFlow=18 | +| main.rs:203:55:203:55 | n | Fixed missing result: hasValueFlow=18 | #select | main.rs:15:10:15:18 | source(...) | main.rs:15:10:15:18 | source(...) | main.rs:15:10:15:18 | source(...) | $@ | main.rs:15:10:15:18 | source(...) | source(...) | | main.rs:20:10:20:10 | s | main.rs:19:13:19:21 | source(...) | main.rs:20:10:20:10 | s | $@ | main.rs:19:13:19:21 | source(...) | source(...) | @@ -68,5 +102,9 @@ testFailures | main.rs:120:25:120:25 | n | main.rs:117:19:117:28 | source(...) | main.rs:120:25:120:25 | n | $@ | main.rs:117:19:117:28 | source(...) | source(...) | | main.rs:138:35:138:35 | n | main.rs:135:29:135:38 | source(...) | main.rs:138:35:138:35 | n | $@ | main.rs:135:29:135:38 | source(...) | source(...) | | main.rs:142:57:142:57 | n | main.rs:135:29:135:38 | source(...) | main.rs:142:57:142:57 | n | $@ | main.rs:135:29:135:38 | source(...) | source(...) | +| main.rs:156:22:156:22 | n | main.rs:153:16:153:25 | source(...) | main.rs:156:22:156:22 | n | $@ | main.rs:153:16:153:25 | source(...) | source(...) | +| main.rs:160:31:160:31 | n | main.rs:153:16:153:25 | source(...) | main.rs:160:31:160:31 | n | $@ | main.rs:153:16:153:25 | source(...) | source(...) | | main.rs:179:48:179:48 | n | main.rs:175:18:175:27 | source(...) | main.rs:179:48:179:48 | n | $@ | main.rs:175:18:175:27 | source(...) | source(...) | | main.rs:183:83:183:83 | n | main.rs:175:18:175:27 | source(...) | main.rs:183:83:183:83 | n | $@ | main.rs:175:18:175:27 | source(...) | source(...) | +| main.rs:199:34:199:34 | n | main.rs:195:18:195:27 | source(...) | main.rs:199:34:199:34 | n | $@ | main.rs:195:18:195:27 | source(...) | source(...) | +| main.rs:203:55:203:55 | n | main.rs:195:18:195:27 | source(...) | main.rs:203:55:203:55 | n | $@ | main.rs:195:18:195:27 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/variables/Cfg.expected b/rust/ql/test/library-tests/variables/Cfg.expected index 6b979eac0da..b55c0e9d04c 100644 --- a/rust/ql/test/library-tests/variables/Cfg.expected +++ b/rust/ql/test/library-tests/variables/Cfg.expected @@ -197,10 +197,10 @@ edges | variables.rs:85:32:85:39 | "Hello!" | variables.rs:85:19:85:40 | ...::from(...) | | | variables.rs:87:5:90:5 | if ... {...} | variables.rs:84:19:91:1 | { ... } | | | variables.rs:87:8:88:12 | let ... = s1 | variables.rs:88:11:88:12 | s1 | | -| variables.rs:87:12:87:23 | TupleStructPat | variables.rs:87:5:90:5 | if ... {...} | no-match | -| variables.rs:87:12:87:23 | TupleStructPat | variables.rs:87:17:87:22 | s2 | match | +| variables.rs:87:12:87:23 | Some(...) | variables.rs:87:5:90:5 | if ... {...} | no-match | +| variables.rs:87:12:87:23 | Some(...) | variables.rs:87:17:87:22 | s2 | match | | variables.rs:87:17:87:22 | s2 | variables.rs:89:9:89:22 | ExprStmt | match | -| variables.rs:88:11:88:12 | s1 | variables.rs:87:12:87:23 | TupleStructPat | | +| variables.rs:88:11:88:12 | s1 | variables.rs:87:12:87:23 | Some(...) | | | variables.rs:88:14:90:5 | { ... } | variables.rs:87:5:90:5 | if ... {...} | | | variables.rs:89:9:89:17 | print_str | variables.rs:89:19:89:20 | s2 | | | variables.rs:89:9:89:21 | print_str(...) | variables.rs:88:14:90:5 | { ... } | | @@ -210,11 +210,11 @@ edges | variables.rs:93:1:99:1 | exit fn let_pattern4 (normal) | variables.rs:93:1:99:1 | exit fn let_pattern4 | | | variables.rs:93:19:99:1 | { ... } | variables.rs:93:1:99:1 | exit fn let_pattern4 (normal) | | | variables.rs:94:5:97:10 | let ... = ... else {...} | variables.rs:94:34:94:37 | Some | | -| variables.rs:94:9:94:16 | TupleStructPat | variables.rs:94:14:94:15 | x5 | match | -| variables.rs:94:9:94:16 | TupleStructPat | variables.rs:96:13:96:19 | MacroStmts | no-match | +| variables.rs:94:9:94:16 | Some(...) | variables.rs:94:14:94:15 | x5 | match | +| variables.rs:94:9:94:16 | Some(...) | variables.rs:96:13:96:19 | MacroStmts | no-match | | variables.rs:94:14:94:15 | x5 | variables.rs:98:5:98:18 | ExprStmt | match | | variables.rs:94:34:94:37 | Some | variables.rs:94:39:94:42 | "x5" | | -| variables.rs:94:34:94:43 | Some(...) | variables.rs:94:9:94:16 | TupleStructPat | | +| variables.rs:94:34:94:43 | Some(...) | variables.rs:94:9:94:16 | Some(...) | | | variables.rs:94:39:94:42 | "x5" | variables.rs:94:34:94:43 | Some(...) | | | variables.rs:96:13:96:19 | "not yet implemented" | variables.rs:96:13:96:19 | ...::panic(...) | | | variables.rs:96:13:96:19 | ...::panic | variables.rs:96:13:96:19 | "not yet implemented" | | @@ -237,10 +237,10 @@ edges | variables.rs:102:32:102:39 | "Hello!" | variables.rs:102:19:102:40 | ...::from(...) | | | variables.rs:104:5:107:5 | while ... { ... } | variables.rs:101:19:108:1 | { ... } | | | variables.rs:104:11:105:12 | let ... = s1 | variables.rs:105:11:105:12 | s1 | | -| variables.rs:104:15:104:26 | TupleStructPat | variables.rs:104:5:107:5 | while ... { ... } | no-match | -| variables.rs:104:15:104:26 | TupleStructPat | variables.rs:104:20:104:25 | s2 | match | +| variables.rs:104:15:104:26 | Some(...) | variables.rs:104:5:107:5 | while ... { ... } | no-match | +| variables.rs:104:15:104:26 | Some(...) | variables.rs:104:20:104:25 | s2 | match | | variables.rs:104:20:104:25 | s2 | variables.rs:106:9:106:22 | ExprStmt | match | -| variables.rs:105:11:105:12 | s1 | variables.rs:104:15:104:26 | TupleStructPat | | +| variables.rs:105:11:105:12 | s1 | variables.rs:104:15:104:26 | Some(...) | | | variables.rs:105:14:107:5 | { ... } | variables.rs:104:11:105:12 | let ... = s1 | | | variables.rs:106:9:106:17 | print_str | variables.rs:106:19:106:20 | s2 | | | variables.rs:106:9:106:21 | print_str(...) | variables.rs:105:14:107:5 | { ... } | | @@ -259,17 +259,17 @@ edges | variables.rs:112:14:112:15 | 10 | variables.rs:112:9:112:10 | y1 | | | variables.rs:114:5:122:5 | ExprStmt | variables.rs:114:11:114:12 | x6 | | | variables.rs:114:5:122:5 | match x6 { ... } | variables.rs:124:5:124:18 | ExprStmt | | -| variables.rs:114:11:114:12 | x6 | variables.rs:115:9:115:16 | TupleStructPat | | -| variables.rs:115:9:115:16 | TupleStructPat | variables.rs:115:14:115:15 | 50 | match | -| variables.rs:115:9:115:16 | TupleStructPat | variables.rs:116:9:116:16 | TupleStructPat | no-match | +| variables.rs:114:11:114:12 | x6 | variables.rs:115:9:115:16 | Some(...) | | +| variables.rs:115:9:115:16 | Some(...) | variables.rs:115:14:115:15 | 50 | match | +| variables.rs:115:9:115:16 | Some(...) | variables.rs:116:9:116:16 | Some(...) | no-match | | variables.rs:115:14:115:15 | 50 | variables.rs:115:14:115:15 | 50 | | | variables.rs:115:14:115:15 | 50 | variables.rs:115:21:115:29 | print_str | match | -| variables.rs:115:14:115:15 | 50 | variables.rs:116:9:116:16 | TupleStructPat | no-match | +| variables.rs:115:14:115:15 | 50 | variables.rs:116:9:116:16 | Some(...) | no-match | | variables.rs:115:21:115:29 | print_str | variables.rs:115:31:115:38 | "Got 50" | | | variables.rs:115:21:115:39 | print_str(...) | variables.rs:114:5:122:5 | match x6 { ... } | | | variables.rs:115:31:115:38 | "Got 50" | variables.rs:115:21:115:39 | print_str(...) | | -| variables.rs:116:9:116:16 | TupleStructPat | variables.rs:116:14:116:15 | y1 | match | -| variables.rs:116:9:116:16 | TupleStructPat | variables.rs:121:9:121:12 | None | no-match | +| variables.rs:116:9:116:16 | Some(...) | variables.rs:116:14:116:15 | y1 | match | +| variables.rs:116:9:116:16 | Some(...) | variables.rs:121:9:121:12 | None | no-match | | variables.rs:116:14:116:15 | y1 | variables.rs:119:13:119:21 | print_i64 | match | | variables.rs:118:9:120:9 | { ... } | variables.rs:114:5:122:5 | match x6 { ... } | | | variables.rs:119:13:119:21 | print_i64 | variables.rs:119:23:119:24 | y1 | | @@ -404,12 +404,12 @@ edges | variables.rs:189:18:189:33 | ...::Left(...) | variables.rs:189:9:189:14 | either | | | variables.rs:189:31:189:32 | 32 | variables.rs:189:18:189:33 | ...::Left(...) | | | variables.rs:190:5:193:5 | match either { ... } | variables.rs:188:21:194:1 | { ... } | | -| variables.rs:190:11:190:16 | either | variables.rs:191:9:191:24 | TupleStructPat | | -| variables.rs:191:9:191:24 | TupleStructPat | variables.rs:191:22:191:23 | a3 | match | -| variables.rs:191:9:191:24 | TupleStructPat | variables.rs:191:28:191:44 | TupleStructPat | no-match | +| variables.rs:190:11:190:16 | either | variables.rs:191:9:191:24 | ...::Left(...) | | +| variables.rs:191:9:191:24 | ...::Left(...) | variables.rs:191:22:191:23 | a3 | match | +| variables.rs:191:9:191:24 | ...::Left(...) | variables.rs:191:28:191:44 | ...::Right(...) | no-match | | variables.rs:191:9:191:44 | [match(true)] ... \| ... | variables.rs:192:16:192:24 | print_i64 | match | | variables.rs:191:22:191:23 | a3 | variables.rs:191:9:191:44 | [match(true)] ... \| ... | match | -| variables.rs:191:28:191:44 | TupleStructPat | variables.rs:191:42:191:43 | a3 | match | +| variables.rs:191:28:191:44 | ...::Right(...) | variables.rs:191:42:191:43 | a3 | match | | variables.rs:191:42:191:43 | a3 | variables.rs:191:9:191:44 | [match(true)] ... \| ... | match | | variables.rs:192:16:192:24 | print_i64 | variables.rs:192:26:192:27 | a3 | | | variables.rs:192:16:192:28 | print_i64(...) | variables.rs:190:5:193:5 | match either { ... } | | @@ -424,47 +424,47 @@ edges | variables.rs:203:34:203:35 | 62 | variables.rs:203:14:203:36 | ...::Second(...) | | | variables.rs:204:5:207:5 | ExprStmt | variables.rs:204:11:204:12 | tv | | | variables.rs:204:5:207:5 | match tv { ... } | variables.rs:208:5:211:5 | ExprStmt | | -| variables.rs:204:11:204:12 | tv | variables.rs:205:9:205:30 | TupleStructPat | | -| variables.rs:205:9:205:30 | TupleStructPat | variables.rs:205:28:205:29 | a4 | match | -| variables.rs:205:9:205:30 | TupleStructPat | variables.rs:205:34:205:56 | TupleStructPat | no-match | +| variables.rs:204:11:204:12 | tv | variables.rs:205:9:205:30 | ...::First(...) | | +| variables.rs:205:9:205:30 | ...::First(...) | variables.rs:205:28:205:29 | a4 | match | +| variables.rs:205:9:205:30 | ...::First(...) | variables.rs:205:34:205:56 | ...::Second(...) | no-match | | variables.rs:205:9:205:81 | [match(true)] ... \| ... \| ... | variables.rs:206:16:206:24 | print_i64 | match | | variables.rs:205:28:205:29 | a4 | variables.rs:205:9:205:81 | [match(true)] ... \| ... \| ... | match | -| variables.rs:205:34:205:56 | TupleStructPat | variables.rs:205:54:205:55 | a4 | match | -| variables.rs:205:34:205:56 | TupleStructPat | variables.rs:205:60:205:81 | TupleStructPat | no-match | +| variables.rs:205:34:205:56 | ...::Second(...) | variables.rs:205:54:205:55 | a4 | match | +| variables.rs:205:34:205:56 | ...::Second(...) | variables.rs:205:60:205:81 | ...::Third(...) | no-match | | variables.rs:205:54:205:55 | a4 | variables.rs:205:9:205:81 | [match(true)] ... \| ... \| ... | match | -| variables.rs:205:60:205:81 | TupleStructPat | variables.rs:205:79:205:80 | a4 | match | +| variables.rs:205:60:205:81 | ...::Third(...) | variables.rs:205:79:205:80 | a4 | match | | variables.rs:205:79:205:80 | a4 | variables.rs:205:9:205:81 | [match(true)] ... \| ... \| ... | match | | variables.rs:206:16:206:24 | print_i64 | variables.rs:206:26:206:27 | a4 | | | variables.rs:206:16:206:28 | print_i64(...) | variables.rs:204:5:207:5 | match tv { ... } | | | variables.rs:206:26:206:27 | a4 | variables.rs:206:16:206:28 | print_i64(...) | | | variables.rs:208:5:211:5 | ExprStmt | variables.rs:208:11:208:12 | tv | | | variables.rs:208:5:211:5 | match tv { ... } | variables.rs:212:11:212:12 | tv | | -| variables.rs:208:11:208:12 | tv | variables.rs:209:10:209:31 | TupleStructPat | | +| variables.rs:208:11:208:12 | tv | variables.rs:209:10:209:31 | ...::First(...) | | | variables.rs:209:9:209:83 | [match(true)] ... \| ... | variables.rs:210:16:210:24 | print_i64 | match | -| variables.rs:209:10:209:31 | TupleStructPat | variables.rs:209:29:209:30 | a5 | match | -| variables.rs:209:10:209:31 | TupleStructPat | variables.rs:209:35:209:57 | TupleStructPat | no-match | -| variables.rs:209:10:209:57 | [match(false)] ... \| ... | variables.rs:209:62:209:83 | TupleStructPat | no-match | +| variables.rs:209:10:209:31 | ...::First(...) | variables.rs:209:29:209:30 | a5 | match | +| variables.rs:209:10:209:31 | ...::First(...) | variables.rs:209:35:209:57 | ...::Second(...) | no-match | +| variables.rs:209:10:209:57 | [match(false)] ... \| ... | variables.rs:209:62:209:83 | ...::Third(...) | no-match | | variables.rs:209:10:209:57 | [match(true)] ... \| ... | variables.rs:209:9:209:83 | [match(true)] ... \| ... | match | | variables.rs:209:29:209:30 | a5 | variables.rs:209:10:209:57 | [match(true)] ... \| ... | match | -| variables.rs:209:35:209:57 | TupleStructPat | variables.rs:209:10:209:57 | [match(false)] ... \| ... | no-match | -| variables.rs:209:35:209:57 | TupleStructPat | variables.rs:209:55:209:56 | a5 | match | +| variables.rs:209:35:209:57 | ...::Second(...) | variables.rs:209:10:209:57 | [match(false)] ... \| ... | no-match | +| variables.rs:209:35:209:57 | ...::Second(...) | variables.rs:209:55:209:56 | a5 | match | | variables.rs:209:55:209:56 | a5 | variables.rs:209:10:209:57 | [match(true)] ... \| ... | match | -| variables.rs:209:62:209:83 | TupleStructPat | variables.rs:209:81:209:82 | a5 | match | +| variables.rs:209:62:209:83 | ...::Third(...) | variables.rs:209:81:209:82 | a5 | match | | variables.rs:209:81:209:82 | a5 | variables.rs:209:9:209:83 | [match(true)] ... \| ... | match | | variables.rs:210:16:210:24 | print_i64 | variables.rs:210:26:210:27 | a5 | | | variables.rs:210:16:210:28 | print_i64(...) | variables.rs:208:5:211:5 | match tv { ... } | | | variables.rs:210:26:210:27 | a5 | variables.rs:210:16:210:28 | print_i64(...) | | | variables.rs:212:5:215:5 | match tv { ... } | variables.rs:202:21:216:1 | { ... } | | -| variables.rs:212:11:212:12 | tv | variables.rs:213:9:213:30 | TupleStructPat | | -| variables.rs:213:9:213:30 | TupleStructPat | variables.rs:213:28:213:29 | a6 | match | -| variables.rs:213:9:213:30 | TupleStructPat | variables.rs:213:35:213:57 | TupleStructPat | no-match | +| variables.rs:212:11:212:12 | tv | variables.rs:213:9:213:30 | ...::First(...) | | +| variables.rs:213:9:213:30 | ...::First(...) | variables.rs:213:28:213:29 | a6 | match | +| variables.rs:213:9:213:30 | ...::First(...) | variables.rs:213:35:213:57 | ...::Second(...) | no-match | | variables.rs:213:9:213:83 | [match(true)] ... \| ... | variables.rs:214:16:214:24 | print_i64 | match | | variables.rs:213:28:213:29 | a6 | variables.rs:213:9:213:83 | [match(true)] ... \| ... | match | -| variables.rs:213:35:213:57 | TupleStructPat | variables.rs:213:55:213:56 | a6 | match | -| variables.rs:213:35:213:57 | TupleStructPat | variables.rs:213:61:213:82 | TupleStructPat | no-match | +| variables.rs:213:35:213:57 | ...::Second(...) | variables.rs:213:55:213:56 | a6 | match | +| variables.rs:213:35:213:57 | ...::Second(...) | variables.rs:213:61:213:82 | ...::Third(...) | no-match | | variables.rs:213:35:213:82 | [match(true)] ... \| ... | variables.rs:213:9:213:83 | [match(true)] ... \| ... | match | | variables.rs:213:55:213:56 | a6 | variables.rs:213:35:213:82 | [match(true)] ... \| ... | match | -| variables.rs:213:61:213:82 | TupleStructPat | variables.rs:213:80:213:81 | a6 | match | +| variables.rs:213:61:213:82 | ...::Third(...) | variables.rs:213:80:213:81 | a6 | match | | variables.rs:213:80:213:81 | a6 | variables.rs:213:35:213:82 | [match(true)] ... \| ... | match | | variables.rs:214:16:214:24 | print_i64 | variables.rs:214:26:214:27 | a6 | | | variables.rs:214:16:214:28 | print_i64(...) | variables.rs:212:5:215:5 | match tv { ... } | | @@ -478,14 +478,14 @@ edges | variables.rs:219:18:219:33 | ...::Left(...) | variables.rs:219:9:219:14 | either | | | variables.rs:219:31:219:32 | 32 | variables.rs:219:18:219:33 | ...::Left(...) | | | variables.rs:220:5:225:5 | match either { ... } | variables.rs:218:21:226:1 | { ... } | | -| variables.rs:220:11:220:16 | either | variables.rs:221:9:221:24 | TupleStructPat | | -| variables.rs:221:9:221:24 | TupleStructPat | variables.rs:221:22:221:23 | a7 | match | -| variables.rs:221:9:221:24 | TupleStructPat | variables.rs:221:28:221:44 | TupleStructPat | no-match | +| variables.rs:220:11:220:16 | either | variables.rs:221:9:221:24 | ...::Left(...) | | +| variables.rs:221:9:221:24 | ...::Left(...) | variables.rs:221:22:221:23 | a7 | match | +| variables.rs:221:9:221:24 | ...::Left(...) | variables.rs:221:28:221:44 | ...::Right(...) | no-match | | variables.rs:221:9:221:44 | [match(false)] ... \| ... | variables.rs:224:9:224:9 | _ | no-match | | variables.rs:221:9:221:44 | [match(true)] ... \| ... | variables.rs:222:16:222:17 | a7 | match | | variables.rs:221:22:221:23 | a7 | variables.rs:221:9:221:44 | [match(true)] ... \| ... | match | -| variables.rs:221:28:221:44 | TupleStructPat | variables.rs:221:9:221:44 | [match(false)] ... \| ... | no-match | -| variables.rs:221:28:221:44 | TupleStructPat | variables.rs:221:42:221:43 | a7 | match | +| variables.rs:221:28:221:44 | ...::Right(...) | variables.rs:221:9:221:44 | [match(false)] ... \| ... | no-match | +| variables.rs:221:28:221:44 | ...::Right(...) | variables.rs:221:42:221:43 | a7 | match | | variables.rs:221:42:221:43 | a7 | variables.rs:221:9:221:44 | [match(true)] ... \| ... | match | | variables.rs:222:16:222:17 | a7 | variables.rs:222:21:222:21 | 0 | | | variables.rs:222:16:222:21 | ... > ... | variables.rs:223:16:223:24 | print_i64 | true | @@ -505,15 +505,15 @@ edges | variables.rs:229:18:229:33 | ...::Left(...) | variables.rs:229:9:229:14 | either | | | variables.rs:229:31:229:32 | 32 | variables.rs:229:18:229:33 | ...::Left(...) | | | variables.rs:231:5:242:5 | match either { ... } | variables.rs:228:21:243:1 | { ... } | | -| variables.rs:231:11:231:16 | either | variables.rs:233:14:233:30 | TupleStructPat | | +| variables.rs:231:11:231:16 | either | variables.rs:233:14:233:30 | ...::Left(...) | | | variables.rs:232:9:233:52 | [match(true)] e | variables.rs:235:13:235:27 | ExprStmt | match | -| variables.rs:233:14:233:30 | TupleStructPat | variables.rs:233:27:233:29 | a11 | match | -| variables.rs:233:14:233:30 | TupleStructPat | variables.rs:233:34:233:51 | TupleStructPat | no-match | +| variables.rs:233:14:233:30 | ...::Left(...) | variables.rs:233:27:233:29 | a11 | match | +| variables.rs:233:14:233:30 | ...::Left(...) | variables.rs:233:34:233:51 | ...::Right(...) | no-match | | variables.rs:233:14:233:51 | [match(false)] ... \| ... | variables.rs:241:9:241:9 | _ | no-match | | variables.rs:233:14:233:51 | [match(true)] ... \| ... | variables.rs:232:9:233:52 | [match(true)] e | match | | variables.rs:233:27:233:29 | a11 | variables.rs:233:14:233:51 | [match(true)] ... \| ... | match | -| variables.rs:233:34:233:51 | TupleStructPat | variables.rs:233:14:233:51 | [match(false)] ... \| ... | no-match | -| variables.rs:233:34:233:51 | TupleStructPat | variables.rs:233:48:233:50 | a11 | match | +| variables.rs:233:34:233:51 | ...::Right(...) | variables.rs:233:14:233:51 | [match(false)] ... \| ... | no-match | +| variables.rs:233:34:233:51 | ...::Right(...) | variables.rs:233:48:233:50 | a11 | match | | variables.rs:233:48:233:50 | a11 | variables.rs:233:14:233:51 | [match(true)] ... \| ... | match | | variables.rs:234:12:240:9 | { ... } | variables.rs:231:5:242:5 | match either { ... } | | | variables.rs:235:13:235:21 | print_i64 | variables.rs:235:23:235:25 | a11 | | @@ -522,10 +522,10 @@ edges | variables.rs:235:23:235:25 | a11 | variables.rs:235:13:235:26 | print_i64(...) | | | variables.rs:236:13:239:13 | if ... {...} | variables.rs:234:12:240:9 | { ... } | | | variables.rs:236:16:237:15 | let ... = e | variables.rs:237:15:237:15 | e | | -| variables.rs:236:20:236:36 | TupleStructPat | variables.rs:236:13:239:13 | if ... {...} | no-match | -| variables.rs:236:20:236:36 | TupleStructPat | variables.rs:236:33:236:35 | a12 | match | +| variables.rs:236:20:236:36 | ...::Left(...) | variables.rs:236:13:239:13 | if ... {...} | no-match | +| variables.rs:236:20:236:36 | ...::Left(...) | variables.rs:236:33:236:35 | a12 | match | | variables.rs:236:33:236:35 | a12 | variables.rs:238:17:238:32 | ExprStmt | match | -| variables.rs:237:15:237:15 | e | variables.rs:236:20:236:36 | TupleStructPat | | +| variables.rs:237:15:237:15 | e | variables.rs:236:20:236:36 | ...::Left(...) | | | variables.rs:237:17:239:13 | { ... } | variables.rs:236:13:239:13 | if ... {...} | | | variables.rs:238:17:238:25 | print_i64 | variables.rs:238:28:238:30 | a12 | | | variables.rs:238:17:238:31 | print_i64(...) | variables.rs:237:17:239:13 | { ... } | | @@ -543,20 +543,20 @@ edges | variables.rs:253:14:253:35 | ...::Second(...) | variables.rs:253:9:253:10 | fv | | | variables.rs:253:33:253:34 | 62 | variables.rs:253:14:253:35 | ...::Second(...) | | | variables.rs:254:5:257:5 | match fv { ... } | variables.rs:252:21:258:1 | { ... } | | -| variables.rs:254:11:254:12 | fv | variables.rs:255:9:255:30 | TupleStructPat | | -| variables.rs:255:9:255:30 | TupleStructPat | variables.rs:255:27:255:29 | a13 | match | -| variables.rs:255:9:255:30 | TupleStructPat | variables.rs:255:35:255:57 | TupleStructPat | no-match | +| variables.rs:254:11:254:12 | fv | variables.rs:255:9:255:30 | ...::First(...) | | +| variables.rs:255:9:255:30 | ...::First(...) | variables.rs:255:27:255:29 | a13 | match | +| variables.rs:255:9:255:30 | ...::First(...) | variables.rs:255:35:255:57 | ...::Second(...) | no-match | | variables.rs:255:9:255:109 | [match(true)] ... \| ... \| ... | variables.rs:256:16:256:24 | print_i64 | match | | variables.rs:255:27:255:29 | a13 | variables.rs:255:9:255:109 | [match(true)] ... \| ... \| ... | match | -| variables.rs:255:35:255:57 | TupleStructPat | variables.rs:255:54:255:56 | a13 | match | -| variables.rs:255:35:255:57 | TupleStructPat | variables.rs:255:61:255:82 | TupleStructPat | no-match | -| variables.rs:255:35:255:82 | [match(false)] ... \| ... | variables.rs:255:87:255:109 | TupleStructPat | no-match | +| variables.rs:255:35:255:57 | ...::Second(...) | variables.rs:255:54:255:56 | a13 | match | +| variables.rs:255:35:255:57 | ...::Second(...) | variables.rs:255:61:255:82 | ...::Third(...) | no-match | +| variables.rs:255:35:255:82 | [match(false)] ... \| ... | variables.rs:255:87:255:109 | ...::Fourth(...) | no-match | | variables.rs:255:35:255:82 | [match(true)] ... \| ... | variables.rs:255:9:255:109 | [match(true)] ... \| ... \| ... | match | | variables.rs:255:54:255:56 | a13 | variables.rs:255:35:255:82 | [match(true)] ... \| ... | match | -| variables.rs:255:61:255:82 | TupleStructPat | variables.rs:255:35:255:82 | [match(false)] ... \| ... | no-match | -| variables.rs:255:61:255:82 | TupleStructPat | variables.rs:255:79:255:81 | a13 | match | +| variables.rs:255:61:255:82 | ...::Third(...) | variables.rs:255:35:255:82 | [match(false)] ... \| ... | no-match | +| variables.rs:255:61:255:82 | ...::Third(...) | variables.rs:255:79:255:81 | a13 | match | | variables.rs:255:79:255:81 | a13 | variables.rs:255:35:255:82 | [match(true)] ... \| ... | match | -| variables.rs:255:87:255:109 | TupleStructPat | variables.rs:255:106:255:108 | a13 | match | +| variables.rs:255:87:255:109 | ...::Fourth(...) | variables.rs:255:106:255:108 | a13 | match | | variables.rs:255:106:255:108 | a13 | variables.rs:255:9:255:109 | [match(true)] ... \| ... \| ... | match | | variables.rs:256:16:256:24 | print_i64 | variables.rs:256:26:256:28 | a13 | | | variables.rs:256:16:256:29 | print_i64(...) | variables.rs:254:5:257:5 | match fv { ... } | | @@ -582,14 +582,14 @@ edges | variables.rs:268:5:268:17 | print_str(...) | variables.rs:265:28:269:1 | { ... } | | | variables.rs:268:5:268:18 | ExprStmt | variables.rs:268:5:268:13 | print_str | | | variables.rs:268:15:268:16 | c1 | variables.rs:268:5:268:17 | print_str(...) | | -| variables.rs:271:1:275:1 | enter fn param_pattern2 | variables.rs:272:6:272:21 | TupleStructPat | | +| variables.rs:271:1:275:1 | enter fn param_pattern2 | variables.rs:272:6:272:21 | ...::Left(...) | | | variables.rs:271:1:275:1 | exit fn param_pattern2 (normal) | variables.rs:271:1:275:1 | exit fn param_pattern2 | | | variables.rs:272:5:272:50 | ...: Either | variables.rs:274:5:274:18 | ExprStmt | | -| variables.rs:272:6:272:21 | TupleStructPat | variables.rs:272:19:272:20 | a9 | match | -| variables.rs:272:6:272:21 | TupleStructPat | variables.rs:272:25:272:41 | TupleStructPat | no-match | +| variables.rs:272:6:272:21 | ...::Left(...) | variables.rs:272:19:272:20 | a9 | match | +| variables.rs:272:6:272:21 | ...::Left(...) | variables.rs:272:25:272:41 | ...::Right(...) | no-match | | variables.rs:272:6:272:41 | [match(true)] ... \| ... | variables.rs:272:5:272:50 | ...: Either | match | | variables.rs:272:19:272:20 | a9 | variables.rs:272:6:272:41 | [match(true)] ... \| ... | match | -| variables.rs:272:25:272:41 | TupleStructPat | variables.rs:272:39:272:40 | a9 | match | +| variables.rs:272:25:272:41 | ...::Right(...) | variables.rs:272:39:272:40 | a9 | match | | variables.rs:272:39:272:40 | a9 | variables.rs:272:6:272:41 | [match(true)] ... \| ... | match | | variables.rs:273:9:275:1 | { ... } | variables.rs:271:1:275:1 | exit fn param_pattern2 (normal) | | | variables.rs:274:5:274:13 | print_i64 | variables.rs:274:15:274:16 | a9 | | From 6a8188f8eb196f16faab1f3309e8537bb1847657 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 2 Dec 2024 08:30:16 +0100 Subject: [PATCH 4/9] Rust: fix QL compilation errors after merge from main --- rust/ql/lib/codeql/rust/frameworks/Sqlx.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/ql/lib/codeql/rust/frameworks/Sqlx.qll b/rust/ql/lib/codeql/rust/frameworks/Sqlx.qll index f00c7375448..5504993ab74 100644 --- a/rust/ql/lib/codeql/rust/frameworks/Sqlx.qll +++ b/rust/ql/lib/codeql/rust/frameworks/Sqlx.qll @@ -14,7 +14,7 @@ private class SqlxQuery extends SqlConstruction::Range { SqlxQuery() { this.asExpr().getExpr() = call and - call.getFunction().(PathExpr).getPath().getResolvedPath() = + call.getFunction().(PathExpr).getResolvedPath() = [ "crate::query::query", "crate::query_as::query_as", "crate::query_with::query_with", "crate::query_as_with::query_as_with", "crate::query_scalar::query_scalar", From 66e4acf53eea14097955c2c06fad07005eff6083 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 4 Dec 2024 10:56:14 +0100 Subject: [PATCH 5/9] Rust: accept test changes --- .../canonical_path/canonical_paths.expected | 2 +- .../generated/BoxPat/BoxPat_getPat.expected | 2 +- .../IdentPat/IdentPat_getPat.expected | 2 +- .../generated/LetExpr/LetExpr_getPat.expected | 2 +- .../generated/LetStmt/LetStmt_getPat.expected | 2 +- .../MatchArm/MatchArm_getPat.expected | 4 +- .../generated/OrPat/OrPat_getPat.expected | 2 +- .../generated/RefPat/RefPat_getPat.expected | 2 +- .../TupleStructPat/TupleStructPat.expected | 6 +- .../TupleStructPat_getField.expected | 14 +- .../TupleStructPat_getPath.expected | 6 +- .../controlflow-unstable/Cfg.expected | 6 +- .../library-tests/controlflow/Cfg.expected | 68 +++++----- .../dataflow/local/DataFlowStep.expected | 68 +++++----- .../dataflow/local/inline-flow.expected | 36 ++--- .../dataflow/models/models.expected | 6 +- .../test/library-tests/variables/Cfg.expected | 128 +++++++++--------- 17 files changed, 178 insertions(+), 178 deletions(-) diff --git a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected index 09583dcf9f6..7b6cb391556 100644 --- a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected +++ b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected @@ -62,5 +62,5 @@ resolvedPaths | regular.rs:54:9:54:25 | Variant3 {...} | repo::test | crate::regular::MyEnum::Variant3 | | regular.rs:58:11:58:11 | e | None | None | | regular.rs:59:9:59:24 | ...::Variant1 | repo::test | crate::regular::MyEnum::Variant1 | -| regular.rs:60:9:60:27 | ...::Variant2(...) | repo::test | crate::regular::MyEnum::Variant2 | +| regular.rs:60:9:60:27 | TupleStructPat | repo::test | crate::regular::MyEnum::Variant2 | | regular.rs:61:9:61:31 | ...::Variant3 {...} | repo::test | crate::regular::MyEnum::Variant3 | diff --git a/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected index a43975657a8..4e12432652d 100644 --- a/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected @@ -1,2 +1,2 @@ -| gen_box_pat.rs:6:9:6:27 | box ... | gen_box_pat.rs:6:13:6:27 | ...::Some(...) | +| gen_box_pat.rs:6:9:6:27 | box ... | gen_box_pat.rs:6:13:6:27 | TupleStructPat | | gen_box_pat.rs:7:9:7:24 | box ...::None | gen_box_pat.rs:7:13:7:24 | ...::None | diff --git a/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getPat.expected b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getPat.expected index 3c2fd2dc379..2e2f0d9228e 100644 --- a/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getPat.expected @@ -1 +1 @@ -| gen_ident_pat.rs:10:9:10:25 | y | gen_ident_pat.rs:10:11:10:25 | ...::Some(...) | +| gen_ident_pat.rs:10:9:10:25 | y | gen_ident_pat.rs:10:11:10:25 | TupleStructPat | diff --git a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getPat.expected b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getPat.expected index b935bd98013..7c31e314128 100644 --- a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getPat.expected @@ -1 +1 @@ -| gen_let_expr.rs:5:8:5:31 | let ... = maybe_some | gen_let_expr.rs:5:12:5:18 | Some(...) | +| gen_let_expr.rs:5:8:5:31 | let ... = maybe_some | gen_let_expr.rs:5:12:5:18 | TupleStructPat | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected index cd4c3f8cc64..758837c946d 100644 --- a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected @@ -3,4 +3,4 @@ | gen_let_stmt.rs:7:5:7:15 | let ... | gen_let_stmt.rs:7:9:7:9 | x | | gen_let_stmt.rs:8:5:8:10 | let ... | gen_let_stmt.rs:8:9:8:9 | x | | gen_let_stmt.rs:9:5:9:24 | let ... = ... | gen_let_stmt.rs:9:9:9:14 | TuplePat | -| gen_let_stmt.rs:10:5:12:6 | let ... = ... else {...} | gen_let_stmt.rs:10:9:10:15 | Some(...) | +| gen_let_stmt.rs:10:5:12:6 | let ... = ... else {...} | gen_let_stmt.rs:10:9:10:15 | TupleStructPat | diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected index d4adba7f838..9928555fc32 100644 --- a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected @@ -1,4 +1,4 @@ -| gen_match_arm.rs:6:9:6:29 | ... => y | gen_match_arm.rs:6:9:6:23 | ...::Some(...) | +| gen_match_arm.rs:6:9:6:29 | ... => y | gen_match_arm.rs:6:9:6:23 | TupleStructPat | | gen_match_arm.rs:7:9:7:26 | ...::None => 0 | gen_match_arm.rs:7:9:7:20 | ...::None | -| gen_match_arm.rs:10:9:10:35 | ... if ... => ... | gen_match_arm.rs:10:9:10:15 | Some(...) | +| gen_match_arm.rs:10:9:10:35 | ... if ... => ... | gen_match_arm.rs:10:9:10:15 | TupleStructPat | | gen_match_arm.rs:11:9:11:15 | _ => 0 | gen_match_arm.rs:11:9:11:9 | _ | diff --git a/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected b/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected index 9e50c27e035..22ebce5dde5 100644 --- a/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected @@ -1,2 +1,2 @@ -| gen_or_pat.rs:6:9:6:38 | ... \| ...::None | 0 | gen_or_pat.rs:6:9:6:23 | ...::Some(...) | +| gen_or_pat.rs:6:9:6:38 | ... \| ...::None | 0 | gen_or_pat.rs:6:9:6:23 | TupleStructPat | | gen_or_pat.rs:6:9:6:38 | ... \| ...::None | 1 | gen_or_pat.rs:6:27:6:38 | ...::None | diff --git a/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected b/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected index 029fd9fa172..d4f78daeb82 100644 --- a/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected +++ b/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected @@ -1,2 +1,2 @@ -| gen_ref_pat.rs:6:9:6:28 | &mut ... | gen_ref_pat.rs:6:14:6:28 | ...::Some(...) | +| gen_ref_pat.rs:6:9:6:28 | &mut ... | gen_ref_pat.rs:6:14:6:28 | TupleStructPat | | gen_ref_pat.rs:7:9:7:21 | &...::None | gen_ref_pat.rs:7:10:7:21 | ...::None | diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.expected b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.expected index 9e9de534b1e..9a180d2a3d7 100644 --- a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.expected +++ b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.expected @@ -1,3 +1,3 @@ -| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfFields: | 4 | -| gen_tuple_struct_pat.rs:7:9:7:20 | Tuple(...) | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfFields: | 2 | -| gen_tuple_struct_pat.rs:8:9:8:17 | Tuple(...) | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfFields: | 1 | +| gen_tuple_struct_pat.rs:6:9:6:27 | TupleStructPat | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfFields: | 4 | +| gen_tuple_struct_pat.rs:7:9:7:20 | TupleStructPat | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfFields: | 2 | +| gen_tuple_struct_pat.rs:8:9:8:17 | TupleStructPat | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfFields: | 1 | diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.expected b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.expected index 21e1a701963..5885cbcea3e 100644 --- a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.expected +++ b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.expected @@ -1,7 +1,7 @@ -| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | 0 | gen_tuple_struct_pat.rs:6:15:6:17 | "a" | -| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | 1 | gen_tuple_struct_pat.rs:6:20:6:20 | 1 | -| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | 2 | gen_tuple_struct_pat.rs:6:23:6:23 | 2 | -| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | 3 | gen_tuple_struct_pat.rs:6:26:6:26 | 3 | -| gen_tuple_struct_pat.rs:7:9:7:20 | Tuple(...) | 0 | gen_tuple_struct_pat.rs:7:15:7:16 | .. | -| gen_tuple_struct_pat.rs:7:9:7:20 | Tuple(...) | 1 | gen_tuple_struct_pat.rs:7:19:7:19 | 3 | -| gen_tuple_struct_pat.rs:8:9:8:17 | Tuple(...) | 0 | gen_tuple_struct_pat.rs:8:15:8:16 | .. | +| gen_tuple_struct_pat.rs:6:9:6:27 | TupleStructPat | 0 | gen_tuple_struct_pat.rs:6:15:6:17 | "a" | +| gen_tuple_struct_pat.rs:6:9:6:27 | TupleStructPat | 1 | gen_tuple_struct_pat.rs:6:20:6:20 | 1 | +| gen_tuple_struct_pat.rs:6:9:6:27 | TupleStructPat | 2 | gen_tuple_struct_pat.rs:6:23:6:23 | 2 | +| gen_tuple_struct_pat.rs:6:9:6:27 | TupleStructPat | 3 | gen_tuple_struct_pat.rs:6:26:6:26 | 3 | +| gen_tuple_struct_pat.rs:7:9:7:20 | TupleStructPat | 0 | gen_tuple_struct_pat.rs:7:15:7:16 | .. | +| gen_tuple_struct_pat.rs:7:9:7:20 | TupleStructPat | 1 | gen_tuple_struct_pat.rs:7:19:7:19 | 3 | +| gen_tuple_struct_pat.rs:8:9:8:17 | TupleStructPat | 0 | gen_tuple_struct_pat.rs:8:15:8:16 | .. | diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getPath.expected b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getPath.expected index 34f30ed8ae1..0c07d081720 100644 --- a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getPath.expected +++ b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getPath.expected @@ -1,3 +1,3 @@ -| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | gen_tuple_struct_pat.rs:6:9:6:13 | Tuple | -| gen_tuple_struct_pat.rs:7:9:7:20 | Tuple(...) | gen_tuple_struct_pat.rs:7:9:7:13 | Tuple | -| gen_tuple_struct_pat.rs:8:9:8:17 | Tuple(...) | gen_tuple_struct_pat.rs:8:9:8:13 | Tuple | +| gen_tuple_struct_pat.rs:6:9:6:27 | TupleStructPat | gen_tuple_struct_pat.rs:6:9:6:13 | Tuple | +| gen_tuple_struct_pat.rs:7:9:7:20 | TupleStructPat | gen_tuple_struct_pat.rs:7:9:7:13 | Tuple | +| gen_tuple_struct_pat.rs:8:9:8:17 | TupleStructPat | gen_tuple_struct_pat.rs:8:9:8:13 | Tuple | diff --git a/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected b/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected index 7a7d9884f19..4260e2384c8 100644 --- a/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected @@ -14,10 +14,10 @@ edges | test.rs:6:12:6:31 | [boolean(false)] ... && ... | test.rs:9:13:9:17 | false | false | | test.rs:6:12:6:31 | [boolean(true)] ... && ... | test.rs:7:13:7:13 | d | true | | test.rs:6:17:6:31 | let ... = b | test.rs:6:31:6:31 | b | | -| test.rs:6:21:6:27 | Some(...) | test.rs:6:12:6:31 | [boolean(false)] ... && ... | no-match | -| test.rs:6:21:6:27 | Some(...) | test.rs:6:26:6:26 | d | match | +| test.rs:6:21:6:27 | TupleStructPat | test.rs:6:12:6:31 | [boolean(false)] ... && ... | no-match | +| test.rs:6:21:6:27 | TupleStructPat | test.rs:6:26:6:26 | d | match | | test.rs:6:26:6:26 | d | test.rs:6:12:6:31 | [boolean(true)] ... && ... | match | -| test.rs:6:31:6:31 | b | test.rs:6:21:6:27 | Some(...) | | +| test.rs:6:31:6:31 | b | test.rs:6:21:6:27 | TupleStructPat | | | test.rs:6:33:8:9 | { ... } | test.rs:6:9:10:9 | if ... {...} else {...} | | | test.rs:7:13:7:13 | d | test.rs:6:33:8:9 | { ... } | | | test.rs:8:16:10:9 | { ... } | test.rs:6:9:10:9 | if ... {...} else {...} | | diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 3165b2354be..5137e2f8b89 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -191,11 +191,11 @@ edges | test.rs:98:27:98:28 | 10 | test.rs:98:24:98:28 | 1..10 | | | test.rs:99:9:103:9 | while ... { ... } | test.rs:97:25:104:5 | { ... } | | | test.rs:99:15:99:39 | let ... = ... | test.rs:99:29:99:32 | iter | | -| test.rs:99:19:99:25 | Some(...) | test.rs:99:9:103:9 | while ... { ... } | no-match | -| test.rs:99:19:99:25 | Some(...) | test.rs:99:24:99:24 | x | match | +| test.rs:99:19:99:25 | TupleStructPat | test.rs:99:9:103:9 | while ... { ... } | no-match | +| test.rs:99:19:99:25 | TupleStructPat | test.rs:99:24:99:24 | x | match | | test.rs:99:24:99:24 | x | test.rs:100:17:100:17 | x | match | | test.rs:99:29:99:32 | iter | test.rs:99:29:99:39 | ... .next(...) | | -| test.rs:99:29:99:39 | ... .next(...) | test.rs:99:19:99:25 | Some(...) | | +| test.rs:99:29:99:39 | ... .next(...) | test.rs:99:19:99:25 | TupleStructPat | | | test.rs:99:41:103:9 | { ... } | test.rs:99:15:99:39 | let ... = ... | | | test.rs:100:13:102:13 | if ... {...} | test.rs:99:41:103:9 | { ... } | | | test.rs:100:17:100:17 | x | test.rs:100:22:100:22 | 5 | | @@ -274,10 +274,10 @@ edges | test.rs:137:48:143:5 | { ... } | test.rs:137:5:143:5 | exit fn test_if_let_else (normal) | | | test.rs:138:9:142:9 | if ... {...} else {...} | test.rs:137:48:143:5 | { ... } | | | test.rs:138:12:138:26 | let ... = a | test.rs:138:26:138:26 | a | | -| test.rs:138:16:138:22 | Some(...) | test.rs:138:21:138:21 | n | match | -| test.rs:138:16:138:22 | Some(...) | test.rs:141:13:141:13 | 0 | no-match | +| test.rs:138:16:138:22 | TupleStructPat | test.rs:138:21:138:21 | n | match | +| test.rs:138:16:138:22 | TupleStructPat | test.rs:141:13:141:13 | 0 | no-match | | test.rs:138:21:138:21 | n | test.rs:139:13:139:13 | n | match | -| test.rs:138:26:138:26 | a | test.rs:138:16:138:22 | Some(...) | | +| test.rs:138:26:138:26 | a | test.rs:138:16:138:22 | TupleStructPat | | | test.rs:138:28:140:9 | { ... } | test.rs:138:9:142:9 | if ... {...} else {...} | | | test.rs:139:13:139:13 | n | test.rs:138:28:140:9 | { ... } | | | test.rs:140:16:142:9 | { ... } | test.rs:138:9:142:9 | if ... {...} else {...} | | @@ -290,10 +290,10 @@ edges | test.rs:146:9:148:9 | ExprStmt | test.rs:146:12:146:26 | let ... = a | | | test.rs:146:9:148:9 | if ... {...} | test.rs:149:9:149:9 | 0 | | | test.rs:146:12:146:26 | let ... = a | test.rs:146:26:146:26 | a | | -| test.rs:146:16:146:22 | Some(...) | test.rs:146:9:148:9 | if ... {...} | no-match | -| test.rs:146:16:146:22 | Some(...) | test.rs:146:21:146:21 | n | match | +| test.rs:146:16:146:22 | TupleStructPat | test.rs:146:9:148:9 | if ... {...} | no-match | +| test.rs:146:16:146:22 | TupleStructPat | test.rs:146:21:146:21 | n | match | | test.rs:146:21:146:21 | n | test.rs:147:13:147:21 | ExprStmt | match | -| test.rs:146:26:146:26 | a | test.rs:146:16:146:22 | Some(...) | | +| test.rs:146:26:146:26 | a | test.rs:146:16:146:22 | TupleStructPat | | | test.rs:147:13:147:20 | return n | test.rs:145:5:150:5 | exit fn test_if_let (normal) | return | | test.rs:147:13:147:21 | ExprStmt | test.rs:147:20:147:20 | n | | | test.rs:147:20:147:20 | n | test.rs:147:13:147:20 | return n | | @@ -663,19 +663,19 @@ edges | test.rs:307:19:307:42 | ...: Option::<...> | test.rs:308:15:308:25 | maybe_digit | | | test.rs:307:52:313:5 | { ... } | test.rs:307:5:313:5 | exit fn test_match (normal) | | | test.rs:308:9:312:9 | match maybe_digit { ... } | test.rs:307:52:313:5 | { ... } | | -| test.rs:308:15:308:25 | maybe_digit | test.rs:309:13:309:27 | ...::Some(...) | | -| test.rs:309:13:309:27 | ...::Some(...) | test.rs:309:26:309:26 | x | match | -| test.rs:309:13:309:27 | ...::Some(...) | test.rs:310:13:310:27 | ...::Some(...) | no-match | +| test.rs:308:15:308:25 | maybe_digit | test.rs:309:13:309:27 | TupleStructPat | | +| test.rs:309:13:309:27 | TupleStructPat | test.rs:309:26:309:26 | x | match | +| test.rs:309:13:309:27 | TupleStructPat | test.rs:310:13:310:27 | TupleStructPat | no-match | | test.rs:309:26:309:26 | x | test.rs:309:32:309:32 | x | match | | test.rs:309:32:309:32 | x | test.rs:309:36:309:37 | 10 | | | test.rs:309:32:309:37 | ... < ... | test.rs:309:42:309:42 | x | true | -| test.rs:309:32:309:37 | ... < ... | test.rs:310:13:310:27 | ...::Some(...) | false | +| test.rs:309:32:309:37 | ... < ... | test.rs:310:13:310:27 | TupleStructPat | false | | test.rs:309:36:309:37 | 10 | test.rs:309:32:309:37 | ... < ... | | | test.rs:309:42:309:42 | x | test.rs:309:46:309:46 | 5 | | | test.rs:309:42:309:46 | ... + ... | test.rs:308:9:312:9 | match maybe_digit { ... } | | | test.rs:309:46:309:46 | 5 | test.rs:309:42:309:46 | ... + ... | | -| test.rs:310:13:310:27 | ...::Some(...) | test.rs:310:26:310:26 | x | match | -| test.rs:310:13:310:27 | ...::Some(...) | test.rs:311:13:311:24 | ...::None | no-match | +| test.rs:310:13:310:27 | TupleStructPat | test.rs:310:26:310:26 | x | match | +| test.rs:310:13:310:27 | TupleStructPat | test.rs:311:13:311:24 | ...::None | no-match | | test.rs:310:26:310:26 | x | test.rs:310:32:310:32 | x | match | | test.rs:310:32:310:32 | x | test.rs:308:9:312:9 | match maybe_digit { ... } | | | test.rs:311:13:311:24 | ...::None | test.rs:311:29:311:29 | 5 | match | @@ -686,7 +686,7 @@ edges | test.rs:315:44:315:67 | ...: Option::<...> | test.rs:316:19:316:29 | maybe_digit | | | test.rs:315:77:324:5 | { ... } | test.rs:315:5:324:5 | exit fn test_match_with_return_in_scrutinee (normal) | | | test.rs:316:9:323:9 | match ... { ... } | test.rs:315:77:324:5 | { ... } | | -| test.rs:316:16:320:9 | if ... {...} else {...} | test.rs:321:13:321:27 | ...::Some(...) | | +| test.rs:316:16:320:9 | if ... {...} else {...} | test.rs:321:13:321:27 | TupleStructPat | | | test.rs:316:19:316:29 | maybe_digit | test.rs:316:34:316:37 | Some | | | test.rs:316:19:316:40 | ... == ... | test.rs:317:13:317:21 | ExprStmt | true | | test.rs:316:19:316:40 | ... == ... | test.rs:319:13:319:23 | maybe_digit | false | @@ -698,8 +698,8 @@ edges | test.rs:317:20:317:20 | 3 | test.rs:317:13:317:20 | return 3 | | | test.rs:318:16:320:9 | { ... } | test.rs:316:16:320:9 | if ... {...} else {...} | | | test.rs:319:13:319:23 | maybe_digit | test.rs:318:16:320:9 | { ... } | | -| test.rs:321:13:321:27 | ...::Some(...) | test.rs:321:26:321:26 | x | match | -| test.rs:321:13:321:27 | ...::Some(...) | test.rs:322:13:322:24 | ...::None | no-match | +| test.rs:321:13:321:27 | TupleStructPat | test.rs:321:26:321:26 | x | match | +| test.rs:321:13:321:27 | TupleStructPat | test.rs:322:13:322:24 | ...::None | no-match | | test.rs:321:26:321:26 | x | test.rs:321:32:321:32 | x | match | | test.rs:321:32:321:32 | x | test.rs:321:36:321:36 | 5 | | | test.rs:321:32:321:36 | ... + ... | test.rs:316:9:323:9 | match ... { ... } | | @@ -716,9 +716,9 @@ edges | test.rs:327:9:330:18 | ... && ... | test.rs:326:60:331:5 | { ... } | | | test.rs:327:10:330:9 | [boolean(false)] match r { ... } | test.rs:327:9:330:18 | ... && ... | false | | test.rs:327:10:330:9 | [boolean(true)] match r { ... } | test.rs:330:15:330:18 | cond | true | -| test.rs:327:16:327:16 | r | test.rs:328:13:328:19 | Some(...) | | -| test.rs:328:13:328:19 | Some(...) | test.rs:328:18:328:18 | a | match | -| test.rs:328:13:328:19 | Some(...) | test.rs:329:13:329:13 | _ | no-match | +| test.rs:327:16:327:16 | r | test.rs:328:13:328:19 | TupleStructPat | | +| test.rs:328:13:328:19 | TupleStructPat | test.rs:328:18:328:18 | a | match | +| test.rs:328:13:328:19 | TupleStructPat | test.rs:329:13:329:13 | _ | no-match | | test.rs:328:18:328:18 | a | test.rs:328:24:328:24 | a | match | | test.rs:328:24:328:24 | a | test.rs:327:10:330:9 | [boolean(false)] match r { ... } | false | | test.rs:328:24:328:24 | a | test.rs:327:10:330:9 | [boolean(true)] match r { ... } | true | @@ -731,12 +731,12 @@ edges | test.rs:333:35:333:58 | ...: Result::<...> | test.rs:334:15:334:15 | r | | | test.rs:333:66:338:5 | { ... } | test.rs:333:5:338:5 | exit fn test_match_with_no_arms (normal) | | | test.rs:334:9:337:9 | match r { ... } | test.rs:333:66:338:5 | { ... } | | -| test.rs:334:15:334:15 | r | test.rs:335:13:335:21 | Ok(...) | | -| test.rs:335:13:335:21 | Ok(...) | test.rs:335:16:335:20 | value | match | -| test.rs:335:13:335:21 | Ok(...) | test.rs:336:13:336:22 | Err(...) | no-match | +| test.rs:334:15:334:15 | r | test.rs:335:13:335:21 | TupleStructPat | | +| test.rs:335:13:335:21 | TupleStructPat | test.rs:335:16:335:20 | value | match | +| test.rs:335:13:335:21 | TupleStructPat | test.rs:336:13:336:22 | TupleStructPat | no-match | | test.rs:335:16:335:20 | value | test.rs:335:26:335:30 | value | match | | test.rs:335:26:335:30 | value | test.rs:334:9:337:9 | match r { ... } | | -| test.rs:336:13:336:22 | Err(...) | test.rs:336:17:336:21 | never | match | +| test.rs:336:13:336:22 | TupleStructPat | test.rs:336:17:336:21 | never | match | | test.rs:336:17:336:21 | never | test.rs:336:33:336:37 | never | match | | test.rs:336:27:336:40 | match never { ... } | test.rs:334:9:337:9 | match r { ... } | | | test.rs:336:33:336:37 | never | test.rs:336:27:336:40 | match never { ... } | | @@ -746,10 +746,10 @@ edges | test.rs:343:23:343:36 | ...: Option::<...> | test.rs:344:9:344:57 | let ... = a else {...} | | | test.rs:343:46:346:5 | { ... } | test.rs:343:5:346:5 | exit fn test_let_match (normal) | | | test.rs:344:9:344:57 | let ... = a else {...} | test.rs:344:23:344:23 | a | | -| test.rs:344:13:344:19 | Some(...) | test.rs:344:18:344:18 | n | match | -| test.rs:344:13:344:19 | Some(...) | test.rs:344:39:344:53 | MacroStmts | no-match | +| test.rs:344:13:344:19 | TupleStructPat | test.rs:344:18:344:18 | n | match | +| test.rs:344:13:344:19 | TupleStructPat | test.rs:344:39:344:53 | MacroStmts | no-match | | test.rs:344:18:344:18 | n | test.rs:345:9:345:9 | n | match | -| test.rs:344:23:344:23 | a | test.rs:344:13:344:19 | Some(...) | | +| test.rs:344:23:344:23 | a | test.rs:344:13:344:19 | TupleStructPat | | | test.rs:344:32:344:54 | ...::panic_fmt | test.rs:344:39:344:53 | "Expected some" | | | test.rs:344:32:344:54 | MacroExpr | test.rs:344:30:344:56 | { ... } | | | test.rs:344:39:344:53 | "Expected some" | test.rs:344:39:344:53 | FormatArgsExpr | | @@ -770,9 +770,9 @@ edges | test.rs:349:9:352:10 | let ... = ... | test.rs:349:25:349:25 | m | | | test.rs:349:13:349:15 | ret | test.rs:353:9:353:12 | true | match | | test.rs:349:19:352:9 | match m { ... } | test.rs:349:13:349:15 | ret | | -| test.rs:349:25:349:25 | m | test.rs:350:13:350:21 | Some(...) | | -| test.rs:350:13:350:21 | Some(...) | test.rs:350:18:350:20 | ret | match | -| test.rs:350:13:350:21 | Some(...) | test.rs:351:13:351:16 | None | no-match | +| test.rs:349:25:349:25 | m | test.rs:350:13:350:21 | TupleStructPat | | +| test.rs:350:13:350:21 | TupleStructPat | test.rs:350:18:350:20 | ret | match | +| test.rs:350:13:350:21 | TupleStructPat | test.rs:351:13:351:16 | None | no-match | | test.rs:350:18:350:20 | ret | test.rs:350:26:350:28 | ret | match | | test.rs:350:26:350:28 | ret | test.rs:349:19:352:9 | match m { ... } | | | test.rs:351:13:351:16 | None | test.rs:351:28:351:32 | false | match | @@ -1030,10 +1030,10 @@ edges | test.rs:484:13:484:13 | x | test.rs:485:9:487:10 | let ... = x else {...} | match | | test.rs:484:30:484:33 | None | test.rs:484:13:484:13 | x | | | test.rs:485:9:487:10 | let ... = x else {...} | test.rs:485:23:485:23 | x | | -| test.rs:485:13:485:19 | Some(...) | test.rs:485:18:485:18 | y | match | -| test.rs:485:13:485:19 | Some(...) | test.rs:486:13:486:27 | ExprStmt | no-match | +| test.rs:485:13:485:19 | TupleStructPat | test.rs:485:18:485:18 | y | match | +| test.rs:485:13:485:19 | TupleStructPat | test.rs:486:13:486:27 | ExprStmt | no-match | | test.rs:485:18:485:18 | y | test.rs:488:9:488:9 | 0 | match | -| test.rs:485:23:485:23 | x | test.rs:485:13:485:19 | Some(...) | | +| test.rs:485:23:485:23 | x | test.rs:485:13:485:19 | TupleStructPat | | | test.rs:486:13:486:26 | break ''block 1 | test.rs:483:18:489:5 | 'block: { ... } | break | | test.rs:486:13:486:27 | ExprStmt | test.rs:486:26:486:26 | 1 | | | test.rs:486:26:486:26 | 1 | test.rs:486:13:486:26 | break ''block 1 | | diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index 5e244550ff3..bc36656e49d 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -34,7 +34,7 @@ localStep | main.rs:32:9:32:9 | [SSA] b | main.rs:36:10:36:10 | b | | main.rs:32:9:32:9 | b | main.rs:32:9:32:9 | [SSA] b | | main.rs:32:13:35:5 | match m { ... } | main.rs:32:9:32:9 | b | -| main.rs:32:19:32:19 | m | main.rs:33:9:33:15 | Some(...) | +| main.rs:32:19:32:19 | m | main.rs:33:9:33:15 | TupleStructPat | | main.rs:32:19:32:19 | m | main.rs:34:9:34:12 | None | | main.rs:33:20:33:20 | a | main.rs:32:13:35:5 | match m { ... } | | main.rs:34:17:34:17 | 0 | main.rs:32:13:35:5 | match m { ... } | @@ -169,14 +169,14 @@ localStep | main.rs:199:9:199:10 | [SSA] s2 | main.rs:204:11:204:12 | s2 | | main.rs:199:9:199:10 | s2 | main.rs:199:9:199:10 | [SSA] s2 | | main.rs:199:14:199:28 | ...::Some(...) | main.rs:199:9:199:10 | s2 | -| main.rs:200:11:200:12 | s1 | main.rs:201:9:201:23 | ...::Some(...) | +| main.rs:200:11:200:12 | s1 | main.rs:201:9:201:23 | TupleStructPat | | main.rs:200:11:200:12 | s1 | main.rs:202:9:202:20 | ...::None | | main.rs:201:22:201:22 | [SSA] n | main.rs:201:33:201:33 | n | | main.rs:201:22:201:22 | n | main.rs:201:22:201:22 | [SSA] n | | main.rs:201:28:201:34 | sink(...) | main.rs:200:5:203:5 | match s1 { ... } | | main.rs:202:25:202:31 | sink(...) | main.rs:200:5:203:5 | match s1 { ... } | | main.rs:204:5:207:5 | match s2 { ... } | main.rs:197:37:208:1 | { ... } | -| main.rs:204:11:204:12 | s2 | main.rs:205:9:205:23 | ...::Some(...) | +| main.rs:204:11:204:12 | s2 | main.rs:205:9:205:23 | TupleStructPat | | main.rs:204:11:204:12 | s2 | main.rs:206:9:206:20 | ...::None | | main.rs:205:22:205:22 | [SSA] n | main.rs:205:33:205:33 | n | | main.rs:205:22:205:22 | n | main.rs:205:22:205:22 | [SSA] n | @@ -188,14 +188,14 @@ localStep | main.rs:212:9:212:10 | [SSA] s2 | main.rs:217:11:217:12 | s2 | | main.rs:212:9:212:10 | s2 | main.rs:212:9:212:10 | [SSA] s2 | | main.rs:212:14:212:20 | Some(...) | main.rs:212:9:212:10 | s2 | -| main.rs:213:11:213:12 | s1 | main.rs:214:9:214:15 | Some(...) | +| main.rs:213:11:213:12 | s1 | main.rs:214:9:214:15 | TupleStructPat | | main.rs:213:11:213:12 | s1 | main.rs:215:9:215:12 | None | | main.rs:214:14:214:14 | [SSA] n | main.rs:214:25:214:25 | n | | main.rs:214:14:214:14 | n | main.rs:214:14:214:14 | [SSA] n | | main.rs:214:20:214:26 | sink(...) | main.rs:213:5:216:5 | match s1 { ... } | | main.rs:215:17:215:23 | sink(...) | main.rs:213:5:216:5 | match s1 { ... } | | main.rs:217:5:220:5 | match s2 { ... } | main.rs:210:39:221:1 | { ... } | -| main.rs:217:11:217:12 | s2 | main.rs:218:9:218:15 | Some(...) | +| main.rs:217:11:217:12 | s2 | main.rs:218:9:218:15 | TupleStructPat | | main.rs:217:11:217:12 | s2 | main.rs:219:9:219:12 | None | | main.rs:218:14:218:14 | [SSA] n | main.rs:218:25:218:25 | n | | main.rs:218:14:218:14 | n | main.rs:218:14:218:14 | [SSA] n | @@ -210,8 +210,8 @@ localStep | main.rs:235:9:235:10 | [SSA] s2 | main.rs:243:11:243:12 | s2 | | main.rs:235:9:235:10 | s2 | main.rs:235:9:235:10 | [SSA] s2 | | main.rs:235:14:235:30 | ...::B(...) | main.rs:235:9:235:10 | s2 | -| main.rs:236:11:236:12 | s1 | main.rs:237:9:237:25 | ...::A(...) | -| main.rs:236:11:236:12 | s1 | main.rs:238:9:238:25 | ...::B(...) | +| main.rs:236:11:236:12 | s1 | main.rs:237:9:237:25 | TupleStructPat | +| main.rs:236:11:236:12 | s1 | main.rs:238:9:238:25 | TupleStructPat | | main.rs:236:11:236:12 | s1 | main.rs:240:11:240:12 | s1 | | main.rs:237:24:237:24 | [SSA] n | main.rs:237:35:237:35 | n | | main.rs:237:24:237:24 | n | main.rs:237:24:237:24 | [SSA] n | @@ -220,8 +220,8 @@ localStep | main.rs:238:24:238:24 | n | main.rs:238:24:238:24 | [SSA] n | | main.rs:238:30:238:36 | sink(...) | main.rs:236:5:239:5 | match s1 { ... } | | main.rs:240:11:240:12 | s1 | main.rs:241:9:241:45 | ... \| ... | -| main.rs:241:9:241:45 | ... \| ... | main.rs:241:9:241:25 | ...::A(...) | -| main.rs:241:9:241:45 | ... \| ... | main.rs:241:29:241:45 | ...::B(...) | +| main.rs:241:9:241:45 | ... \| ... | main.rs:241:9:241:25 | TupleStructPat | +| main.rs:241:9:241:45 | ... \| ... | main.rs:241:29:241:45 | TupleStructPat | | main.rs:241:9:241:45 | [SSA] [match(true)] phi | main.rs:241:55:241:55 | n | | main.rs:241:24:241:24 | [SSA] [input] [match(true)] phi | main.rs:241:9:241:45 | [SSA] [match(true)] phi | | main.rs:241:24:241:24 | [SSA] n | main.rs:241:24:241:24 | [SSA] [input] [match(true)] phi | @@ -231,8 +231,8 @@ localStep | main.rs:241:44:241:44 | n | main.rs:241:44:241:44 | [SSA] n | | main.rs:241:50:241:56 | sink(...) | main.rs:240:5:242:5 | match s1 { ... } | | main.rs:243:5:246:5 | match s2 { ... } | main.rs:233:48:247:1 | { ... } | -| main.rs:243:11:243:12 | s2 | main.rs:244:9:244:25 | ...::A(...) | -| main.rs:243:11:243:12 | s2 | main.rs:245:9:245:25 | ...::B(...) | +| main.rs:243:11:243:12 | s2 | main.rs:244:9:244:25 | TupleStructPat | +| main.rs:243:11:243:12 | s2 | main.rs:245:9:245:25 | TupleStructPat | | main.rs:244:24:244:24 | [SSA] n | main.rs:244:35:244:35 | n | | main.rs:244:24:244:24 | n | main.rs:244:24:244:24 | [SSA] n | | main.rs:244:30:244:36 | sink(...) | main.rs:243:5:246:5 | match s2 { ... } | @@ -245,8 +245,8 @@ localStep | main.rs:253:9:253:10 | [SSA] s2 | main.rs:261:11:261:12 | s2 | | main.rs:253:9:253:10 | s2 | main.rs:253:9:253:10 | [SSA] s2 | | main.rs:253:14:253:17 | B(...) | main.rs:253:9:253:10 | s2 | -| main.rs:254:11:254:12 | s1 | main.rs:255:9:255:12 | A(...) | -| main.rs:254:11:254:12 | s1 | main.rs:256:9:256:12 | B(...) | +| main.rs:254:11:254:12 | s1 | main.rs:255:9:255:12 | TupleStructPat | +| main.rs:254:11:254:12 | s1 | main.rs:256:9:256:12 | TupleStructPat | | main.rs:254:11:254:12 | s1 | main.rs:258:11:258:12 | s1 | | main.rs:255:11:255:11 | [SSA] n | main.rs:255:22:255:22 | n | | main.rs:255:11:255:11 | n | main.rs:255:11:255:11 | [SSA] n | @@ -255,8 +255,8 @@ localStep | main.rs:256:11:256:11 | n | main.rs:256:11:256:11 | [SSA] n | | main.rs:256:17:256:23 | sink(...) | main.rs:254:5:257:5 | match s1 { ... } | | main.rs:258:11:258:12 | s1 | main.rs:259:9:259:19 | ... \| ... | -| main.rs:259:9:259:19 | ... \| ... | main.rs:259:9:259:12 | A(...) | -| main.rs:259:9:259:19 | ... \| ... | main.rs:259:16:259:19 | B(...) | +| main.rs:259:9:259:19 | ... \| ... | main.rs:259:9:259:12 | TupleStructPat | +| main.rs:259:9:259:19 | ... \| ... | main.rs:259:16:259:19 | TupleStructPat | | main.rs:259:9:259:19 | [SSA] [match(true)] phi | main.rs:259:29:259:29 | n | | main.rs:259:11:259:11 | [SSA] [input] [match(true)] phi | main.rs:259:9:259:19 | [SSA] [match(true)] phi | | main.rs:259:11:259:11 | [SSA] n | main.rs:259:11:259:11 | [SSA] [input] [match(true)] phi | @@ -266,8 +266,8 @@ localStep | main.rs:259:18:259:18 | n | main.rs:259:18:259:18 | [SSA] n | | main.rs:259:24:259:30 | sink(...) | main.rs:258:5:260:5 | match s1 { ... } | | main.rs:261:5:264:5 | match s2 { ... } | main.rs:251:50:265:1 | { ... } | -| main.rs:261:11:261:12 | s2 | main.rs:262:9:262:12 | A(...) | -| main.rs:261:11:261:12 | s2 | main.rs:263:9:263:12 | B(...) | +| main.rs:261:11:261:12 | s2 | main.rs:262:9:262:12 | TupleStructPat | +| main.rs:261:11:261:12 | s2 | main.rs:263:9:263:12 | TupleStructPat | | main.rs:262:11:262:11 | [SSA] n | main.rs:262:22:262:22 | n | | main.rs:262:11:262:11 | n | main.rs:262:11:262:11 | [SSA] n | | main.rs:262:17:262:23 | sink(...) | main.rs:261:5:264:5 | match s2 { ... } | @@ -388,7 +388,7 @@ storeStep | main.rs:314:27:314:27 | 0 | Some | main.rs:314:22:314:28 | Some(...) | readStep | file://:0:0:0:0 | [summary param] self in lang:core::_::::unwrap | Some | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::option::Option::Some(0)] in lang:core::_::::unwrap | -| main.rs:33:9:33:15 | Some(...) | Some | main.rs:33:14:33:14 | _ | +| main.rs:33:9:33:15 | TupleStructPat | Some | main.rs:33:14:33:14 | _ | | main.rs:95:10:95:10 | a | tuple.0 | main.rs:95:10:95:12 | a.0 | | main.rs:96:10:96:10 | a | tuple.1 | main.rs:96:10:96:12 | a.1 | | main.rs:109:10:109:10 | a | tuple.0 | main.rs:109:10:109:12 | a.0 | @@ -405,22 +405,22 @@ readStep | main.rs:151:9:151:28 | Point {...} | Point.x | main.rs:151:20:151:20 | a | | main.rs:151:9:151:28 | Point {...} | Point.y | main.rs:151:26:151:26 | b | | main.rs:183:9:186:9 | Point3D {...} | Point3D.plane | main.rs:184:20:184:33 | Point {...} | -| main.rs:201:9:201:23 | ...::Some(...) | Some | main.rs:201:22:201:22 | n | -| main.rs:205:9:205:23 | ...::Some(...) | Some | main.rs:205:22:205:22 | n | -| main.rs:214:9:214:15 | Some(...) | Some | main.rs:214:14:214:14 | n | -| main.rs:218:9:218:15 | Some(...) | Some | main.rs:218:14:218:14 | n | -| main.rs:237:9:237:25 | ...::A(...) | A | main.rs:237:24:237:24 | n | -| main.rs:238:9:238:25 | ...::B(...) | B | main.rs:238:24:238:24 | n | -| main.rs:241:9:241:25 | ...::A(...) | A | main.rs:241:24:241:24 | n | -| main.rs:241:29:241:45 | ...::B(...) | B | main.rs:241:44:241:44 | n | -| main.rs:244:9:244:25 | ...::A(...) | A | main.rs:244:24:244:24 | n | -| main.rs:245:9:245:25 | ...::B(...) | B | main.rs:245:24:245:24 | n | -| main.rs:255:9:255:12 | A(...) | A | main.rs:255:11:255:11 | n | -| main.rs:256:9:256:12 | B(...) | B | main.rs:256:11:256:11 | n | -| main.rs:259:9:259:12 | A(...) | A | main.rs:259:11:259:11 | n | -| main.rs:259:16:259:19 | B(...) | B | main.rs:259:18:259:18 | n | -| main.rs:262:9:262:12 | A(...) | A | main.rs:262:11:262:11 | n | -| main.rs:263:9:263:12 | B(...) | B | main.rs:263:11:263:11 | n | +| main.rs:201:9:201:23 | TupleStructPat | Some | main.rs:201:22:201:22 | n | +| main.rs:205:9:205:23 | TupleStructPat | Some | main.rs:205:22:205:22 | n | +| main.rs:214:9:214:15 | TupleStructPat | Some | main.rs:214:14:214:14 | n | +| main.rs:218:9:218:15 | TupleStructPat | Some | main.rs:218:14:218:14 | n | +| main.rs:237:9:237:25 | TupleStructPat | A | main.rs:237:24:237:24 | n | +| main.rs:238:9:238:25 | TupleStructPat | B | main.rs:238:24:238:24 | n | +| main.rs:241:9:241:25 | TupleStructPat | A | main.rs:241:24:241:24 | n | +| main.rs:241:29:241:45 | TupleStructPat | B | main.rs:241:44:241:44 | n | +| main.rs:244:9:244:25 | TupleStructPat | A | main.rs:244:24:244:24 | n | +| main.rs:245:9:245:25 | TupleStructPat | B | main.rs:245:24:245:24 | n | +| main.rs:255:9:255:12 | TupleStructPat | A | main.rs:255:11:255:11 | n | +| main.rs:256:9:256:12 | TupleStructPat | B | main.rs:256:11:256:11 | n | +| main.rs:259:9:259:12 | TupleStructPat | A | main.rs:259:11:259:11 | n | +| main.rs:259:16:259:19 | TupleStructPat | B | main.rs:259:18:259:18 | n | +| main.rs:262:9:262:12 | TupleStructPat | A | main.rs:262:11:262:11 | n | +| main.rs:263:9:263:12 | TupleStructPat | B | main.rs:263:11:263:11 | n | | main.rs:278:9:278:38 | ...::C {...} | C | main.rs:278:36:278:36 | n | | main.rs:279:9:279:38 | ...::D {...} | D | main.rs:279:36:279:36 | n | | main.rs:282:9:282:38 | ...::C {...} | C | main.rs:282:36:282:36 | n | diff --git a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected index eed358827da..ed51d66a1ad 100644 --- a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected @@ -25,30 +25,30 @@ edges | main.rs:148:12:148:21 | source(...) | main.rs:147:13:150:5 | Point {...} [Point.x] | provenance | | | main.rs:151:9:151:28 | Point {...} [Point.x] | main.rs:151:20:151:20 | a | provenance | | | main.rs:151:20:151:20 | a | main.rs:152:10:152:10 | a | provenance | | -| main.rs:198:14:198:37 | ...::Some(...) [Some] | main.rs:201:9:201:23 | ...::Some(...) [Some] | provenance | | +| main.rs:198:14:198:37 | ...::Some(...) [Some] | main.rs:201:9:201:23 | TupleStructPat [Some] | provenance | | | main.rs:198:27:198:36 | source(...) | main.rs:198:14:198:37 | ...::Some(...) [Some] | provenance | | -| main.rs:201:9:201:23 | ...::Some(...) [Some] | main.rs:201:22:201:22 | n | provenance | | +| main.rs:201:9:201:23 | TupleStructPat [Some] | main.rs:201:22:201:22 | n | provenance | | | main.rs:201:22:201:22 | n | main.rs:201:33:201:33 | n | provenance | | -| main.rs:211:14:211:29 | Some(...) [Some] | main.rs:214:9:214:15 | Some(...) [Some] | provenance | | +| main.rs:211:14:211:29 | Some(...) [Some] | main.rs:214:9:214:15 | TupleStructPat [Some] | provenance | | | main.rs:211:19:211:28 | source(...) | main.rs:211:14:211:29 | Some(...) [Some] | provenance | | -| main.rs:214:9:214:15 | Some(...) [Some] | main.rs:214:14:214:14 | n | provenance | | +| main.rs:214:9:214:15 | TupleStructPat [Some] | main.rs:214:14:214:14 | n | provenance | | | main.rs:214:14:214:14 | n | main.rs:214:25:214:25 | n | provenance | | | main.rs:224:14:224:29 | Some(...) [Some] | main.rs:225:10:225:11 | s1 [Some] | provenance | | | main.rs:224:19:224:28 | source(...) | main.rs:224:14:224:29 | Some(...) [Some] | provenance | | | main.rs:225:10:225:11 | s1 [Some] | main.rs:225:10:225:20 | ... .unwrap(...) | provenance | | -| main.rs:234:14:234:39 | ...::A(...) [A] | main.rs:237:9:237:25 | ...::A(...) [A] | provenance | | -| main.rs:234:14:234:39 | ...::A(...) [A] | main.rs:241:9:241:25 | ...::A(...) [A] | provenance | | +| main.rs:234:14:234:39 | ...::A(...) [A] | main.rs:237:9:237:25 | TupleStructPat [A] | provenance | | +| main.rs:234:14:234:39 | ...::A(...) [A] | main.rs:241:9:241:25 | TupleStructPat [A] | provenance | | | main.rs:234:29:234:38 | source(...) | main.rs:234:14:234:39 | ...::A(...) [A] | provenance | | -| main.rs:237:9:237:25 | ...::A(...) [A] | main.rs:237:24:237:24 | n | provenance | | +| main.rs:237:9:237:25 | TupleStructPat [A] | main.rs:237:24:237:24 | n | provenance | | | main.rs:237:24:237:24 | n | main.rs:237:35:237:35 | n | provenance | | -| main.rs:241:9:241:25 | ...::A(...) [A] | main.rs:241:24:241:24 | n | provenance | | +| main.rs:241:9:241:25 | TupleStructPat [A] | main.rs:241:24:241:24 | n | provenance | | | main.rs:241:24:241:24 | n | main.rs:241:55:241:55 | n | provenance | | -| main.rs:252:14:252:26 | A(...) [A] | main.rs:255:9:255:12 | A(...) [A] | provenance | | -| main.rs:252:14:252:26 | A(...) [A] | main.rs:259:9:259:12 | A(...) [A] | provenance | | +| main.rs:252:14:252:26 | A(...) [A] | main.rs:255:9:255:12 | TupleStructPat [A] | provenance | | +| main.rs:252:14:252:26 | A(...) [A] | main.rs:259:9:259:12 | TupleStructPat [A] | provenance | | | main.rs:252:16:252:25 | source(...) | main.rs:252:14:252:26 | A(...) [A] | provenance | | -| main.rs:255:9:255:12 | A(...) [A] | main.rs:255:11:255:11 | n | provenance | | +| main.rs:255:9:255:12 | TupleStructPat [A] | main.rs:255:11:255:11 | n | provenance | | | main.rs:255:11:255:11 | n | main.rs:255:22:255:22 | n | provenance | | -| main.rs:259:9:259:12 | A(...) [A] | main.rs:259:11:259:11 | n | provenance | | +| main.rs:259:9:259:12 | TupleStructPat [A] | main.rs:259:11:259:11 | n | provenance | | | main.rs:259:11:259:11 | n | main.rs:259:29:259:29 | n | provenance | | | main.rs:273:14:275:5 | ...::C {...} [C] | main.rs:278:9:278:38 | ...::C {...} [C] | provenance | | | main.rs:273:14:275:5 | ...::C {...} [C] | main.rs:282:9:282:38 | ...::C {...} [C] | provenance | | @@ -103,12 +103,12 @@ nodes | main.rs:152:10:152:10 | a | semmle.label | a | | main.rs:198:14:198:37 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | | main.rs:198:27:198:36 | source(...) | semmle.label | source(...) | -| main.rs:201:9:201:23 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | +| main.rs:201:9:201:23 | TupleStructPat [Some] | semmle.label | TupleStructPat [Some] | | main.rs:201:22:201:22 | n | semmle.label | n | | main.rs:201:33:201:33 | n | semmle.label | n | | main.rs:211:14:211:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | | main.rs:211:19:211:28 | source(...) | semmle.label | source(...) | -| main.rs:214:9:214:15 | Some(...) [Some] | semmle.label | Some(...) [Some] | +| main.rs:214:9:214:15 | TupleStructPat [Some] | semmle.label | TupleStructPat [Some] | | main.rs:214:14:214:14 | n | semmle.label | n | | main.rs:214:25:214:25 | n | semmle.label | n | | main.rs:224:14:224:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | @@ -117,18 +117,18 @@ nodes | main.rs:225:10:225:20 | ... .unwrap(...) | semmle.label | ... .unwrap(...) | | main.rs:234:14:234:39 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | | main.rs:234:29:234:38 | source(...) | semmle.label | source(...) | -| main.rs:237:9:237:25 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | +| main.rs:237:9:237:25 | TupleStructPat [A] | semmle.label | TupleStructPat [A] | | main.rs:237:24:237:24 | n | semmle.label | n | | main.rs:237:35:237:35 | n | semmle.label | n | -| main.rs:241:9:241:25 | ...::A(...) [A] | semmle.label | ...::A(...) [A] | +| main.rs:241:9:241:25 | TupleStructPat [A] | semmle.label | TupleStructPat [A] | | main.rs:241:24:241:24 | n | semmle.label | n | | main.rs:241:55:241:55 | n | semmle.label | n | | main.rs:252:14:252:26 | A(...) [A] | semmle.label | A(...) [A] | | main.rs:252:16:252:25 | source(...) | semmle.label | source(...) | -| main.rs:255:9:255:12 | A(...) [A] | semmle.label | A(...) [A] | +| main.rs:255:9:255:12 | TupleStructPat [A] | semmle.label | TupleStructPat [A] | | main.rs:255:11:255:11 | n | semmle.label | n | | main.rs:255:22:255:22 | n | semmle.label | n | -| main.rs:259:9:259:12 | A(...) [A] | semmle.label | A(...) [A] | +| main.rs:259:9:259:12 | TupleStructPat [A] | semmle.label | TupleStructPat [A] | | main.rs:259:11:259:11 | n | semmle.label | n | | main.rs:259:29:259:29 | n | semmle.label | n | | main.rs:273:14:275:5 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | diff --git a/rust/ql/test/library-tests/dataflow/models/models.expected b/rust/ql/test/library-tests/dataflow/models/models.expected index eeb9301b434..f525638282b 100644 --- a/rust/ql/test/library-tests/dataflow/models/models.expected +++ b/rust/ql/test/library-tests/dataflow/models/models.expected @@ -7,9 +7,9 @@ edges | main.rs:31:27:31:27 | s | main.rs:31:14:31:28 | ...::A(...) [A] | provenance | | | main.rs:32:22:32:23 | e1 [A] | main.rs:32:10:32:24 | get_var_pos(...) | provenance | | | main.rs:43:13:43:21 | source(...) | main.rs:44:26:44:26 | s | provenance | | -| main.rs:44:14:44:27 | set_var_pos(...) [B] | main.rs:47:9:47:23 | ...::B(...) [B] | provenance | | +| main.rs:44:14:44:27 | set_var_pos(...) [B] | main.rs:47:9:47:23 | TupleStructPat [B] | provenance | | | main.rs:44:26:44:26 | s | main.rs:44:14:44:27 | set_var_pos(...) [B] | provenance | | -| main.rs:47:9:47:23 | ...::B(...) [B] | main.rs:47:22:47:22 | i | provenance | | +| main.rs:47:9:47:23 | TupleStructPat [B] | main.rs:47:22:47:22 | i | provenance | | | main.rs:47:22:47:22 | i | main.rs:47:33:47:33 | i | provenance | | | main.rs:62:13:62:21 | source(...) | main.rs:63:40:63:40 | s | provenance | | | main.rs:63:14:63:42 | ...::C {...} [C] | main.rs:64:24:64:25 | e1 [C] | provenance | | @@ -32,7 +32,7 @@ nodes | main.rs:43:13:43:21 | source(...) | semmle.label | source(...) | | main.rs:44:14:44:27 | set_var_pos(...) [B] | semmle.label | set_var_pos(...) [B] | | main.rs:44:26:44:26 | s | semmle.label | s | -| main.rs:47:9:47:23 | ...::B(...) [B] | semmle.label | ...::B(...) [B] | +| main.rs:47:9:47:23 | TupleStructPat [B] | semmle.label | TupleStructPat [B] | | main.rs:47:22:47:22 | i | semmle.label | i | | main.rs:47:33:47:33 | i | semmle.label | i | | main.rs:62:13:62:21 | source(...) | semmle.label | source(...) | diff --git a/rust/ql/test/library-tests/variables/Cfg.expected b/rust/ql/test/library-tests/variables/Cfg.expected index b55c0e9d04c..6b979eac0da 100644 --- a/rust/ql/test/library-tests/variables/Cfg.expected +++ b/rust/ql/test/library-tests/variables/Cfg.expected @@ -197,10 +197,10 @@ edges | variables.rs:85:32:85:39 | "Hello!" | variables.rs:85:19:85:40 | ...::from(...) | | | variables.rs:87:5:90:5 | if ... {...} | variables.rs:84:19:91:1 | { ... } | | | variables.rs:87:8:88:12 | let ... = s1 | variables.rs:88:11:88:12 | s1 | | -| variables.rs:87:12:87:23 | Some(...) | variables.rs:87:5:90:5 | if ... {...} | no-match | -| variables.rs:87:12:87:23 | Some(...) | variables.rs:87:17:87:22 | s2 | match | +| variables.rs:87:12:87:23 | TupleStructPat | variables.rs:87:5:90:5 | if ... {...} | no-match | +| variables.rs:87:12:87:23 | TupleStructPat | variables.rs:87:17:87:22 | s2 | match | | variables.rs:87:17:87:22 | s2 | variables.rs:89:9:89:22 | ExprStmt | match | -| variables.rs:88:11:88:12 | s1 | variables.rs:87:12:87:23 | Some(...) | | +| variables.rs:88:11:88:12 | s1 | variables.rs:87:12:87:23 | TupleStructPat | | | variables.rs:88:14:90:5 | { ... } | variables.rs:87:5:90:5 | if ... {...} | | | variables.rs:89:9:89:17 | print_str | variables.rs:89:19:89:20 | s2 | | | variables.rs:89:9:89:21 | print_str(...) | variables.rs:88:14:90:5 | { ... } | | @@ -210,11 +210,11 @@ edges | variables.rs:93:1:99:1 | exit fn let_pattern4 (normal) | variables.rs:93:1:99:1 | exit fn let_pattern4 | | | variables.rs:93:19:99:1 | { ... } | variables.rs:93:1:99:1 | exit fn let_pattern4 (normal) | | | variables.rs:94:5:97:10 | let ... = ... else {...} | variables.rs:94:34:94:37 | Some | | -| variables.rs:94:9:94:16 | Some(...) | variables.rs:94:14:94:15 | x5 | match | -| variables.rs:94:9:94:16 | Some(...) | variables.rs:96:13:96:19 | MacroStmts | no-match | +| variables.rs:94:9:94:16 | TupleStructPat | variables.rs:94:14:94:15 | x5 | match | +| variables.rs:94:9:94:16 | TupleStructPat | variables.rs:96:13:96:19 | MacroStmts | no-match | | variables.rs:94:14:94:15 | x5 | variables.rs:98:5:98:18 | ExprStmt | match | | variables.rs:94:34:94:37 | Some | variables.rs:94:39:94:42 | "x5" | | -| variables.rs:94:34:94:43 | Some(...) | variables.rs:94:9:94:16 | Some(...) | | +| variables.rs:94:34:94:43 | Some(...) | variables.rs:94:9:94:16 | TupleStructPat | | | variables.rs:94:39:94:42 | "x5" | variables.rs:94:34:94:43 | Some(...) | | | variables.rs:96:13:96:19 | "not yet implemented" | variables.rs:96:13:96:19 | ...::panic(...) | | | variables.rs:96:13:96:19 | ...::panic | variables.rs:96:13:96:19 | "not yet implemented" | | @@ -237,10 +237,10 @@ edges | variables.rs:102:32:102:39 | "Hello!" | variables.rs:102:19:102:40 | ...::from(...) | | | variables.rs:104:5:107:5 | while ... { ... } | variables.rs:101:19:108:1 | { ... } | | | variables.rs:104:11:105:12 | let ... = s1 | variables.rs:105:11:105:12 | s1 | | -| variables.rs:104:15:104:26 | Some(...) | variables.rs:104:5:107:5 | while ... { ... } | no-match | -| variables.rs:104:15:104:26 | Some(...) | variables.rs:104:20:104:25 | s2 | match | +| variables.rs:104:15:104:26 | TupleStructPat | variables.rs:104:5:107:5 | while ... { ... } | no-match | +| variables.rs:104:15:104:26 | TupleStructPat | variables.rs:104:20:104:25 | s2 | match | | variables.rs:104:20:104:25 | s2 | variables.rs:106:9:106:22 | ExprStmt | match | -| variables.rs:105:11:105:12 | s1 | variables.rs:104:15:104:26 | Some(...) | | +| variables.rs:105:11:105:12 | s1 | variables.rs:104:15:104:26 | TupleStructPat | | | variables.rs:105:14:107:5 | { ... } | variables.rs:104:11:105:12 | let ... = s1 | | | variables.rs:106:9:106:17 | print_str | variables.rs:106:19:106:20 | s2 | | | variables.rs:106:9:106:21 | print_str(...) | variables.rs:105:14:107:5 | { ... } | | @@ -259,17 +259,17 @@ edges | variables.rs:112:14:112:15 | 10 | variables.rs:112:9:112:10 | y1 | | | variables.rs:114:5:122:5 | ExprStmt | variables.rs:114:11:114:12 | x6 | | | variables.rs:114:5:122:5 | match x6 { ... } | variables.rs:124:5:124:18 | ExprStmt | | -| variables.rs:114:11:114:12 | x6 | variables.rs:115:9:115:16 | Some(...) | | -| variables.rs:115:9:115:16 | Some(...) | variables.rs:115:14:115:15 | 50 | match | -| variables.rs:115:9:115:16 | Some(...) | variables.rs:116:9:116:16 | Some(...) | no-match | +| variables.rs:114:11:114:12 | x6 | variables.rs:115:9:115:16 | TupleStructPat | | +| variables.rs:115:9:115:16 | TupleStructPat | variables.rs:115:14:115:15 | 50 | match | +| variables.rs:115:9:115:16 | TupleStructPat | variables.rs:116:9:116:16 | TupleStructPat | no-match | | variables.rs:115:14:115:15 | 50 | variables.rs:115:14:115:15 | 50 | | | variables.rs:115:14:115:15 | 50 | variables.rs:115:21:115:29 | print_str | match | -| variables.rs:115:14:115:15 | 50 | variables.rs:116:9:116:16 | Some(...) | no-match | +| variables.rs:115:14:115:15 | 50 | variables.rs:116:9:116:16 | TupleStructPat | no-match | | variables.rs:115:21:115:29 | print_str | variables.rs:115:31:115:38 | "Got 50" | | | variables.rs:115:21:115:39 | print_str(...) | variables.rs:114:5:122:5 | match x6 { ... } | | | variables.rs:115:31:115:38 | "Got 50" | variables.rs:115:21:115:39 | print_str(...) | | -| variables.rs:116:9:116:16 | Some(...) | variables.rs:116:14:116:15 | y1 | match | -| variables.rs:116:9:116:16 | Some(...) | variables.rs:121:9:121:12 | None | no-match | +| variables.rs:116:9:116:16 | TupleStructPat | variables.rs:116:14:116:15 | y1 | match | +| variables.rs:116:9:116:16 | TupleStructPat | variables.rs:121:9:121:12 | None | no-match | | variables.rs:116:14:116:15 | y1 | variables.rs:119:13:119:21 | print_i64 | match | | variables.rs:118:9:120:9 | { ... } | variables.rs:114:5:122:5 | match x6 { ... } | | | variables.rs:119:13:119:21 | print_i64 | variables.rs:119:23:119:24 | y1 | | @@ -404,12 +404,12 @@ edges | variables.rs:189:18:189:33 | ...::Left(...) | variables.rs:189:9:189:14 | either | | | variables.rs:189:31:189:32 | 32 | variables.rs:189:18:189:33 | ...::Left(...) | | | variables.rs:190:5:193:5 | match either { ... } | variables.rs:188:21:194:1 | { ... } | | -| variables.rs:190:11:190:16 | either | variables.rs:191:9:191:24 | ...::Left(...) | | -| variables.rs:191:9:191:24 | ...::Left(...) | variables.rs:191:22:191:23 | a3 | match | -| variables.rs:191:9:191:24 | ...::Left(...) | variables.rs:191:28:191:44 | ...::Right(...) | no-match | +| variables.rs:190:11:190:16 | either | variables.rs:191:9:191:24 | TupleStructPat | | +| variables.rs:191:9:191:24 | TupleStructPat | variables.rs:191:22:191:23 | a3 | match | +| variables.rs:191:9:191:24 | TupleStructPat | variables.rs:191:28:191:44 | TupleStructPat | no-match | | variables.rs:191:9:191:44 | [match(true)] ... \| ... | variables.rs:192:16:192:24 | print_i64 | match | | variables.rs:191:22:191:23 | a3 | variables.rs:191:9:191:44 | [match(true)] ... \| ... | match | -| variables.rs:191:28:191:44 | ...::Right(...) | variables.rs:191:42:191:43 | a3 | match | +| variables.rs:191:28:191:44 | TupleStructPat | variables.rs:191:42:191:43 | a3 | match | | variables.rs:191:42:191:43 | a3 | variables.rs:191:9:191:44 | [match(true)] ... \| ... | match | | variables.rs:192:16:192:24 | print_i64 | variables.rs:192:26:192:27 | a3 | | | variables.rs:192:16:192:28 | print_i64(...) | variables.rs:190:5:193:5 | match either { ... } | | @@ -424,47 +424,47 @@ edges | variables.rs:203:34:203:35 | 62 | variables.rs:203:14:203:36 | ...::Second(...) | | | variables.rs:204:5:207:5 | ExprStmt | variables.rs:204:11:204:12 | tv | | | variables.rs:204:5:207:5 | match tv { ... } | variables.rs:208:5:211:5 | ExprStmt | | -| variables.rs:204:11:204:12 | tv | variables.rs:205:9:205:30 | ...::First(...) | | -| variables.rs:205:9:205:30 | ...::First(...) | variables.rs:205:28:205:29 | a4 | match | -| variables.rs:205:9:205:30 | ...::First(...) | variables.rs:205:34:205:56 | ...::Second(...) | no-match | +| variables.rs:204:11:204:12 | tv | variables.rs:205:9:205:30 | TupleStructPat | | +| variables.rs:205:9:205:30 | TupleStructPat | variables.rs:205:28:205:29 | a4 | match | +| variables.rs:205:9:205:30 | TupleStructPat | variables.rs:205:34:205:56 | TupleStructPat | no-match | | variables.rs:205:9:205:81 | [match(true)] ... \| ... \| ... | variables.rs:206:16:206:24 | print_i64 | match | | variables.rs:205:28:205:29 | a4 | variables.rs:205:9:205:81 | [match(true)] ... \| ... \| ... | match | -| variables.rs:205:34:205:56 | ...::Second(...) | variables.rs:205:54:205:55 | a4 | match | -| variables.rs:205:34:205:56 | ...::Second(...) | variables.rs:205:60:205:81 | ...::Third(...) | no-match | +| variables.rs:205:34:205:56 | TupleStructPat | variables.rs:205:54:205:55 | a4 | match | +| variables.rs:205:34:205:56 | TupleStructPat | variables.rs:205:60:205:81 | TupleStructPat | no-match | | variables.rs:205:54:205:55 | a4 | variables.rs:205:9:205:81 | [match(true)] ... \| ... \| ... | match | -| variables.rs:205:60:205:81 | ...::Third(...) | variables.rs:205:79:205:80 | a4 | match | +| variables.rs:205:60:205:81 | TupleStructPat | variables.rs:205:79:205:80 | a4 | match | | variables.rs:205:79:205:80 | a4 | variables.rs:205:9:205:81 | [match(true)] ... \| ... \| ... | match | | variables.rs:206:16:206:24 | print_i64 | variables.rs:206:26:206:27 | a4 | | | variables.rs:206:16:206:28 | print_i64(...) | variables.rs:204:5:207:5 | match tv { ... } | | | variables.rs:206:26:206:27 | a4 | variables.rs:206:16:206:28 | print_i64(...) | | | variables.rs:208:5:211:5 | ExprStmt | variables.rs:208:11:208:12 | tv | | | variables.rs:208:5:211:5 | match tv { ... } | variables.rs:212:11:212:12 | tv | | -| variables.rs:208:11:208:12 | tv | variables.rs:209:10:209:31 | ...::First(...) | | +| variables.rs:208:11:208:12 | tv | variables.rs:209:10:209:31 | TupleStructPat | | | variables.rs:209:9:209:83 | [match(true)] ... \| ... | variables.rs:210:16:210:24 | print_i64 | match | -| variables.rs:209:10:209:31 | ...::First(...) | variables.rs:209:29:209:30 | a5 | match | -| variables.rs:209:10:209:31 | ...::First(...) | variables.rs:209:35:209:57 | ...::Second(...) | no-match | -| variables.rs:209:10:209:57 | [match(false)] ... \| ... | variables.rs:209:62:209:83 | ...::Third(...) | no-match | +| variables.rs:209:10:209:31 | TupleStructPat | variables.rs:209:29:209:30 | a5 | match | +| variables.rs:209:10:209:31 | TupleStructPat | variables.rs:209:35:209:57 | TupleStructPat | no-match | +| variables.rs:209:10:209:57 | [match(false)] ... \| ... | variables.rs:209:62:209:83 | TupleStructPat | no-match | | variables.rs:209:10:209:57 | [match(true)] ... \| ... | variables.rs:209:9:209:83 | [match(true)] ... \| ... | match | | variables.rs:209:29:209:30 | a5 | variables.rs:209:10:209:57 | [match(true)] ... \| ... | match | -| variables.rs:209:35:209:57 | ...::Second(...) | variables.rs:209:10:209:57 | [match(false)] ... \| ... | no-match | -| variables.rs:209:35:209:57 | ...::Second(...) | variables.rs:209:55:209:56 | a5 | match | +| variables.rs:209:35:209:57 | TupleStructPat | variables.rs:209:10:209:57 | [match(false)] ... \| ... | no-match | +| variables.rs:209:35:209:57 | TupleStructPat | variables.rs:209:55:209:56 | a5 | match | | variables.rs:209:55:209:56 | a5 | variables.rs:209:10:209:57 | [match(true)] ... \| ... | match | -| variables.rs:209:62:209:83 | ...::Third(...) | variables.rs:209:81:209:82 | a5 | match | +| variables.rs:209:62:209:83 | TupleStructPat | variables.rs:209:81:209:82 | a5 | match | | variables.rs:209:81:209:82 | a5 | variables.rs:209:9:209:83 | [match(true)] ... \| ... | match | | variables.rs:210:16:210:24 | print_i64 | variables.rs:210:26:210:27 | a5 | | | variables.rs:210:16:210:28 | print_i64(...) | variables.rs:208:5:211:5 | match tv { ... } | | | variables.rs:210:26:210:27 | a5 | variables.rs:210:16:210:28 | print_i64(...) | | | variables.rs:212:5:215:5 | match tv { ... } | variables.rs:202:21:216:1 | { ... } | | -| variables.rs:212:11:212:12 | tv | variables.rs:213:9:213:30 | ...::First(...) | | -| variables.rs:213:9:213:30 | ...::First(...) | variables.rs:213:28:213:29 | a6 | match | -| variables.rs:213:9:213:30 | ...::First(...) | variables.rs:213:35:213:57 | ...::Second(...) | no-match | +| variables.rs:212:11:212:12 | tv | variables.rs:213:9:213:30 | TupleStructPat | | +| variables.rs:213:9:213:30 | TupleStructPat | variables.rs:213:28:213:29 | a6 | match | +| variables.rs:213:9:213:30 | TupleStructPat | variables.rs:213:35:213:57 | TupleStructPat | no-match | | variables.rs:213:9:213:83 | [match(true)] ... \| ... | variables.rs:214:16:214:24 | print_i64 | match | | variables.rs:213:28:213:29 | a6 | variables.rs:213:9:213:83 | [match(true)] ... \| ... | match | -| variables.rs:213:35:213:57 | ...::Second(...) | variables.rs:213:55:213:56 | a6 | match | -| variables.rs:213:35:213:57 | ...::Second(...) | variables.rs:213:61:213:82 | ...::Third(...) | no-match | +| variables.rs:213:35:213:57 | TupleStructPat | variables.rs:213:55:213:56 | a6 | match | +| variables.rs:213:35:213:57 | TupleStructPat | variables.rs:213:61:213:82 | TupleStructPat | no-match | | variables.rs:213:35:213:82 | [match(true)] ... \| ... | variables.rs:213:9:213:83 | [match(true)] ... \| ... | match | | variables.rs:213:55:213:56 | a6 | variables.rs:213:35:213:82 | [match(true)] ... \| ... | match | -| variables.rs:213:61:213:82 | ...::Third(...) | variables.rs:213:80:213:81 | a6 | match | +| variables.rs:213:61:213:82 | TupleStructPat | variables.rs:213:80:213:81 | a6 | match | | variables.rs:213:80:213:81 | a6 | variables.rs:213:35:213:82 | [match(true)] ... \| ... | match | | variables.rs:214:16:214:24 | print_i64 | variables.rs:214:26:214:27 | a6 | | | variables.rs:214:16:214:28 | print_i64(...) | variables.rs:212:5:215:5 | match tv { ... } | | @@ -478,14 +478,14 @@ edges | variables.rs:219:18:219:33 | ...::Left(...) | variables.rs:219:9:219:14 | either | | | variables.rs:219:31:219:32 | 32 | variables.rs:219:18:219:33 | ...::Left(...) | | | variables.rs:220:5:225:5 | match either { ... } | variables.rs:218:21:226:1 | { ... } | | -| variables.rs:220:11:220:16 | either | variables.rs:221:9:221:24 | ...::Left(...) | | -| variables.rs:221:9:221:24 | ...::Left(...) | variables.rs:221:22:221:23 | a7 | match | -| variables.rs:221:9:221:24 | ...::Left(...) | variables.rs:221:28:221:44 | ...::Right(...) | no-match | +| variables.rs:220:11:220:16 | either | variables.rs:221:9:221:24 | TupleStructPat | | +| variables.rs:221:9:221:24 | TupleStructPat | variables.rs:221:22:221:23 | a7 | match | +| variables.rs:221:9:221:24 | TupleStructPat | variables.rs:221:28:221:44 | TupleStructPat | no-match | | variables.rs:221:9:221:44 | [match(false)] ... \| ... | variables.rs:224:9:224:9 | _ | no-match | | variables.rs:221:9:221:44 | [match(true)] ... \| ... | variables.rs:222:16:222:17 | a7 | match | | variables.rs:221:22:221:23 | a7 | variables.rs:221:9:221:44 | [match(true)] ... \| ... | match | -| variables.rs:221:28:221:44 | ...::Right(...) | variables.rs:221:9:221:44 | [match(false)] ... \| ... | no-match | -| variables.rs:221:28:221:44 | ...::Right(...) | variables.rs:221:42:221:43 | a7 | match | +| variables.rs:221:28:221:44 | TupleStructPat | variables.rs:221:9:221:44 | [match(false)] ... \| ... | no-match | +| variables.rs:221:28:221:44 | TupleStructPat | variables.rs:221:42:221:43 | a7 | match | | variables.rs:221:42:221:43 | a7 | variables.rs:221:9:221:44 | [match(true)] ... \| ... | match | | variables.rs:222:16:222:17 | a7 | variables.rs:222:21:222:21 | 0 | | | variables.rs:222:16:222:21 | ... > ... | variables.rs:223:16:223:24 | print_i64 | true | @@ -505,15 +505,15 @@ edges | variables.rs:229:18:229:33 | ...::Left(...) | variables.rs:229:9:229:14 | either | | | variables.rs:229:31:229:32 | 32 | variables.rs:229:18:229:33 | ...::Left(...) | | | variables.rs:231:5:242:5 | match either { ... } | variables.rs:228:21:243:1 | { ... } | | -| variables.rs:231:11:231:16 | either | variables.rs:233:14:233:30 | ...::Left(...) | | +| variables.rs:231:11:231:16 | either | variables.rs:233:14:233:30 | TupleStructPat | | | variables.rs:232:9:233:52 | [match(true)] e | variables.rs:235:13:235:27 | ExprStmt | match | -| variables.rs:233:14:233:30 | ...::Left(...) | variables.rs:233:27:233:29 | a11 | match | -| variables.rs:233:14:233:30 | ...::Left(...) | variables.rs:233:34:233:51 | ...::Right(...) | no-match | +| variables.rs:233:14:233:30 | TupleStructPat | variables.rs:233:27:233:29 | a11 | match | +| variables.rs:233:14:233:30 | TupleStructPat | variables.rs:233:34:233:51 | TupleStructPat | no-match | | variables.rs:233:14:233:51 | [match(false)] ... \| ... | variables.rs:241:9:241:9 | _ | no-match | | variables.rs:233:14:233:51 | [match(true)] ... \| ... | variables.rs:232:9:233:52 | [match(true)] e | match | | variables.rs:233:27:233:29 | a11 | variables.rs:233:14:233:51 | [match(true)] ... \| ... | match | -| variables.rs:233:34:233:51 | ...::Right(...) | variables.rs:233:14:233:51 | [match(false)] ... \| ... | no-match | -| variables.rs:233:34:233:51 | ...::Right(...) | variables.rs:233:48:233:50 | a11 | match | +| variables.rs:233:34:233:51 | TupleStructPat | variables.rs:233:14:233:51 | [match(false)] ... \| ... | no-match | +| variables.rs:233:34:233:51 | TupleStructPat | variables.rs:233:48:233:50 | a11 | match | | variables.rs:233:48:233:50 | a11 | variables.rs:233:14:233:51 | [match(true)] ... \| ... | match | | variables.rs:234:12:240:9 | { ... } | variables.rs:231:5:242:5 | match either { ... } | | | variables.rs:235:13:235:21 | print_i64 | variables.rs:235:23:235:25 | a11 | | @@ -522,10 +522,10 @@ edges | variables.rs:235:23:235:25 | a11 | variables.rs:235:13:235:26 | print_i64(...) | | | variables.rs:236:13:239:13 | if ... {...} | variables.rs:234:12:240:9 | { ... } | | | variables.rs:236:16:237:15 | let ... = e | variables.rs:237:15:237:15 | e | | -| variables.rs:236:20:236:36 | ...::Left(...) | variables.rs:236:13:239:13 | if ... {...} | no-match | -| variables.rs:236:20:236:36 | ...::Left(...) | variables.rs:236:33:236:35 | a12 | match | +| variables.rs:236:20:236:36 | TupleStructPat | variables.rs:236:13:239:13 | if ... {...} | no-match | +| variables.rs:236:20:236:36 | TupleStructPat | variables.rs:236:33:236:35 | a12 | match | | variables.rs:236:33:236:35 | a12 | variables.rs:238:17:238:32 | ExprStmt | match | -| variables.rs:237:15:237:15 | e | variables.rs:236:20:236:36 | ...::Left(...) | | +| variables.rs:237:15:237:15 | e | variables.rs:236:20:236:36 | TupleStructPat | | | variables.rs:237:17:239:13 | { ... } | variables.rs:236:13:239:13 | if ... {...} | | | variables.rs:238:17:238:25 | print_i64 | variables.rs:238:28:238:30 | a12 | | | variables.rs:238:17:238:31 | print_i64(...) | variables.rs:237:17:239:13 | { ... } | | @@ -543,20 +543,20 @@ edges | variables.rs:253:14:253:35 | ...::Second(...) | variables.rs:253:9:253:10 | fv | | | variables.rs:253:33:253:34 | 62 | variables.rs:253:14:253:35 | ...::Second(...) | | | variables.rs:254:5:257:5 | match fv { ... } | variables.rs:252:21:258:1 | { ... } | | -| variables.rs:254:11:254:12 | fv | variables.rs:255:9:255:30 | ...::First(...) | | -| variables.rs:255:9:255:30 | ...::First(...) | variables.rs:255:27:255:29 | a13 | match | -| variables.rs:255:9:255:30 | ...::First(...) | variables.rs:255:35:255:57 | ...::Second(...) | no-match | +| variables.rs:254:11:254:12 | fv | variables.rs:255:9:255:30 | TupleStructPat | | +| variables.rs:255:9:255:30 | TupleStructPat | variables.rs:255:27:255:29 | a13 | match | +| variables.rs:255:9:255:30 | TupleStructPat | variables.rs:255:35:255:57 | TupleStructPat | no-match | | variables.rs:255:9:255:109 | [match(true)] ... \| ... \| ... | variables.rs:256:16:256:24 | print_i64 | match | | variables.rs:255:27:255:29 | a13 | variables.rs:255:9:255:109 | [match(true)] ... \| ... \| ... | match | -| variables.rs:255:35:255:57 | ...::Second(...) | variables.rs:255:54:255:56 | a13 | match | -| variables.rs:255:35:255:57 | ...::Second(...) | variables.rs:255:61:255:82 | ...::Third(...) | no-match | -| variables.rs:255:35:255:82 | [match(false)] ... \| ... | variables.rs:255:87:255:109 | ...::Fourth(...) | no-match | +| variables.rs:255:35:255:57 | TupleStructPat | variables.rs:255:54:255:56 | a13 | match | +| variables.rs:255:35:255:57 | TupleStructPat | variables.rs:255:61:255:82 | TupleStructPat | no-match | +| variables.rs:255:35:255:82 | [match(false)] ... \| ... | variables.rs:255:87:255:109 | TupleStructPat | no-match | | variables.rs:255:35:255:82 | [match(true)] ... \| ... | variables.rs:255:9:255:109 | [match(true)] ... \| ... \| ... | match | | variables.rs:255:54:255:56 | a13 | variables.rs:255:35:255:82 | [match(true)] ... \| ... | match | -| variables.rs:255:61:255:82 | ...::Third(...) | variables.rs:255:35:255:82 | [match(false)] ... \| ... | no-match | -| variables.rs:255:61:255:82 | ...::Third(...) | variables.rs:255:79:255:81 | a13 | match | +| variables.rs:255:61:255:82 | TupleStructPat | variables.rs:255:35:255:82 | [match(false)] ... \| ... | no-match | +| variables.rs:255:61:255:82 | TupleStructPat | variables.rs:255:79:255:81 | a13 | match | | variables.rs:255:79:255:81 | a13 | variables.rs:255:35:255:82 | [match(true)] ... \| ... | match | -| variables.rs:255:87:255:109 | ...::Fourth(...) | variables.rs:255:106:255:108 | a13 | match | +| variables.rs:255:87:255:109 | TupleStructPat | variables.rs:255:106:255:108 | a13 | match | | variables.rs:255:106:255:108 | a13 | variables.rs:255:9:255:109 | [match(true)] ... \| ... \| ... | match | | variables.rs:256:16:256:24 | print_i64 | variables.rs:256:26:256:28 | a13 | | | variables.rs:256:16:256:29 | print_i64(...) | variables.rs:254:5:257:5 | match fv { ... } | | @@ -582,14 +582,14 @@ edges | variables.rs:268:5:268:17 | print_str(...) | variables.rs:265:28:269:1 | { ... } | | | variables.rs:268:5:268:18 | ExprStmt | variables.rs:268:5:268:13 | print_str | | | variables.rs:268:15:268:16 | c1 | variables.rs:268:5:268:17 | print_str(...) | | -| variables.rs:271:1:275:1 | enter fn param_pattern2 | variables.rs:272:6:272:21 | ...::Left(...) | | +| variables.rs:271:1:275:1 | enter fn param_pattern2 | variables.rs:272:6:272:21 | TupleStructPat | | | variables.rs:271:1:275:1 | exit fn param_pattern2 (normal) | variables.rs:271:1:275:1 | exit fn param_pattern2 | | | variables.rs:272:5:272:50 | ...: Either | variables.rs:274:5:274:18 | ExprStmt | | -| variables.rs:272:6:272:21 | ...::Left(...) | variables.rs:272:19:272:20 | a9 | match | -| variables.rs:272:6:272:21 | ...::Left(...) | variables.rs:272:25:272:41 | ...::Right(...) | no-match | +| variables.rs:272:6:272:21 | TupleStructPat | variables.rs:272:19:272:20 | a9 | match | +| variables.rs:272:6:272:21 | TupleStructPat | variables.rs:272:25:272:41 | TupleStructPat | no-match | | variables.rs:272:6:272:41 | [match(true)] ... \| ... | variables.rs:272:5:272:50 | ...: Either | match | | variables.rs:272:19:272:20 | a9 | variables.rs:272:6:272:41 | [match(true)] ... \| ... | match | -| variables.rs:272:25:272:41 | ...::Right(...) | variables.rs:272:39:272:40 | a9 | match | +| variables.rs:272:25:272:41 | TupleStructPat | variables.rs:272:39:272:40 | a9 | match | | variables.rs:272:39:272:40 | a9 | variables.rs:272:6:272:41 | [match(true)] ... \| ... | match | | variables.rs:273:9:275:1 | { ... } | variables.rs:271:1:275:1 | exit fn param_pattern2 (normal) | | | variables.rs:274:5:274:13 | print_i64 | variables.rs:274:15:274:16 | a9 | | From 96564b712862e40902820005cbca52761e08d165 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 4 Dec 2024 16:01:14 +0000 Subject: [PATCH 6/9] Release preparation for version 2.20.0 --- cpp/ql/lib/CHANGELOG.md | 10 +++++++++ .../2024-11-18-throwing-functions.md | 4 ---- .../ql/lib/change-notes/released/3.0.0.md | 11 +++++++--- cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 10 +++++++++ .../2024-11-22-too-few-arguments.md | 4 ---- .../1.3.0.md} | 11 +++++++--- cpp/ql/src/codeql-pack.release.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- .../ql/campaigns/Solorigate/lib/CHANGELOG.md | 4 ++++ .../lib/change-notes/released/1.7.30.md | 3 +++ .../Solorigate/lib/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- .../ql/campaigns/Solorigate/src/CHANGELOG.md | 4 ++++ .../src/change-notes/released/1.7.30.md | 3 +++ .../Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 17 +++++++++++++++ ...26-model-microsoft.jsinterop.ijsruntime.md | 5 ----- ...onmanager.uri-and-uri-parsing-utilities.md | 8 ------- .../2024-12-03-dynamic-field-flow.md | 4 ---- .../2024-12-03-public-protected-reference.md | 4 ---- csharp/ql/lib/change-notes/released/4.0.0.md | 16 ++++++++++++++ csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 6 ++++++ .../1.0.13.md} | 7 ++++--- csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 ++++ .../change-notes/released/1.0.13.md | 3 +++ .../codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 14 +++++++++++++ ...-promoted-fields-and-methods-name-clash.md | 4 ---- .../2024-11-20-heuristic-logging-sinks.md | 4 ---- go/ql/lib/change-notes/released/3.0.0.md | 13 ++++++++++++ go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 6 ++++++ .../1.1.4.md} | 7 ++++--- go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 10 +++++++++ .../2024-11-04-list-of-constants-sanitizer.md | 4 ---- .../ql/lib/change-notes/released/5.0.0.md | 11 +++++++--- java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 8 +++++++ java/ql/src/change-notes/2024-11-22-sha3.md | 4 ---- java/ql/src/change-notes/2024-11-24-sha2.md | 4 ---- .../1.1.10.md} | 9 +++++--- java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 21 ++++++++++++++++--- .../2024-11-18-ES2022-find-functions.md | 5 ----- ...-20-ES2023-string-protytpe-toWellFormed.md | 4 ---- .../2024-11-20-ES2024-group-functions.md | 4 ---- .../2.2.0.md} | 14 ++++++++++--- javascript/ql/lib/codeql-pack.release.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/CHANGELOG.md | 4 ++++ .../ql/src/change-notes/released/1.2.5.md | 3 +++ javascript/ql/src/codeql-pack.release.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/CHANGELOG.md | 4 ++++ .../change-notes/released/1.0.13.md | 3 +++ misc/suite-helpers/codeql-pack.release.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/CHANGELOG.md | 10 +++++++++ .../2024-11-26-fix-match-cfg-pruning.md | 5 ----- ...-12-03-remove-dataflow-config-class-api.md | 4 ---- python/ql/lib/change-notes/released/3.0.0.md | 9 ++++++++ python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 4 ++++ python/ql/src/change-notes/released/1.3.4.md | 3 +++ python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 6 ++++++ ...-12-03-remove-dataflow-config-class-api.md | 4 ---- .../ql/lib/change-notes/released/3.0.0.md | 7 ++++--- ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 4 ++++ ruby/ql/src/change-notes/released/1.1.8.md | 3 +++ ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 ++++ .../change-notes/released/1.0.13.md | 3 +++ shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 4 ++++ .../dataflow/change-notes/released/1.1.7.md | 3 +++ shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 ++++ shared/mad/change-notes/released/1.0.13.md | 3 +++ shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 ++++ .../change-notes/released/1.0.13.md | 3 +++ shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 ++++ shared/regex/change-notes/released/1.0.13.md | 3 +++ shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 ++++ shared/ssa/change-notes/released/1.0.13.md | 3 +++ shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 ++++ .../change-notes/released/1.0.13.md | 3 +++ shared/threat-models/codeql-pack.release.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/CHANGELOG.md | 4 ++++ .../tutorial/change-notes/released/1.0.13.md | 3 +++ shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/CHANGELOG.md | 4 ++++ .../typeflow/change-notes/released/1.0.13.md | 3 +++ shared/typeflow/codeql-pack.release.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 ++++ .../change-notes/released/1.0.13.md | 3 +++ shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 ++++ shared/typos/change-notes/released/1.0.13.md | 3 +++ shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 6 ++++++ .../2.0.0.md} | 7 ++++--- shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/CHANGELOG.md | 4 ++++ shared/xml/change-notes/released/1.0.13.md | 3 +++ shared/xml/codeql-pack.release.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 ++++ shared/yaml/change-notes/released/1.0.13.md | 3 +++ shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 6 ++++++ ...-12-03-remove-dataflow-config-class-api.md | 4 ---- .../ql/lib/change-notes/released/3.0.0.md | 7 ++++--- swift/ql/lib/codeql-pack.release.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/CHANGELOG.md | 4 ++++ swift/ql/src/change-notes/released/1.0.13.md | 3 +++ swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 154 files changed, 441 insertions(+), 180 deletions(-) delete mode 100644 cpp/ql/lib/change-notes/2024-11-18-throwing-functions.md rename go/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md => cpp/ql/lib/change-notes/released/3.0.0.md (55%) delete mode 100644 cpp/ql/src/change-notes/2024-11-22-too-few-arguments.md rename cpp/ql/src/change-notes/{2014-11-26-guarded-free.md => released/1.3.0.md} (52%) create mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.30.md create mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.30.md delete mode 100644 csharp/ql/lib/change-notes/2024-11-26-model-microsoft.jsinterop.ijsruntime.md delete mode 100644 csharp/ql/lib/change-notes/2024-11-27-navigationmanager.uri-and-uri-parsing-utilities.md delete mode 100644 csharp/ql/lib/change-notes/2024-12-03-dynamic-field-flow.md delete mode 100644 csharp/ql/lib/change-notes/2024-12-03-public-protected-reference.md create mode 100644 csharp/ql/lib/change-notes/released/4.0.0.md rename csharp/ql/src/change-notes/{2024-11-28-db-quality-property-access.md => released/1.0.13.md} (85%) create mode 100644 go/ql/consistency-queries/change-notes/released/1.0.13.md delete mode 100644 go/ql/lib/change-notes/2024-11-17-fix-missing-promoted-fields-and-methods-name-clash.md delete mode 100644 go/ql/lib/change-notes/2024-11-20-heuristic-logging-sinks.md create mode 100644 go/ql/lib/change-notes/released/3.0.0.md rename go/ql/src/change-notes/{2024-11-26-model-slices-package.md => released/1.1.4.md} (70%) delete mode 100644 java/ql/lib/change-notes/2024-11-04-list-of-constants-sanitizer.md rename csharp/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md => java/ql/lib/change-notes/released/5.0.0.md (56%) delete mode 100644 java/ql/src/change-notes/2024-11-22-sha3.md delete mode 100644 java/ql/src/change-notes/2024-11-24-sha2.md rename java/ql/src/change-notes/{2024-10-29-weak-crypto-hash.md => released/1.1.10.md} (50%) delete mode 100644 javascript/ql/lib/change-notes/2024-11-18-ES2022-find-functions.md delete mode 100644 javascript/ql/lib/change-notes/2024-11-20-ES2023-string-protytpe-toWellFormed.md delete mode 100644 javascript/ql/lib/change-notes/2024-11-20-ES2024-group-functions.md rename javascript/ql/lib/change-notes/{2024-11-28-regexp-unknown-flags.md => released/2.2.0.md} (52%) create mode 100644 javascript/ql/src/change-notes/released/1.2.5.md create mode 100644 misc/suite-helpers/change-notes/released/1.0.13.md delete mode 100644 python/ql/lib/change-notes/2024-11-26-fix-match-cfg-pruning.md delete mode 100644 python/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md create mode 100644 python/ql/lib/change-notes/released/3.0.0.md create mode 100644 python/ql/src/change-notes/released/1.3.4.md delete mode 100644 ruby/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md rename java/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md => ruby/ql/lib/change-notes/released/3.0.0.md (88%) create mode 100644 ruby/ql/src/change-notes/released/1.1.8.md create mode 100644 shared/controlflow/change-notes/released/1.0.13.md create mode 100644 shared/dataflow/change-notes/released/1.1.7.md create mode 100644 shared/mad/change-notes/released/1.0.13.md create mode 100644 shared/rangeanalysis/change-notes/released/1.0.13.md create mode 100644 shared/regex/change-notes/released/1.0.13.md create mode 100644 shared/ssa/change-notes/released/1.0.13.md create mode 100644 shared/threat-models/change-notes/released/1.0.13.md create mode 100644 shared/tutorial/change-notes/released/1.0.13.md create mode 100644 shared/typeflow/change-notes/released/1.0.13.md create mode 100644 shared/typetracking/change-notes/released/1.0.13.md create mode 100644 shared/typos/change-notes/released/1.0.13.md rename shared/util/change-notes/{2024-12-03-remove-deprected-inline-expecation-test-classes.md => released/2.0.0.md} (77%) create mode 100644 shared/xml/change-notes/released/1.0.13.md create mode 100644 shared/yaml/change-notes/released/1.0.13.md delete mode 100644 swift/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md rename cpp/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md => swift/ql/lib/change-notes/released/3.0.0.md (88%) create mode 100644 swift/ql/src/change-notes/released/1.0.13.md diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index d84fe585fca..4091ef97e4d 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,13 @@ +## 3.0.0 + +### Breaking Changes + +* Deleted the old deprecated data flow API that was based on extending a configuration class. See https://github.blog/changelog/2023-08-14-new-dataflow-api-for-writing-custom-codeql-queries for instructions on migrating your queries to use the new API. + +### Deprecated APIs + +* The `NonThrowing` class (`semmle.code.cpp.models.interfaces.NonThrowing`) has been deprecated. Please use the `NonCppThrowingFunction` class instead. + ## 2.1.1 No user-facing changes. diff --git a/cpp/ql/lib/change-notes/2024-11-18-throwing-functions.md b/cpp/ql/lib/change-notes/2024-11-18-throwing-functions.md deleted file mode 100644 index 73b358a0e1f..00000000000 --- a/cpp/ql/lib/change-notes/2024-11-18-throwing-functions.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: deprecated ---- -* The `NonThrowing` class (`semmle.code.cpp.models.interfaces.NonThrowing`) has been deprecated. Please use the `NonCppThrowingFunction` class instead. \ No newline at end of file diff --git a/go/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md b/cpp/ql/lib/change-notes/released/3.0.0.md similarity index 55% rename from go/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md rename to cpp/ql/lib/change-notes/released/3.0.0.md index d09ec528c99..5945c94c566 100644 --- a/go/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md +++ b/cpp/ql/lib/change-notes/released/3.0.0.md @@ -1,4 +1,9 @@ ---- -category: breaking ---- +## 3.0.0 + +### Breaking Changes + * Deleted the old deprecated data flow API that was based on extending a configuration class. See https://github.blog/changelog/2023-08-14-new-dataflow-api-for-writing-custom-codeql-queries for instructions on migrating your queries to use the new API. + +### Deprecated APIs + +* The `NonThrowing` class (`semmle.code.cpp.models.interfaces.NonThrowing`) has been deprecated. Please use the `NonCppThrowingFunction` class instead. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index 576c2ea18d6..33d3a2cd113 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.1.1 +lastReleaseVersion: 3.0.0 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 001028daae1..723a2c3544e 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 2.1.2-dev +version: 3.0.0 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 5bb266bdd64..74781fe0f87 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,13 @@ +## 1.3.0 + +### New Queries + +* Added a new high-precision quality query, `cpp/guarded-free`, which detects useless NULL pointer checks before calls to `free`. A variation of this query was originally contributed as an [experimental query by @mario-campos](https://github.com/github/codeql/pull/16331). + +### Minor Analysis Improvements + +* The "Call to function with fewer arguments than declared parameters" query (`cpp/too-few-arguments`) query no longer produces results if the function has been implicitly declared. + ## 1.2.7 No user-facing changes. diff --git a/cpp/ql/src/change-notes/2024-11-22-too-few-arguments.md b/cpp/ql/src/change-notes/2024-11-22-too-few-arguments.md deleted file mode 100644 index 116df08838a..00000000000 --- a/cpp/ql/src/change-notes/2024-11-22-too-few-arguments.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The "Call to function with fewer arguments than declared parameters" query (`cpp/too-few-arguments`) query no longer produces results if the function has been implicitly declared. diff --git a/cpp/ql/src/change-notes/2014-11-26-guarded-free.md b/cpp/ql/src/change-notes/released/1.3.0.md similarity index 52% rename from cpp/ql/src/change-notes/2014-11-26-guarded-free.md rename to cpp/ql/src/change-notes/released/1.3.0.md index 4280025a04f..1443206add8 100644 --- a/cpp/ql/src/change-notes/2014-11-26-guarded-free.md +++ b/cpp/ql/src/change-notes/released/1.3.0.md @@ -1,4 +1,9 @@ ---- -category: newQuery ---- +## 1.3.0 + +### New Queries + * Added a new high-precision quality query, `cpp/guarded-free`, which detects useless NULL pointer checks before calls to `free`. A variation of this query was originally contributed as an [experimental query by @mario-campos](https://github.com/github/codeql/pull/16331). + +### Minor Analysis Improvements + +* The "Call to function with fewer arguments than declared parameters" query (`cpp/too-few-arguments`) query no longer produces results if the function has been implicitly declared. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 950e0645d4a..ec16350ed6f 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.7 +lastReleaseVersion: 1.3.0 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 2fcf45807da..824ee1459aa 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.2.8-dev +version: 1.3.0 groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 93e737ae669..a71f93aacd4 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.30 + +No user-facing changes. + ## 1.7.29 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.30.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.30.md new file mode 100644 index 00000000000..8fb79827401 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.30.md @@ -0,0 +1,3 @@ +## 1.7.30 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index 34100d3ad64..c0346e526b9 100644 --- a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.29 +lastReleaseVersion: 1.7.30 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 0c8db9920eb..daac6be2fbb 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.30-dev +version: 1.7.30 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 93e737ae669..a71f93aacd4 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.30 + +No user-facing changes. + ## 1.7.29 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.30.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.30.md new file mode 100644 index 00000000000..8fb79827401 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.30.md @@ -0,0 +1,3 @@ +## 1.7.30 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index 34100d3ad64..c0346e526b9 100644 --- a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.29 +lastReleaseVersion: 1.7.30 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 3a4343780e4..1b3b911c6f1 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.30-dev +version: 1.7.30 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index c76569e4ab3..86f279365f0 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,20 @@ +## 4.0.0 + +### Breaking Changes + +* Deleted the old deprecated data flow API that was based on extending a configuration class. See https://github.blog/changelog/2023-08-14-new-dataflow-api-for-writing-custom-codeql-queries for instructions on migrating your queries to use the new API. + +### Minor Analysis Improvements + +* Added support for data-flow through member accesses of objects with `dynamic` types. +* Only extract *public* and *protected* members from reference assemblies. This yields an approximate average speed-up of around 10% for extraction and query execution. Custom MaD rows using `Field`-based summaries may need to be changed to `SyntheticField`-based flows if they reference private fields. +* Added `Microsoft.AspNetCore.Components.NagivationManager::Uri` as a remote flow source, since this value may contain user-specified values. +* Added the following URI-parsing methods as summaries, as they may be tainted with user-specified values: + - `System.Web.HttpUtility::ParseQueryString` + - `Microsoft.AspNetCore.WebUtilities.QueryHelpers::ParseQuery` + - `Microsoft.AspNetCore.WebUtilities.QueryHelpers::ParseNullableQuery` +* Added `js-interop` sinks for the `InvokeAsync` and `InvokeVoidAsync` methods of `Microsoft.JSInterop.IJSRuntime`, which can run arbitrary JavaScript. + ## 3.1.1 ### Minor Analysis Improvements diff --git a/csharp/ql/lib/change-notes/2024-11-26-model-microsoft.jsinterop.ijsruntime.md b/csharp/ql/lib/change-notes/2024-11-26-model-microsoft.jsinterop.ijsruntime.md deleted file mode 100644 index a99f9c8e0fd..00000000000 --- a/csharp/ql/lib/change-notes/2024-11-26-model-microsoft.jsinterop.ijsruntime.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* Added `js-interop` sinks for the `InvokeAsync` and `InvokeVoidAsync` methods of `Microsoft.JSInterop.IJSRuntime`, which can run arbitrary JavaScript. - diff --git a/csharp/ql/lib/change-notes/2024-11-27-navigationmanager.uri-and-uri-parsing-utilities.md b/csharp/ql/lib/change-notes/2024-11-27-navigationmanager.uri-and-uri-parsing-utilities.md deleted file mode 100644 index 2d9866c2e15..00000000000 --- a/csharp/ql/lib/change-notes/2024-11-27-navigationmanager.uri-and-uri-parsing-utilities.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -category: minorAnalysis ---- -* Added `Microsoft.AspNetCore.Components.NagivationManager::Uri` as a remote flow source, since this value may contain user-specified values. -* Added the following URI-parsing methods as summaries, as they may be tainted with user-specified values: - - `System.Web.HttpUtility::ParseQueryString` - - `Microsoft.AspNetCore.WebUtilities.QueryHelpers::ParseQuery` - - `Microsoft.AspNetCore.WebUtilities.QueryHelpers::ParseNullableQuery` diff --git a/csharp/ql/lib/change-notes/2024-12-03-dynamic-field-flow.md b/csharp/ql/lib/change-notes/2024-12-03-dynamic-field-flow.md deleted file mode 100644 index 4d5f8f9258e..00000000000 --- a/csharp/ql/lib/change-notes/2024-12-03-dynamic-field-flow.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added support for data-flow through member accesses of objects with `dynamic` types. diff --git a/csharp/ql/lib/change-notes/2024-12-03-public-protected-reference.md b/csharp/ql/lib/change-notes/2024-12-03-public-protected-reference.md deleted file mode 100644 index 7b284df3652..00000000000 --- a/csharp/ql/lib/change-notes/2024-12-03-public-protected-reference.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Only extract *public* and *protected* members from reference assemblies. This yields an approximate average speed-up of around 10% for extraction and query execution. Custom MaD rows using `Field`-based summaries may need to be changed to `SyntheticField`-based flows if they reference private fields. diff --git a/csharp/ql/lib/change-notes/released/4.0.0.md b/csharp/ql/lib/change-notes/released/4.0.0.md new file mode 100644 index 00000000000..2a64ac00232 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/4.0.0.md @@ -0,0 +1,16 @@ +## 4.0.0 + +### Breaking Changes + +* Deleted the old deprecated data flow API that was based on extending a configuration class. See https://github.blog/changelog/2023-08-14-new-dataflow-api-for-writing-custom-codeql-queries for instructions on migrating your queries to use the new API. + +### Minor Analysis Improvements + +* Added support for data-flow through member accesses of objects with `dynamic` types. +* Only extract *public* and *protected* members from reference assemblies. This yields an approximate average speed-up of around 10% for extraction and query execution. Custom MaD rows using `Field`-based summaries may need to be changed to `SyntheticField`-based flows if they reference private fields. +* Added `Microsoft.AspNetCore.Components.NagivationManager::Uri` as a remote flow source, since this value may contain user-specified values. +* Added the following URI-parsing methods as summaries, as they may be tainted with user-specified values: + - `System.Web.HttpUtility::ParseQueryString` + - `Microsoft.AspNetCore.WebUtilities.QueryHelpers::ParseQuery` + - `Microsoft.AspNetCore.WebUtilities.QueryHelpers::ParseNullableQuery` +* Added `js-interop` sinks for the `InvokeAsync` and `InvokeVoidAsync` methods of `Microsoft.JSInterop.IJSRuntime`, which can run arbitrary JavaScript. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index c06beda86a3..49fe3eef697 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 3.1.1 +lastReleaseVersion: 4.0.0 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index efc82eedc90..d985d58b112 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 3.1.2-dev +version: 4.0.0 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 99528b54e9e..370a9cf4a6a 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.0.13 + +### Minor Analysis Improvements + +* `csharp/diagnostic/database-quality` has been changed to exclude various property access expressions from database quality evaluation. The excluded property access expressions are expected to have no target callables even in manual or autobuilt databases. + ## 1.0.12 No user-facing changes. diff --git a/csharp/ql/src/change-notes/2024-11-28-db-quality-property-access.md b/csharp/ql/src/change-notes/released/1.0.13.md similarity index 85% rename from csharp/ql/src/change-notes/2024-11-28-db-quality-property-access.md rename to csharp/ql/src/change-notes/released/1.0.13.md index 212c01f24bb..cfce05a8733 100644 --- a/csharp/ql/src/change-notes/2024-11-28-db-quality-property-access.md +++ b/csharp/ql/src/change-notes/released/1.0.13.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 1.0.13 + +### Minor Analysis Improvements + * `csharp/diagnostic/database-quality` has been changed to exclude various property access expressions from database quality evaluation. The excluded property access expressions are expected to have no target callables even in manual or autobuilt databases. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 2036690b201..c3be7eb7716 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.12 +lastReleaseVersion: 1.0.13 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 569b69021d1..f838d279d87 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.0.13-dev +version: 1.0.13 groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index eeb6b0a262a..3c6fa155a32 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.13 + +No user-facing changes. + ## 1.0.12 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.13.md b/go/ql/consistency-queries/change-notes/released/1.0.13.md new file mode 100644 index 00000000000..378f97eeb1b --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/1.0.13.md @@ -0,0 +1,3 @@ +## 1.0.13 + +No user-facing changes. diff --git a/go/ql/consistency-queries/codeql-pack.release.yml b/go/ql/consistency-queries/codeql-pack.release.yml index 2036690b201..c3be7eb7716 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.12 +lastReleaseVersion: 1.0.13 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 60d11115c14..72aeab276d7 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.13-dev +version: 1.0.13 groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index b2eb3cbb239..83052b3a1d9 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,17 @@ +## 3.0.0 + +### Breaking Changes + +* Deleted the old deprecated data flow API that was based on extending a configuration class. See https://github.blog/changelog/2023-08-14-new-dataflow-api-for-writing-custom-codeql-queries for instructions on migrating your queries to use the new API. + +### Minor Analysis Improvements + +* A call to a method whose name starts with "Debug", "Error", "Fatal", "Info", "Log", "Output", "Panic", "Print", "Trace", "Warn" or "With" defined on an interface whose name ends in "logger" or "Logger" is now considered a LoggerCall. In particular, it is a sink for `go/clear-text-logging` and `go/log-injection`. This may lead to some more alerts in those queries. + +### Bug Fixes + +* Fixed a bug which meant that promoted fields and methods were missing when the embedded parent was not promoted due to a name clash. + ## 2.1.3 ### Minor Analysis Improvements diff --git a/go/ql/lib/change-notes/2024-11-17-fix-missing-promoted-fields-and-methods-name-clash.md b/go/ql/lib/change-notes/2024-11-17-fix-missing-promoted-fields-and-methods-name-clash.md deleted file mode 100644 index 8b1ee9b60b2..00000000000 --- a/go/ql/lib/change-notes/2024-11-17-fix-missing-promoted-fields-and-methods-name-clash.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Fixed a bug which meant that promoted fields and methods were missing when the embedded parent was not promoted due to a name clash. diff --git a/go/ql/lib/change-notes/2024-11-20-heuristic-logging-sinks.md b/go/ql/lib/change-notes/2024-11-20-heuristic-logging-sinks.md deleted file mode 100644 index 46f5988b379..00000000000 --- a/go/ql/lib/change-notes/2024-11-20-heuristic-logging-sinks.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* A call to a method whose name starts with "Debug", "Error", "Fatal", "Info", "Log", "Output", "Panic", "Print", "Trace", "Warn" or "With" defined on an interface whose name ends in "logger" or "Logger" is now considered a LoggerCall. In particular, it is a sink for `go/clear-text-logging` and `go/log-injection`. This may lead to some more alerts in those queries. diff --git a/go/ql/lib/change-notes/released/3.0.0.md b/go/ql/lib/change-notes/released/3.0.0.md new file mode 100644 index 00000000000..5aafa0c29d1 --- /dev/null +++ b/go/ql/lib/change-notes/released/3.0.0.md @@ -0,0 +1,13 @@ +## 3.0.0 + +### Breaking Changes + +* Deleted the old deprecated data flow API that was based on extending a configuration class. See https://github.blog/changelog/2023-08-14-new-dataflow-api-for-writing-custom-codeql-queries for instructions on migrating your queries to use the new API. + +### Minor Analysis Improvements + +* A call to a method whose name starts with "Debug", "Error", "Fatal", "Info", "Log", "Output", "Panic", "Print", "Trace", "Warn" or "With" defined on an interface whose name ends in "logger" or "Logger" is now considered a LoggerCall. In particular, it is a sink for `go/clear-text-logging` and `go/log-injection`. This may lead to some more alerts in those queries. + +### Bug Fixes + +* Fixed a bug which meant that promoted fields and methods were missing when the embedded parent was not promoted due to a name clash. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 345fb0c73a4..33d3a2cd113 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.1.3 +lastReleaseVersion: 3.0.0 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 98e81430897..df0d0e9d5fc 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 2.1.4-dev +version: 3.0.0 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index c529cbffb32..c9044e55cdc 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.1.4 + +### Minor Analysis Improvements + +* Added value flow models for functions in the `slices` package which do not involve the `iter` package. + ## 1.1.3 No user-facing changes. diff --git a/go/ql/src/change-notes/2024-11-26-model-slices-package.md b/go/ql/src/change-notes/released/1.1.4.md similarity index 70% rename from go/ql/src/change-notes/2024-11-26-model-slices-package.md rename to go/ql/src/change-notes/released/1.1.4.md index 5a3141c8075..0437ebd2bd6 100644 --- a/go/ql/src/change-notes/2024-11-26-model-slices-package.md +++ b/go/ql/src/change-notes/released/1.1.4.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 1.1.4 + +### Minor Analysis Improvements + * Added value flow models for functions in the `slices` package which do not involve the `iter` package. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 35e710ab1bf..26cbcd3f123 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.3 +lastReleaseVersion: 1.1.4 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 866a0935713..ecd9cbb13f0 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.1.4-dev +version: 1.1.4 groups: - go - queries diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 990fea9ddd7..09ee80087e8 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,13 @@ +## 5.0.0 + +### Breaking Changes + +* Deleted the old deprecated data flow API that was based on extending a configuration class. See https://github.blog/changelog/2023-08-14-new-dataflow-api-for-writing-custom-codeql-queries for instructions on migrating your queries to use the new API. + +### Minor Analysis Improvements + +* Calling `coll.contains(x)` is now a taint sanitizer (for any query) for the value `x`, where `coll` is a collection of constants. + ## 4.2.1 ### Minor Analysis Improvements diff --git a/java/ql/lib/change-notes/2024-11-04-list-of-constants-sanitizer.md b/java/ql/lib/change-notes/2024-11-04-list-of-constants-sanitizer.md deleted file mode 100644 index dea1e7ff81e..00000000000 --- a/java/ql/lib/change-notes/2024-11-04-list-of-constants-sanitizer.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Calling `coll.contains(x)` is now a taint sanitizer (for any query) for the value `x`, where `coll` is a collection of constants. diff --git a/csharp/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md b/java/ql/lib/change-notes/released/5.0.0.md similarity index 56% rename from csharp/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md rename to java/ql/lib/change-notes/released/5.0.0.md index d09ec528c99..9d9e2bc61b5 100644 --- a/csharp/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md +++ b/java/ql/lib/change-notes/released/5.0.0.md @@ -1,4 +1,9 @@ ---- -category: breaking ---- +## 5.0.0 + +### Breaking Changes + * Deleted the old deprecated data flow API that was based on extending a configuration class. See https://github.blog/changelog/2023-08-14-new-dataflow-api-for-writing-custom-codeql-queries for instructions on migrating your queries to use the new API. + +### Minor Analysis Improvements + +* Calling `coll.contains(x)` is now a taint sanitizer (for any query) for the value `x`, where `coll` is a collection of constants. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 38ea9976fcc..c9e54136ca5 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.2.1 +lastReleaseVersion: 5.0.0 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index a8c1ee2de2b..54f56a24606 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 4.2.2-dev +version: 5.0.0 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index f212b4a8d3d..0bb38874b82 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,11 @@ +## 1.1.10 + +### Minor Analysis Improvements + +* Added SHA-384 to the list of secure hashing algorithms. As a result the `java/potentially-weak-cryptographic-algorithm` query should no longer flag up uses of SHA-384. +* Added SHA3 to the list of secure hashing algorithms. As a result the `java/potentially-weak-cryptographic-algorithm` query should no longer flag up uses of SHA3. +* The `java/weak-cryptographic-algorithm` query has been updated to no longer report uses of hash functions such as `MD5` and `SHA1` even if they are known to be weak. These hash algorithms are used very often in non-sensitive contexts, making the query too imprecise in practice. The `java/potentially-weak-cryptographic-algorithm` query has been updated to report these uses instead. + ## 1.1.9 No user-facing changes. diff --git a/java/ql/src/change-notes/2024-11-22-sha3.md b/java/ql/src/change-notes/2024-11-22-sha3.md deleted file mode 100644 index 61dbc35162e..00000000000 --- a/java/ql/src/change-notes/2024-11-22-sha3.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added SHA3 to the list of secure hashing algorithms. As a result the `java/potentially-weak-cryptographic-algorithm` query should no longer flag up uses of SHA3. diff --git a/java/ql/src/change-notes/2024-11-24-sha2.md b/java/ql/src/change-notes/2024-11-24-sha2.md deleted file mode 100644 index 395ea04b782..00000000000 --- a/java/ql/src/change-notes/2024-11-24-sha2.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added SHA-384 to the list of secure hashing algorithms. As a result the `java/potentially-weak-cryptographic-algorithm` query should no longer flag up uses of SHA-384. diff --git a/java/ql/src/change-notes/2024-10-29-weak-crypto-hash.md b/java/ql/src/change-notes/released/1.1.10.md similarity index 50% rename from java/ql/src/change-notes/2024-10-29-weak-crypto-hash.md rename to java/ql/src/change-notes/released/1.1.10.md index b4ac88bcdc6..fef22bdedf5 100644 --- a/java/ql/src/change-notes/2024-10-29-weak-crypto-hash.md +++ b/java/ql/src/change-notes/released/1.1.10.md @@ -1,4 +1,7 @@ ---- -category: minorAnalysis ---- +## 1.1.10 + +### Minor Analysis Improvements + +* Added SHA-384 to the list of secure hashing algorithms. As a result the `java/potentially-weak-cryptographic-algorithm` query should no longer flag up uses of SHA-384. +* Added SHA3 to the list of secure hashing algorithms. As a result the `java/potentially-weak-cryptographic-algorithm` query should no longer flag up uses of SHA3. * The `java/weak-cryptographic-algorithm` query has been updated to no longer report uses of hash functions such as `MD5` and `SHA1` even if they are known to be weak. These hash algorithms are used very often in non-sensitive contexts, making the query too imprecise in practice. The `java/potentially-weak-cryptographic-algorithm` query has been updated to report these uses instead. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 6f4795f3ea0..4c01918d414 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.9 +lastReleaseVersion: 1.1.10 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 44740683f14..eb757401a84 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.1.10-dev +version: 1.1.10 groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 7d8f8dcfc8b..df83ccd9c4d 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,12 +1,27 @@ +## 2.2.0 + +### Major Analysis Improvements + +* The `js/incomplete-sanitization` query now also checks regular expressions constructed using `new RegExp(..)`. Previously it only checked regular expression literals. +* Regular expression-based sanitisers implemented with `new RegExp(..)` are now detected in more cases. +* Regular expression related queries now account for unknown flags. + +### Minor Analysis Improvements + +* Added taint-steps for `String.prototype.toWellFormed`. +* Added taint-steps for `Map.groupBy` and `Object.groupBy`. +* Added taint-steps for `Array.prototype.findLast` +* Added taint-steps for `Array.prototype.findLastIndex` + ## 2.1.1 ### Minor Analysis Improvements -Added taint-steps for `Array.prototype.with`. -Added taint-steps for `Array.prototype.toSpliced` +* Added taint-steps for `Array.prototype.with`. +* Added taint-steps for `Array.prototype.toSpliced` * Added taint-steps for `Array.prototype.toReversed`. * Added taint-steps for `Array.prototype.toSorted`. -Added support for `String.prototype.matchAll`. +* Added support for `String.prototype.matchAll`. * Added taint-steps for `Array.prototype.reverse` ## 2.1.0 diff --git a/javascript/ql/lib/change-notes/2024-11-18-ES2022-find-functions.md b/javascript/ql/lib/change-notes/2024-11-18-ES2022-find-functions.md deleted file mode 100644 index e3fe3b6aef2..00000000000 --- a/javascript/ql/lib/change-notes/2024-11-18-ES2022-find-functions.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* Added taint-steps for `Array.prototype.findLast` -* Added taint-steps for `Array.prototype.findLastIndex` diff --git a/javascript/ql/lib/change-notes/2024-11-20-ES2023-string-protytpe-toWellFormed.md b/javascript/ql/lib/change-notes/2024-11-20-ES2023-string-protytpe-toWellFormed.md deleted file mode 100644 index dda4d878760..00000000000 --- a/javascript/ql/lib/change-notes/2024-11-20-ES2023-string-protytpe-toWellFormed.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added taint-steps for `String.prototype.toWellFormed`. diff --git a/javascript/ql/lib/change-notes/2024-11-20-ES2024-group-functions.md b/javascript/ql/lib/change-notes/2024-11-20-ES2024-group-functions.md deleted file mode 100644 index 8511727f8e7..00000000000 --- a/javascript/ql/lib/change-notes/2024-11-20-ES2024-group-functions.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added taint-steps for `Map.groupBy` and `Object.groupBy`. diff --git a/javascript/ql/lib/change-notes/2024-11-28-regexp-unknown-flags.md b/javascript/ql/lib/change-notes/released/2.2.0.md similarity index 52% rename from javascript/ql/lib/change-notes/2024-11-28-regexp-unknown-flags.md rename to javascript/ql/lib/change-notes/released/2.2.0.md index e1db79e5c86..535acb6ffc1 100644 --- a/javascript/ql/lib/change-notes/2024-11-28-regexp-unknown-flags.md +++ b/javascript/ql/lib/change-notes/released/2.2.0.md @@ -1,6 +1,14 @@ ---- -category: majorAnalysis ---- +## 2.2.0 + +### Major Analysis Improvements + * The `js/incomplete-sanitization` query now also checks regular expressions constructed using `new RegExp(..)`. Previously it only checked regular expression literals. * Regular expression-based sanitisers implemented with `new RegExp(..)` are now detected in more cases. * Regular expression related queries now account for unknown flags. + +### Minor Analysis Improvements + +* Added taint-steps for `String.prototype.toWellFormed`. +* Added taint-steps for `Map.groupBy` and `Object.groupBy`. +* Added taint-steps for `Array.prototype.findLast` +* Added taint-steps for `Array.prototype.findLastIndex` diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 576c2ea18d6..2f308354195 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.1.1 +lastReleaseVersion: 2.2.0 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 9726d407e1a..4245aa6e5d3 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.1.2-dev +version: 2.2.0 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index 403de6b3323..195298ec89f 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.2.5 + +No user-facing changes. + ## 1.2.4 No user-facing changes. diff --git a/javascript/ql/src/change-notes/released/1.2.5.md b/javascript/ql/src/change-notes/released/1.2.5.md new file mode 100644 index 00000000000..c805dc2cd4c --- /dev/null +++ b/javascript/ql/src/change-notes/released/1.2.5.md @@ -0,0 +1,3 @@ +## 1.2.5 + +No user-facing changes. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 172090f46b6..40355f0807f 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.2.4 +lastReleaseVersion: 1.2.5 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index a1efe30e69d..ba7c502b29f 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 1.2.5-dev +version: 1.2.5 groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 969419cb7b7..5d46c57bf4e 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.13 + +No user-facing changes. + ## 1.0.12 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/1.0.13.md b/misc/suite-helpers/change-notes/released/1.0.13.md new file mode 100644 index 00000000000..378f97eeb1b --- /dev/null +++ b/misc/suite-helpers/change-notes/released/1.0.13.md @@ -0,0 +1,3 @@ +## 1.0.13 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index 2036690b201..c3be7eb7716 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.12 +lastReleaseVersion: 1.0.13 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index e2cbd7f3f9d..834362022be 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.13-dev +version: 1.0.13 groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index 34dc5f1b060..81c7659c4ed 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,13 @@ +## 3.0.0 + +### Breaking Changes + +* Deleted the old deprecated data flow API that was based on extending a configuration class. See https://github.blog/changelog/2023-08-14-new-dataflow-api-for-writing-custom-codeql-queries for instructions on migrating your queries to use the new API. + +### Bug Fixes + +- Fixed a problem with the control-flow graph construction, where writing `case True:` or `case False:` would cause parts of the graph to be pruned by mistake. + ## 2.2.0 ### Major Analysis Improvements diff --git a/python/ql/lib/change-notes/2024-11-26-fix-match-cfg-pruning.md b/python/ql/lib/change-notes/2024-11-26-fix-match-cfg-pruning.md deleted file mode 100644 index 3ee1094c13b..00000000000 --- a/python/ql/lib/change-notes/2024-11-26-fix-match-cfg-pruning.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: fix ---- - -- Fixed a problem with the control-flow graph construction, where writing `case True:` or `case False:` would cause parts of the graph to be pruned by mistake. diff --git a/python/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md b/python/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md deleted file mode 100644 index d09ec528c99..00000000000 --- a/python/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: breaking ---- -* Deleted the old deprecated data flow API that was based on extending a configuration class. See https://github.blog/changelog/2023-08-14-new-dataflow-api-for-writing-custom-codeql-queries for instructions on migrating your queries to use the new API. diff --git a/python/ql/lib/change-notes/released/3.0.0.md b/python/ql/lib/change-notes/released/3.0.0.md new file mode 100644 index 00000000000..d57189465d8 --- /dev/null +++ b/python/ql/lib/change-notes/released/3.0.0.md @@ -0,0 +1,9 @@ +## 3.0.0 + +### Breaking Changes + +* Deleted the old deprecated data flow API that was based on extending a configuration class. See https://github.blog/changelog/2023-08-14-new-dataflow-api-for-writing-custom-codeql-queries for instructions on migrating your queries to use the new API. + +### Bug Fixes + +- Fixed a problem with the control-flow graph construction, where writing `case True:` or `case False:` would cause parts of the graph to be pruned by mistake. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index 2f308354195..33d3a2cd113 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.2.0 +lastReleaseVersion: 3.0.0 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 290189efa13..978dfd96a83 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 2.2.1-dev +version: 3.0.0 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index 5fea597a7a3..c247e217acf 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.3.4 + +No user-facing changes. + ## 1.3.3 No user-facing changes. diff --git a/python/ql/src/change-notes/released/1.3.4.md b/python/ql/src/change-notes/released/1.3.4.md new file mode 100644 index 00000000000..5073aca7222 --- /dev/null +++ b/python/ql/src/change-notes/released/1.3.4.md @@ -0,0 +1,3 @@ +## 1.3.4 + +No user-facing changes. diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index eb1f7dabc84..8263ddf2c8b 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.3.3 +lastReleaseVersion: 1.3.4 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index d84402123dc..bff5afdf817 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.3.4-dev +version: 1.3.4 groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index 37248cf4960..737903a3232 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 3.0.0 + +### Breaking Changes + +* Deleted the old deprecated data flow API that was based on extending a configuration class. See https://github.blog/changelog/2023-08-14-new-dataflow-api-for-writing-custom-codeql-queries for instructions on migrating your queries to use the new API. + ## 2.0.4 No user-facing changes. diff --git a/ruby/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md b/ruby/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md deleted file mode 100644 index d09ec528c99..00000000000 --- a/ruby/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: breaking ---- -* Deleted the old deprecated data flow API that was based on extending a configuration class. See https://github.blog/changelog/2023-08-14-new-dataflow-api-for-writing-custom-codeql-queries for instructions on migrating your queries to use the new API. diff --git a/java/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md b/ruby/ql/lib/change-notes/released/3.0.0.md similarity index 88% rename from java/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md rename to ruby/ql/lib/change-notes/released/3.0.0.md index d09ec528c99..82b5c467407 100644 --- a/java/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md +++ b/ruby/ql/lib/change-notes/released/3.0.0.md @@ -1,4 +1,5 @@ ---- -category: breaking ---- +## 3.0.0 + +### Breaking Changes + * Deleted the old deprecated data flow API that was based on extending a configuration class. See https://github.blog/changelog/2023-08-14-new-dataflow-api-for-writing-custom-codeql-queries for instructions on migrating your queries to use the new API. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 0f306f8bd3b..33d3a2cd113 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.4 +lastReleaseVersion: 3.0.0 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 97259f5dd36..41b72629a67 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 2.0.5-dev +version: 3.0.0 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index e159e9fda36..5fe04780136 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.8 + +No user-facing changes. + ## 1.1.7 No user-facing changes. diff --git a/ruby/ql/src/change-notes/released/1.1.8.md b/ruby/ql/src/change-notes/released/1.1.8.md new file mode 100644 index 00000000000..f4fe325b335 --- /dev/null +++ b/ruby/ql/src/change-notes/released/1.1.8.md @@ -0,0 +1,3 @@ +## 1.1.8 + +No user-facing changes. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 75910556516..64972659c42 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.7 +lastReleaseVersion: 1.1.8 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 26ac8866ae0..7f337d89d6a 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.1.8-dev +version: 1.1.8 groups: - ruby - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index b6de6379e77..285b39a4359 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.13 + +No user-facing changes. + ## 1.0.12 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/1.0.13.md b/shared/controlflow/change-notes/released/1.0.13.md new file mode 100644 index 00000000000..378f97eeb1b --- /dev/null +++ b/shared/controlflow/change-notes/released/1.0.13.md @@ -0,0 +1,3 @@ +## 1.0.13 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index 2036690b201..c3be7eb7716 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.12 +lastReleaseVersion: 1.0.13 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index da4368217d3..5401179ac96 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 1.0.13-dev +version: 1.0.13 groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index 7eec34670dc..df038524d2d 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.7 + +No user-facing changes. + ## 1.1.6 No user-facing changes. diff --git a/shared/dataflow/change-notes/released/1.1.7.md b/shared/dataflow/change-notes/released/1.1.7.md new file mode 100644 index 00000000000..81505c0507a --- /dev/null +++ b/shared/dataflow/change-notes/released/1.1.7.md @@ -0,0 +1,3 @@ +## 1.1.7 + +No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index 9e712a00a21..75910556516 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.6 +lastReleaseVersion: 1.1.7 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 15f77aa0a3a..55eb216cc54 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 1.1.7-dev +version: 1.1.7 groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index 8eb5e03400a..93a528a4f3c 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.13 + +No user-facing changes. + ## 1.0.12 No user-facing changes. diff --git a/shared/mad/change-notes/released/1.0.13.md b/shared/mad/change-notes/released/1.0.13.md new file mode 100644 index 00000000000..378f97eeb1b --- /dev/null +++ b/shared/mad/change-notes/released/1.0.13.md @@ -0,0 +1,3 @@ +## 1.0.13 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index 2036690b201..c3be7eb7716 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.12 +lastReleaseVersion: 1.0.13 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 8ce60ad0cc9..5c37e609029 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.13-dev +version: 1.0.13 groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index cedd38e3e30..6b25d16e0f7 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.13 + +No user-facing changes. + ## 1.0.12 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/1.0.13.md b/shared/rangeanalysis/change-notes/released/1.0.13.md new file mode 100644 index 00000000000..378f97eeb1b --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/1.0.13.md @@ -0,0 +1,3 @@ +## 1.0.13 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index 2036690b201..c3be7eb7716 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.12 +lastReleaseVersion: 1.0.13 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index ee5954cae0b..bd33c35fe53 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.13-dev +version: 1.0.13 groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index 3e8a99103fe..54c3ed2b307 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.13 + +No user-facing changes. + ## 1.0.12 No user-facing changes. diff --git a/shared/regex/change-notes/released/1.0.13.md b/shared/regex/change-notes/released/1.0.13.md new file mode 100644 index 00000000000..378f97eeb1b --- /dev/null +++ b/shared/regex/change-notes/released/1.0.13.md @@ -0,0 +1,3 @@ +## 1.0.13 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index 2036690b201..c3be7eb7716 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.12 +lastReleaseVersion: 1.0.13 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 34aa1065398..07d9f87eb8c 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.13-dev +version: 1.0.13 groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index b98345f361c..01c19388c92 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.13 + +No user-facing changes. + ## 1.0.12 No user-facing changes. diff --git a/shared/ssa/change-notes/released/1.0.13.md b/shared/ssa/change-notes/released/1.0.13.md new file mode 100644 index 00000000000..378f97eeb1b --- /dev/null +++ b/shared/ssa/change-notes/released/1.0.13.md @@ -0,0 +1,3 @@ +## 1.0.13 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index 2036690b201..c3be7eb7716 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.12 +lastReleaseVersion: 1.0.13 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 145cd9e2192..9a2027d0706 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 1.0.13-dev +version: 1.0.13 groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index eeb6b0a262a..3c6fa155a32 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.13 + +No user-facing changes. + ## 1.0.12 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/1.0.13.md b/shared/threat-models/change-notes/released/1.0.13.md new file mode 100644 index 00000000000..378f97eeb1b --- /dev/null +++ b/shared/threat-models/change-notes/released/1.0.13.md @@ -0,0 +1,3 @@ +## 1.0.13 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index 2036690b201..c3be7eb7716 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.12 +lastReleaseVersion: 1.0.13 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 16ca1fe3a88..d29bd36dd83 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.13-dev +version: 1.0.13 library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index da467b3de30..1f4e7ad4ed3 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.13 + +No user-facing changes. + ## 1.0.12 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/1.0.13.md b/shared/tutorial/change-notes/released/1.0.13.md new file mode 100644 index 00000000000..378f97eeb1b --- /dev/null +++ b/shared/tutorial/change-notes/released/1.0.13.md @@ -0,0 +1,3 @@ +## 1.0.13 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index 2036690b201..c3be7eb7716 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.12 +lastReleaseVersion: 1.0.13 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 14cbbbdc067..e618abb068b 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.13-dev +version: 1.0.13 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/CHANGELOG.md b/shared/typeflow/CHANGELOG.md index cae361ea7e7..dd8fb7a60b2 100644 --- a/shared/typeflow/CHANGELOG.md +++ b/shared/typeflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.13 + +No user-facing changes. + ## 1.0.12 No user-facing changes. diff --git a/shared/typeflow/change-notes/released/1.0.13.md b/shared/typeflow/change-notes/released/1.0.13.md new file mode 100644 index 00000000000..378f97eeb1b --- /dev/null +++ b/shared/typeflow/change-notes/released/1.0.13.md @@ -0,0 +1,3 @@ +## 1.0.13 + +No user-facing changes. diff --git a/shared/typeflow/codeql-pack.release.yml b/shared/typeflow/codeql-pack.release.yml index 2036690b201..c3be7eb7716 100644 --- a/shared/typeflow/codeql-pack.release.yml +++ b/shared/typeflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.12 +lastReleaseVersion: 1.0.13 diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index 5a659a4559d..e9d46c074e8 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.13-dev +version: 1.0.13 groups: shared library: true dependencies: diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index 96110cb10a2..0ab05873af4 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.13 + +No user-facing changes. + ## 1.0.12 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/1.0.13.md b/shared/typetracking/change-notes/released/1.0.13.md new file mode 100644 index 00000000000..378f97eeb1b --- /dev/null +++ b/shared/typetracking/change-notes/released/1.0.13.md @@ -0,0 +1,3 @@ +## 1.0.13 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index 2036690b201..c3be7eb7716 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.12 +lastReleaseVersion: 1.0.13 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index 216cc8696d9..9e4717670a7 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 1.0.13-dev +version: 1.0.13 groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index 83fb2dfb4cc..c0c3cea3948 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.13 + +No user-facing changes. + ## 1.0.12 No user-facing changes. diff --git a/shared/typos/change-notes/released/1.0.13.md b/shared/typos/change-notes/released/1.0.13.md new file mode 100644 index 00000000000..378f97eeb1b --- /dev/null +++ b/shared/typos/change-notes/released/1.0.13.md @@ -0,0 +1,3 @@ +## 1.0.13 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index 2036690b201..c3be7eb7716 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.12 +lastReleaseVersion: 1.0.13 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 8c1a93efe5e..b3ed91c0926 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.13-dev +version: 1.0.13 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index 15c3b8c6225..e03d990b747 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.0.0 + +### Breaking Changes + +* Deleted the old deprecated inline expectation test API that was based on the `InlineExpectationsTest` class. + ## 1.0.12 No user-facing changes. diff --git a/shared/util/change-notes/2024-12-03-remove-deprected-inline-expecation-test-classes.md b/shared/util/change-notes/released/2.0.0.md similarity index 77% rename from shared/util/change-notes/2024-12-03-remove-deprected-inline-expecation-test-classes.md rename to shared/util/change-notes/released/2.0.0.md index 6126e37b619..513290e952b 100644 --- a/shared/util/change-notes/2024-12-03-remove-deprected-inline-expecation-test-classes.md +++ b/shared/util/change-notes/released/2.0.0.md @@ -1,4 +1,5 @@ ---- -category: breaking ---- +## 2.0.0 + +### Breaking Changes + * Deleted the old deprecated inline expectation test API that was based on the `InlineExpectationsTest` class. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index 2036690b201..0abe6ccede0 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.12 +lastReleaseVersion: 2.0.0 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 83284f19cc3..4b66bd8ad92 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 1.0.13-dev +version: 2.0.0 groups: shared library: true dependencies: null diff --git a/shared/xml/CHANGELOG.md b/shared/xml/CHANGELOG.md index c8213742dc9..c3ebc31994b 100644 --- a/shared/xml/CHANGELOG.md +++ b/shared/xml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.13 + +No user-facing changes. + ## 1.0.12 No user-facing changes. diff --git a/shared/xml/change-notes/released/1.0.13.md b/shared/xml/change-notes/released/1.0.13.md new file mode 100644 index 00000000000..378f97eeb1b --- /dev/null +++ b/shared/xml/change-notes/released/1.0.13.md @@ -0,0 +1,3 @@ +## 1.0.13 + +No user-facing changes. diff --git a/shared/xml/codeql-pack.release.yml b/shared/xml/codeql-pack.release.yml index 2036690b201..c3be7eb7716 100644 --- a/shared/xml/codeql-pack.release.yml +++ b/shared/xml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.12 +lastReleaseVersion: 1.0.13 diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index f48f41ef3ff..8d8b1b8ee54 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.13-dev +version: 1.0.13 groups: shared library: true dependencies: diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index 2cc2ec62057..28fcbceec8e 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.13 + +No user-facing changes. + ## 1.0.12 No user-facing changes. diff --git a/shared/yaml/change-notes/released/1.0.13.md b/shared/yaml/change-notes/released/1.0.13.md new file mode 100644 index 00000000000..378f97eeb1b --- /dev/null +++ b/shared/yaml/change-notes/released/1.0.13.md @@ -0,0 +1,3 @@ +## 1.0.13 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index 2036690b201..c3be7eb7716 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.12 +lastReleaseVersion: 1.0.13 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 54880a8cf2f..998a94f4bbf 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.13-dev +version: 1.0.13 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index 898a3282bb5..ba76b51c80e 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 3.0.0 + +### Breaking Changes + +* Deleted the old deprecated data flow API that was based on extending a configuration class. See https://github.blog/changelog/2023-08-14-new-dataflow-api-for-writing-custom-codeql-queries for instructions on migrating your queries to use the new API. + ## 2.0.4 No user-facing changes. diff --git a/swift/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md b/swift/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md deleted file mode 100644 index d09ec528c99..00000000000 --- a/swift/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: breaking ---- -* Deleted the old deprecated data flow API that was based on extending a configuration class. See https://github.blog/changelog/2023-08-14-new-dataflow-api-for-writing-custom-codeql-queries for instructions on migrating your queries to use the new API. diff --git a/cpp/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md b/swift/ql/lib/change-notes/released/3.0.0.md similarity index 88% rename from cpp/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md rename to swift/ql/lib/change-notes/released/3.0.0.md index d09ec528c99..82b5c467407 100644 --- a/cpp/ql/lib/change-notes/2024-12-03-remove-dataflow-config-class-api.md +++ b/swift/ql/lib/change-notes/released/3.0.0.md @@ -1,4 +1,5 @@ ---- -category: breaking ---- +## 3.0.0 + +### Breaking Changes + * Deleted the old deprecated data flow API that was based on extending a configuration class. See https://github.blog/changelog/2023-08-14-new-dataflow-api-for-writing-custom-codeql-queries for instructions on migrating your queries to use the new API. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 0f306f8bd3b..33d3a2cd113 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.4 +lastReleaseVersion: 3.0.0 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 2e855546d50..66fd8af358e 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 2.0.5-dev +version: 3.0.0 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index 76de7db1348..73ac6bef86d 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.13 + +No user-facing changes. + ## 1.0.12 No user-facing changes. diff --git a/swift/ql/src/change-notes/released/1.0.13.md b/swift/ql/src/change-notes/released/1.0.13.md new file mode 100644 index 00000000000..378f97eeb1b --- /dev/null +++ b/swift/ql/src/change-notes/released/1.0.13.md @@ -0,0 +1,3 @@ +## 1.0.13 + +No user-facing changes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index 2036690b201..c3be7eb7716 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.12 +lastReleaseVersion: 1.0.13 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 1d9f7154cda..ee53e55fe41 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.0.13-dev +version: 1.0.13 groups: - swift - queries From e0e82ad7ad4a7c85920baaf81347a0532d1a35a6 Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Wed, 4 Dec 2024 16:05:15 +0000 Subject: [PATCH 7/9] Add periods for consistency --- javascript/ql/lib/CHANGELOG.md | 4 ++-- javascript/ql/lib/change-notes/released/2.2.0.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index df83ccd9c4d..ebe424935eb 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -10,8 +10,8 @@ * Added taint-steps for `String.prototype.toWellFormed`. * Added taint-steps for `Map.groupBy` and `Object.groupBy`. -* Added taint-steps for `Array.prototype.findLast` -* Added taint-steps for `Array.prototype.findLastIndex` +* Added taint-steps for `Array.prototype.findLast`. +* Added taint-steps for `Array.prototype.findLastIndex`. ## 2.1.1 diff --git a/javascript/ql/lib/change-notes/released/2.2.0.md b/javascript/ql/lib/change-notes/released/2.2.0.md index 535acb6ffc1..f8c194f73f8 100644 --- a/javascript/ql/lib/change-notes/released/2.2.0.md +++ b/javascript/ql/lib/change-notes/released/2.2.0.md @@ -10,5 +10,5 @@ * Added taint-steps for `String.prototype.toWellFormed`. * Added taint-steps for `Map.groupBy` and `Object.groupBy`. -* Added taint-steps for `Array.prototype.findLast` -* Added taint-steps for `Array.prototype.findLastIndex` +* Added taint-steps for `Array.prototype.findLast`. +* Added taint-steps for `Array.prototype.findLastIndex`. From cf71a1525b2549b92b331ba3a04a55705317038a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 4 Dec 2024 18:36:17 +0000 Subject: [PATCH 8/9] Post-release preparation for codeql-cli-2.20.0 --- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 34 files changed, 34 insertions(+), 34 deletions(-) diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 723a2c3544e..4bb4b04e02f 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 3.0.0 +version: 3.0.1-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 824ee1459aa..940c3e2a4cb 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.3.0 +version: 1.3.1-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index daac6be2fbb..781915bf1a1 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.30 +version: 1.7.31-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 1b3b911c6f1..979d8e6c661 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.30 +version: 1.7.31-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index d985d58b112..81a55470a4d 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 4.0.0 +version: 4.0.1-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index f838d279d87..e4d9400d96d 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.0.13 +version: 1.0.14-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 72aeab276d7..1812705438c 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.13 +version: 1.0.14-dev groups: - go - queries diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index df0d0e9d5fc..4e72aa3857b 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 3.0.0 +version: 3.0.1-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index ecd9cbb13f0..36775d0d862 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.1.4 +version: 1.1.5-dev groups: - go - queries diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 54f56a24606..f892ca1c450 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 5.0.0 +version: 5.0.1-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index eb757401a84..8ee211fb536 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.1.10 +version: 1.1.11-dev groups: - java - queries diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 4245aa6e5d3..4d568ff4813 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.2.0 +version: 2.2.1-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index ba7c502b29f..78f0585027b 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 1.2.5 +version: 1.2.6-dev groups: - javascript - queries diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 834362022be..eeb8f762b13 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.13 +version: 1.0.14-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 978dfd96a83..147933b96fe 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 3.0.0 +version: 3.0.1-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index bff5afdf817..d83b6433ac6 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.3.4 +version: 1.3.5-dev groups: - python - queries diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 41b72629a67..ddf106c95bf 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 3.0.0 +version: 3.0.1-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 7f337d89d6a..43bfe75f566 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.1.8 +version: 1.1.9-dev groups: - ruby - queries diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 5401179ac96..268f142bd1b 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 1.0.13 +version: 1.0.14-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 55eb216cc54..6a8e8c3a4ae 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 1.1.7 +version: 1.1.8-dev groups: shared library: true dependencies: diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 5c37e609029..125bcad622d 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.13 +version: 1.0.14-dev groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index bd33c35fe53..62c8c1e46b6 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.13 +version: 1.0.14-dev groups: shared library: true dependencies: diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 07d9f87eb8c..e2cda264dc8 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.13 +version: 1.0.14-dev groups: shared library: true dependencies: diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 9a2027d0706..b146ce5bc91 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 1.0.13 +version: 1.0.14-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index d29bd36dd83..6ec41bbcc04 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.13 +version: 1.0.14-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index e618abb068b..6677c74eed4 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.13 +version: 1.0.14-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index e9d46c074e8..cd9e70bba8c 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.13 +version: 1.0.14-dev groups: shared library: true dependencies: diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index 9e4717670a7..fbe63f0da01 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 1.0.13 +version: 1.0.14-dev groups: shared library: true dependencies: diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index b3ed91c0926..250f729ab5f 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.13 +version: 1.0.14-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 4b66bd8ad92..b327c25a3d9 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 2.0.0 +version: 2.0.1-dev groups: shared library: true dependencies: null diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index 8d8b1b8ee54..76c408c2920 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.13 +version: 1.0.14-dev groups: shared library: true dependencies: diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 998a94f4bbf..0c756e1edbb 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.13 +version: 1.0.14-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 66fd8af358e..7752975faea 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 3.0.0 +version: 3.0.1-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index ee53e55fe41..ec8e2cb9932 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.0.13 +version: 1.0.14-dev groups: - swift - queries From 1ac6c3751bea31c12d6c6be156d04ec2c1f144c0 Mon Sep 17 00:00:00 2001 From: Andrew Eisenberg Date: Wed, 4 Dec 2024 11:41:40 -0800 Subject: [PATCH 9/9] Update action.yml to use artifacts@v4 v3 is getting deprecated. --- go/actions/test/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/actions/test/action.yml b/go/actions/test/action.yml index 5228f440971..0a4f13fa0ef 100644 --- a/go/actions/test/action.yml +++ b/go/actions/test/action.yml @@ -59,7 +59,7 @@ runs: - name: Upload qhelp markdown if: inputs.run-code-checks == 'true' && !cancelled() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: qhelp-markdown path: go/qhelp-out/**/*.md