mirror of
https://github.com/github/codeql.git
synced 2026-04-28 18:25:24 +02:00
Merge pull request #15655 from yoff/python/support-model-editor
Python: Support model editor
This commit is contained in:
22
python/ql/test/modelling/FrameworkModeEndpoints.expected
Normal file
22
python/ql/test/modelling/FrameworkModeEndpoints.expected
Normal file
@@ -0,0 +1,22 @@
|
||||
| MyPackage/Foo.py:1:1:1:9 | Class C1 | MyPackage | Foo.C1 | | | false | Foo.py | | Class |
|
||||
| MyPackage/Foo.py:2:5:2:17 | Function m1 | MyPackage | Foo.C1 | m1 | (self) | true | Foo.py | source | InstanceMethod |
|
||||
| MyPackage/Foo.py:5:5:5:20 | Function m2 | MyPackage | Foo.C1 | m2 | (self,x) | true | Foo.py | source | InstanceMethod |
|
||||
| MyPackage/Foo.py:9:5:9:14 | Function m3 | MyPackage | Foo.C1 | m3 | (x) | true | Foo.py | summary | StaticMethod |
|
||||
| MyPackage/Foo.py:13:5:13:19 | Function m4 | MyPackage | Foo.C1 | m4 | (cls,x) | true | Foo.py | summary | ClassMethod |
|
||||
| MyPackage/Foo.py:16:1:16:13 | Class C2 | MyPackage | Foo.C2 | | | false | Foo.py | | Class |
|
||||
| MyPackage/Foo.py:17:5:17:17 | Function m1 | MyPackage | Foo.C2 | m1 | (self) | false | Foo.py | | InstanceMethod |
|
||||
| MyPackage/Foo.py:20:5:20:27 | Function c2only_m1 | MyPackage | Foo.C2 | c2only_m1 | (self,x) | false | Foo.py | | InstanceMethod |
|
||||
| MyPackage/Foo.py:23:1:23:9 | Class C3 | MyPackage | Foo.C3 | | | false | Foo.py | | Class |
|
||||
| MyPackage/Foo.py:24:5:24:26 | Function get_C2_instance | MyPackage | Foo.C3 | get_C2_instance | () | false | Foo.py | | InstanceMethod |
|
||||
| MyPackage/Foo.py:31:1:31:38 | Function top_level_function | MyPackage | Foo | top_level_function | (x,y,z:) | false | Foo.py | | Function |
|
||||
| MyPackage/Foo.py:34:1:34:42 | Function func_with_fancy_args | MyPackage | Foo | func_with_fancy_args | () | false | Foo.py | | Function |
|
||||
| MyPackage/ModuleWithAll.py:2:1:2:10 | Class Foo | MyPackage | ModuleWithAll.Foo | | | false | ModuleWithAll.py | | Class |
|
||||
| MyPackage/ModuleWithAll.py:3:1:3:10 | Class Bar | MyPackage | ModuleWithAll.Bar | | | false | ModuleWithAll.py | | Class |
|
||||
| NotPackage/not_in_pacakge_lib.py:1:1:1:34 | Function not_in_pacakge_lib_func | NotPackage | | not_in_pacakge_lib_func | (x,y) | false | not_in_pacakge_lib.py | | Function |
|
||||
| NotPackage/not_in_pacakge_lib.py:1:1:1:34 | Function not_in_pacakge_lib_func | NotPackage | not_in_pacakge_lib | not_in_pacakge_lib_func | (x,y) | false | not_in_pacakge_lib.py | | Function |
|
||||
| NotPackage/not_in_pacakge_lib.py:1:1:1:34 | Function not_in_pacakge_lib_func | not_in_pacakge_lib | | not_in_pacakge_lib_func | (x,y) | false | not_in_pacakge_lib.py | | Function |
|
||||
| NotPackage/not_in_pacakge_lib.py:1:1:1:34 | Function not_in_pacakge_lib_func | not_in_pacakge_lib | not_in_pacakge_lib | not_in_pacakge_lib_func | (x,y) | false | not_in_pacakge_lib.py | | Function |
|
||||
| NotPackage/not_in_package_script.py:5:1:5:37 | Function not_in_package_script_func | NotPackage | not_in_package_script | not_in_package_script_func | (x,y) | false | not_in_package_script.py | | Function |
|
||||
| NotPackage/possibly_lib.py:4:1:4:28 | Function possibly_lib_func | NotPackage | possibly_lib | possibly_lib_func | (x,y) | false | possibly_lib.py | | Function |
|
||||
| TopLevel.py:3:1:3:38 | Function top_level_function | TopLevel | | top_level_function | (x,y,z:) | false | TopLevel.py | | Function |
|
||||
| not-valid-package/not_in_pacakge_lib_copy.py:1:1:1:34 | Function not_in_pacakge_lib_func | not_in_pacakge_lib_copy | | not_in_pacakge_lib_func | (x,y) | false | not_in_pacakge_lib_copy.py | | Function |
|
||||
24
python/ql/test/modelling/FrameworkModeEndpoints.ext.yml
Normal file
24
python/ql/test/modelling/FrameworkModeEndpoints.ext.yml
Normal file
@@ -0,0 +1,24 @@
|
||||
extensions:
|
||||
- addsTo:
|
||||
pack: codeql/python-all
|
||||
extensible: sourceModel
|
||||
data:
|
||||
# Test short form of type column
|
||||
- ["MyPackage.Foo.C1","Member[m1].ReturnValue","remote"]
|
||||
# Test long form of type column
|
||||
- ["MyPackage","Member[Foo].Member[C1].Instance.Member[m2].ReturnValue","remote"]
|
||||
|
||||
- addsTo:
|
||||
pack: codeql/python-all
|
||||
extensible: summaryModel
|
||||
data:
|
||||
# Test short form of type column
|
||||
- ["MyPackage.Foo.C1!","Member[m3]","Argument[0]","ReturnValue","value"]
|
||||
# Test long form of type column
|
||||
- ["MyPackage","Member[Foo].Member[C1].Member[m4]","Argument[0]","ReturnValue","value"]
|
||||
|
||||
- addsTo:
|
||||
pack: codeql/python-all
|
||||
extensible: typeModel
|
||||
data:
|
||||
- ["MyPackage.Foo.C2","MyPackage","Member[Foo].Member[C3].Member[get_C2_instance].ReturnValue"]
|
||||
1
python/ql/test/modelling/FrameworkModeEndpoints.qlref
Normal file
1
python/ql/test/modelling/FrameworkModeEndpoints.qlref
Normal file
@@ -0,0 +1 @@
|
||||
utils/modeleditor/FrameworkModeEndpoints.ql
|
||||
35
python/ql/test/modelling/MyPackage/Foo.py
Normal file
35
python/ql/test/modelling/MyPackage/Foo.py
Normal file
@@ -0,0 +1,35 @@
|
||||
class C1:
|
||||
def m1(self):
|
||||
print("C1.m1()")
|
||||
|
||||
def m2(self, x):
|
||||
return x
|
||||
|
||||
@staticmethod
|
||||
def m3(x):
|
||||
return x
|
||||
|
||||
@classmethod
|
||||
def m4(cls, x):
|
||||
return x
|
||||
|
||||
class C2(C1):
|
||||
def m1(self):
|
||||
print("C2.m1()")
|
||||
|
||||
def c2only_m1(self, x):
|
||||
return x
|
||||
|
||||
class C3:
|
||||
def get_C2_instance():
|
||||
return C2()
|
||||
|
||||
class C3nested:
|
||||
def m5(self, x):
|
||||
return x
|
||||
|
||||
def top_level_function(x, /, y, *, z):
|
||||
return [x, y, z]
|
||||
|
||||
def func_with_fancy_args(*args, **kwargs):
|
||||
return args, kwargs
|
||||
3
python/ql/test/modelling/MyPackage/ModuleWithAll.py
Normal file
3
python/ql/test/modelling/MyPackage/ModuleWithAll.py
Normal file
@@ -0,0 +1,3 @@
|
||||
__all__ = ['Foo']
|
||||
class Foo: pass
|
||||
class Bar: pass
|
||||
0
python/ql/test/modelling/MyPackage/__init__.py
Normal file
0
python/ql/test/modelling/MyPackage/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
def not_in_pacakge_lib_func(x, y):
|
||||
return x + y
|
||||
10
python/ql/test/modelling/NotPackage/not_in_package_script.py
Normal file
10
python/ql/test/modelling/NotPackage/not_in_package_script.py
Normal file
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import not_in_pacakge_lib
|
||||
|
||||
def not_in_package_script_func(x, y):
|
||||
return x + y
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(not_in_pacakge_lib.not_in_pacakge_lib_func(1, 2))
|
||||
print(not_in_package_script_func(3, 4))
|
||||
5
python/ql/test/modelling/NotPackage/possibly_lib.py
Normal file
5
python/ql/test/modelling/NotPackage/possibly_lib.py
Normal file
@@ -0,0 +1,5 @@
|
||||
# model editor should allow modeling the functions defined in this file, even when the
|
||||
# file is not imported explicitly.
|
||||
|
||||
def possibly_lib_func(x, y):
|
||||
return x + y
|
||||
11
python/ql/test/modelling/TopLevel.py
Normal file
11
python/ql/test/modelling/TopLevel.py
Normal file
@@ -0,0 +1,11 @@
|
||||
from MyPackage import Foo, ModuleWithAll
|
||||
|
||||
def top_level_function(x, /, y, *, z):
|
||||
return [x, y, z]
|
||||
|
||||
top_level_value = Foo.C1()
|
||||
|
||||
iC2 = Foo.C3.get_C2_instance()
|
||||
|
||||
f = ModuleWithAll.Foo()
|
||||
b = ModuleWithAll.Bar()
|
||||
@@ -0,0 +1,2 @@
|
||||
def not_in_pacakge_lib_func(x, y):
|
||||
return x + y
|
||||
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import not_in_pacakge_lib_copy
|
||||
|
||||
def not_in_package_script_func(x, y):
|
||||
return x + y
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(not_in_pacakge_lib_copy.not_in_pacakge_lib_func(1, 2))
|
||||
print(not_in_package_script_func(3, 4))
|
||||
@@ -0,0 +1,5 @@
|
||||
# model editor should allow modeling the functions defined in this file, even when the
|
||||
# file is not imported explicitly.
|
||||
|
||||
def possibly_lib_func(x, y):
|
||||
return x + y
|
||||
1
python/ql/test/modelling/options
Normal file
1
python/ql/test/modelling/options
Normal file
@@ -0,0 +1 @@
|
||||
semmle-extractor-options: -R .
|
||||
Reference in New Issue
Block a user