From de900fc3b5b72edaa9af96f3353929c69d16b86a Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 10 Apr 2026 16:09:18 +0000 Subject: [PATCH] Python: Add QL test for comprehensions with unpacking --- .../unpacking-comprehensions/test.expected | 4 ++++ .../extractor-tests/unpacking-comprehensions/test.py | 12 ++++++++++++ .../extractor-tests/unpacking-comprehensions/test.ql | 12 ++++++++++++ 3 files changed, 28 insertions(+) create mode 100644 python/ql/test/3/extractor-tests/unpacking-comprehensions/test.expected create mode 100644 python/ql/test/3/extractor-tests/unpacking-comprehensions/test.py create mode 100644 python/ql/test/3/extractor-tests/unpacking-comprehensions/test.ql diff --git a/python/ql/test/3/extractor-tests/unpacking-comprehensions/test.expected b/python/ql/test/3/extractor-tests/unpacking-comprehensions/test.expected new file mode 100644 index 00000000000..ec8cc352df4 --- /dev/null +++ b/python/ql/test/3/extractor-tests/unpacking-comprehensions/test.expected @@ -0,0 +1,4 @@ +| 3 | ListComp | +| 5 | SetComp | +| 7 | DictComp | +| 9 | GeneratorExp | diff --git a/python/ql/test/3/extractor-tests/unpacking-comprehensions/test.py b/python/ql/test/3/extractor-tests/unpacking-comprehensions/test.py new file mode 100644 index 00000000000..44c8b1ec0ba --- /dev/null +++ b/python/ql/test/3/extractor-tests/unpacking-comprehensions/test.py @@ -0,0 +1,12 @@ +# PEP 798: Unpacking in comprehensions + +flat_list = [*x for x in nested] + +flat_set = {*x for x in nested} + +merged = {**d for d in dicts} + +gen = (*x for x in nested) + +# Force the new parser (the old parser cannot handle lazy imports) +lazy import _pep798_parser_hint diff --git a/python/ql/test/3/extractor-tests/unpacking-comprehensions/test.ql b/python/ql/test/3/extractor-tests/unpacking-comprehensions/test.ql new file mode 100644 index 00000000000..23c08f720ff --- /dev/null +++ b/python/ql/test/3/extractor-tests/unpacking-comprehensions/test.ql @@ -0,0 +1,12 @@ +import python + +from Expr e +where + e.getLocation().getFile().getShortName() = "test.py" and + ( + e instanceof ListComp or + e instanceof SetComp or + e instanceof DictComp or + e instanceof GeneratorExp + ) +select e.getLocation().getStartLine(), e.toString()