Skip to content

Commit a86d0fc

Browse files
committed
Swift: move getAChild to a separate module
1 parent 946e1f4 commit a86d0fc

File tree

316 files changed

+436
-2398
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

316 files changed

+436
-2398
lines changed

swift/codegen/generators/qlgen.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ def generate(opts, renderer):
9999
data = schema.load(input)
100100

101101
classes = [get_ql_class(cls) for cls in data.classes]
102+
classes.sort(key=lambda cls: cls.name)
102103
imports = {}
103104

104105
for c in classes:
@@ -113,11 +114,15 @@ def generate(opts, renderer):
113114
stub = ql.Stub(name=c.name, base_import=get_import(qll, opts.swift_dir))
114115
renderer.render(stub, stub_file)
115116

116-
# for example path/to/syntax/generated -> path/to/syntax.qll
117+
# for example path/to/elements -> path/to/elements.qll
117118
include_file = stub_out.with_suffix(".qll")
118119
all_imports = ql.ImportList([v for _, v in sorted(imports.items())])
119120
renderer.render(all_imports, include_file)
120121

122+
print(include_file)
123+
renderer.render(ql.Children(classes=classes, imports=[get_import(include_file, opts.swift_dir)]),
124+
out / 'Children.qll')
125+
121126
renderer.cleanup(existing)
122127
if opts.ql_format:
123128
format(opts.codeql_binary, renderer.written)

swift/codegen/lib/ql.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,3 +92,11 @@ class ImportList:
9292
template: ClassVar = 'ql_imports'
9393

9494
imports: List[str] = field(default_factory=list)
95+
96+
97+
@dataclass
98+
class Children:
99+
template: ClassVar = 'ql_children'
100+
101+
imports: List[str] = field(default_factory=list)
102+
classes: List[Class] = field(default_factory=list)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// generated by {{generator}}
2+
3+
{{#imports}}
4+
import {{.}}
5+
{{/imports}}
6+
7+
cached
8+
Element getAChild(Element e) {
9+
not exists(e.getResolveStep()) and (
10+
none()
11+
{{#classes}}
12+
{{#properties}}
13+
{{#is_child}}
14+
or
15+
result = e.({{name}}).{{getter}}({{#is_repeated}}_{{/is_repeated}})
16+
{{/is_child}}
17+
{{/properties}}
18+
{{/classes}}
19+
)
20+
}

swift/codegen/templates/ql_class.mustache

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
// generated by {{generator}}
22

3-
{{^root}}
4-
import codeql.swift.elements.Element
5-
{{/root}}
63
{{#imports}}
74
import {{.}}
85
{{/imports}}
@@ -22,26 +19,10 @@ class {{name}}Base extends {{db_id}}{{#bases}}, {{.}}{{/bases}} {
2219
or
2320
result = getResolveStep().resolve()
2421
}
25-
26-
{{name}}Base getAChild() { none() } // overridden by subclasses, internal use only
2722
{{/root}}
2823
{{#final}}
2924
override string getAPrimaryQlClass() { result = "{{name}}" }
3025
{{/final}}
31-
{{^root}}
32-
33-
cached override Element getAChild() {
34-
none()
35-
{{#bases}}
36-
or result = {{.}}.super.getAChild()
37-
{{/bases}}
38-
{{#properties}}
39-
{{#is_child}}
40-
or result = {{getter}}({{#is_repeated}}_{{/is_repeated}})
41-
{{/is_child}}
42-
{{/properties}}
43-
}
44-
{{/root}}
4526
{{#properties}}
4627

4728
{{type}} {{getter}}({{#is_repeated}}int index{{/is_repeated}}) {

0 commit comments

Comments
 (0)