Merge pull request #10869 from github/redsun82/swift-no-base-suffix

Swift: replace `Base` suffix with `Generated::` module
This commit is contained in:
Paolo Tranquilli
2022-10-18 14:28:08 +02:00
committed by GitHub
588 changed files with 3080 additions and 2450 deletions

View File

@@ -157,10 +157,10 @@ def get_types_used_by(cls: ql.Class) -> typing.Iterable[str]:
def get_classes_used_by(cls: ql.Class) -> typing.List[str]:
return sorted(set(t for t in get_types_used_by(cls) if t[0].isupper()))
return sorted(set(t for t in get_types_used_by(cls) if t[0].isupper() and t != cls.name))
_generated_stub_re = re.compile(r"\n*private import .*\n+class \w+ extends \w+ \{[ \n]?\}", re.MULTILINE)
_generated_stub_re = re.compile(r"\n*private import .*\n+class \w+ extends Generated::\w+ \{[ \n]?\}", re.MULTILINE)
def _is_generated_stub(file: pathlib.Path) -> bool:

View File

@@ -5,69 +5,71 @@ private import codeql.swift.generated.Raw
import {{.}}
{{/imports}}
class {{name}}Base extends Synth::T{{name}}{{#bases}}, {{.}}{{/bases}} {
{{#root}}
string toString() { none() } // overridden by subclasses
module Generated {
class {{name}} extends Synth::T{{name}}{{#bases}}, {{.}}{{/bases}} {
{{#root}}
string toString() { none() } // overridden by subclasses
string getAPrimaryQlClass() { none() } // overridden by subclasses
string getAPrimaryQlClass() { none() } // overridden by subclasses
final string getPrimaryQlClasses() { result = concat(this.getAPrimaryQlClass(), ",") }
final string getPrimaryQlClasses() { result = concat(this.getAPrimaryQlClass(), ",") }
{{name}}Base getResolveStep() { none() } // overridden by subclasses
{{name}} getResolveStep() { none() } // overridden by subclasses
final {{name}}Base resolve() {
not exists(getResolveStep()) and result = this
or
result = getResolveStep().resolve()
final {{name}} resolve() {
not exists(getResolveStep()) and result = this
or
result = getResolveStep().resolve()
}
{{/root}}
{{#final}}
override string getAPrimaryQlClass() { result = "{{name}}" }
{{/final}}
{{#properties}}
{{#type_is_class}}
{{type}} getImmediate{{singular}}({{#is_repeated}}int index{{/is_repeated}}) {
{{^ipa}}
result = Synth::convert{{type}}FromRaw(Synth::convert{{name}}ToRaw(this){{^root}}.(Raw::{{name}}){{/root}}.{{getter}}({{#is_repeated}}index{{/is_repeated}}))
{{/ipa}}
{{#ipa}}
none()
{{/ipa}}
}
final {{type}} {{getter}}({{#is_repeated}}int index{{/is_repeated}}) {
result = getImmediate{{singular}}({{#is_repeated}}index{{/is_repeated}}).resolve()
}
{{/type_is_class}}
{{^type_is_class}}
{{type}} {{getter}}({{#is_repeated}}int index{{/is_repeated}}) {
{{^ipa}}
{{^is_predicate}}result = {{/is_predicate}}Synth::convert{{name}}ToRaw(this){{^root}}.(Raw::{{name}}){{/root}}.{{getter}}({{#is_repeated}}index{{/is_repeated}})
{{/ipa}}
{{#ipa}}
none()
{{/ipa}}
}
{{/type_is_class}}
{{#is_optional}}
final predicate has{{singular}}({{#is_repeated}}int index{{/is_repeated}}) {
exists({{getter}}({{#is_repeated}}index{{/is_repeated}}))
}
{{/is_optional}}
{{#is_repeated}}
final {{type}} {{indefinite_getter}}() {
result = {{getter}}(_)
}
{{^is_optional}}
final int getNumberOf{{plural}}() {
result = count({{indefinite_getter}}())
}
{{/is_optional}}
{{/is_repeated}}
{{/properties}}
}
{{/root}}
{{#final}}
override string getAPrimaryQlClass() { result = "{{name}}" }
{{/final}}
{{#properties}}
{{#type_is_class}}
{{type}} getImmediate{{singular}}({{#is_repeated}}int index{{/is_repeated}}) {
{{^ipa}}
result = Synth::convert{{type}}FromRaw(Synth::convert{{name}}ToRaw(this){{^root}}.(Raw::{{name}}){{/root}}.{{getter}}({{#is_repeated}}index{{/is_repeated}}))
{{/ipa}}
{{#ipa}}
none()
{{/ipa}}
}
final {{type}} {{getter}}({{#is_repeated}}int index{{/is_repeated}}) {
result = getImmediate{{singular}}({{#is_repeated}}index{{/is_repeated}}).resolve()
}
{{/type_is_class}}
{{^type_is_class}}
{{type}} {{getter}}({{#is_repeated}}int index{{/is_repeated}}) {
{{^ipa}}
{{^is_predicate}}result = {{/is_predicate}}Synth::convert{{name}}ToRaw(this){{^root}}.(Raw::{{name}}){{/root}}.{{getter}}({{#is_repeated}}index{{/is_repeated}})
{{/ipa}}
{{#ipa}}
none()
{{/ipa}}
}
{{/type_is_class}}
{{#is_optional}}
final predicate has{{singular}}({{#is_repeated}}int index{{/is_repeated}}) {
exists({{getter}}({{#is_repeated}}index{{/is_repeated}}))
}
{{/is_optional}}
{{#is_repeated}}
final {{type}} {{indefinite_getter}}() {
result = {{getter}}(_)
}
{{^is_optional}}
final int getNumberOf{{plural}}() {
result = count({{indefinite_getter}}())
}
{{/is_optional}}
{{/is_repeated}}
{{/properties}}
}

View File

@@ -1,4 +1,4 @@
// generated by {{generator}}, remove this comment if you wish to edit this file
private import {{base_import}}
class {{name}} extends {{name}}Base {}
class {{name}} extends Generated::{{name}} {}

View File

@@ -425,7 +425,7 @@ def test_non_empty_cleanup(opts, generate, renderer):
test_c = opts.ql_test_output / "B.txt"
write(ql_a)
write(ql_b)
write(stub_a, "// generated\nprivate import bla\n\nclass foo extends bar {\n}\n")
write(stub_a, "// generated\nprivate import bla\n\nclass foo extends Generated::bar {\n}\n")
write(stub_b, "bar\n")
write(test_a)
write(test_b)
@@ -437,7 +437,7 @@ def test_non_empty_cleanup(opts, generate, renderer):
def test_modified_stub_still_generated(qlgen_opts, renderer):
stub = qlgen_opts.ql_stub_output / "A.qll"
write(stub, "// generated\nprivate import bla\n\nclass foo extends bar, baz {\n}\n")
write(stub, "// generated\nprivate import bla\n\nclass foo extends Generated::bar, baz {\n}\n")
with pytest.raises(qlgen.ModifiedStubMarkedAsGeneratedError):
run_generation(qlgen.generate, qlgen_opts, renderer)
@@ -445,7 +445,8 @@ def test_modified_stub_still_generated(qlgen_opts, renderer):
def test_extended_stub_still_generated(qlgen_opts, renderer):
stub = qlgen_opts.ql_stub_output / "A.qll"
write(stub,
"// generated\nprivate import bla\n\nclass foo extends bar {\n}\n\nclass other {\n other() { none() }\n}")
"// generated\nprivate import bla\n\nclass foo extends Generated::bar {\n}\n\n"
"class other {\n other() { none() }\n}")
with pytest.raises(qlgen.ModifiedStubMarkedAsGeneratedError):
run_generation(qlgen.generate, qlgen_opts, renderer)