Skip to content

Commit d6aad13

Browse files
committed
Swift: make codegen run when no registry is there
1 parent 76db5f2 commit d6aad13

File tree

5 files changed

+30
-5
lines changed

5 files changed

+30
-5
lines changed

swift/codegen/lib/render.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -171,12 +171,16 @@ def _hash_string(data: str) -> str:
171171
return h.hexdigest()
172172

173173
def _load_registry(self):
174-
with open(self._registry_path) as reg:
175-
for line in reg:
176-
filename, prehash, posthash = line.split()
177-
self._hashes[pathlib.Path(filename)] = self.Hashes(prehash, posthash)
174+
try:
175+
with open(self._registry_path) as reg:
176+
for line in reg:
177+
filename, prehash, posthash = line.split()
178+
self._hashes[pathlib.Path(filename)] = self.Hashes(prehash, posthash)
179+
except FileNotFoundError:
180+
pass
178181

179182
def _dump_registry(self):
183+
self._registry_path.parent.mkdir(parents=True, exist_ok=True)
180184
with open(self._registry_path, 'w') as out:
181185
for f, hashes in sorted(self._hashes.items()):
182186
print(f, hashes.pre, hashes.post, file=out)

swift/codegen/test/test_render.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,23 @@ def test_managed_render(pystache_renderer, sut):
7575
mock.call.render_name(data.template, data, generator=paths.exe_file.relative_to(paths.swift_dir)),
7676
]
7777

78+
def test_managed_render_with_no_registry(pystache_renderer, sut):
79+
data = mock.Mock(spec=("template",))
80+
text = "some text"
81+
pystache_renderer.render_name.side_effect = (text,)
82+
output = paths.swift_dir / "some/output.txt"
83+
registry = paths.swift_dir / "a/registry.list"
84+
85+
with sut.manage(generated=(), stubs=(), registry=registry) as renderer:
86+
renderer.render(data, output)
87+
assert renderer.written == {output}
88+
assert_file(output, text)
89+
90+
assert_file(registry, f"some/output.txt {hash(text)} {hash(text)}\n")
91+
assert pystache_renderer.mock_calls == [
92+
mock.call.render_name(data.template, data, generator=paths.exe_file.relative_to(paths.swift_dir)),
93+
]
94+
7895

7996
def test_managed_render_with_post_processing(pystache_renderer, sut):
8097
data = mock.Mock(spec=("template",))

swift/ql/.generated.list

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,7 @@ ql/lib/codeql/swift/generated/Synth.qll 90df85be365c89c3c2e22041ee7dc9dd2ad9194b
385385
ql/lib/codeql/swift/generated/SynthConstructors.qll 5c91f09bd82728651ed61f498704e0f62847788fa986dec5e674d81f294076c7 5c91f09bd82728651ed61f498704e0f62847788fa986dec5e674d81f294076c7
386386
ql/lib/codeql/swift/generated/UnknownFile.qll 0fcf9beb8de79440bcdfff4bb6ab3dd139bd273e6c32754e05e6a632651e85f6 0fcf9beb8de79440bcdfff4bb6ab3dd139bd273e6c32754e05e6a632651e85f6
387387
ql/lib/codeql/swift/generated/UnknownLocation.qll e50efefa02a0ec1ff635a00951b5924602fc8cab57e5756e4a039382c69d3882 e50efefa02a0ec1ff635a00951b5924602fc8cab57e5756e4a039382c69d3882
388-
ql/lib/codeql/swift/generated/UnspecifiedElement.qll dbc6ca4018012977b26ca184a88044c55b0661e3998cd14d46295b62a8d69625 184c9a0ce18c2ac881943b0fb400613d1401ed1d5564f90716b6c310ba5afe71
388+
ql/lib/codeql/swift/generated/UnspecifiedElement.qll a3a73f53c492adc6655fb88b40b1bd9b2c9d365fc5c019b3233c01d6110fb3f2 ba77cd5272cffd1d3aad8bea69786b97aec0c93a4b59a070d621fe2d21c2e90c
389389
ql/lib/codeql/swift/generated/decl/AbstractFunctionDecl.qll 8255b24dddda83e8a7dee9d69a4cf9883b5a7ae43676d7242b5aab5169f68982 407c7d63681fb03ad6cb4ea3c2b04be7ccb5ddbe655a8aec4219eb3799bc36e8
390390
ql/lib/codeql/swift/generated/decl/AbstractStorageDecl.qll 66147ad36cefce974b4ae0f3e84569bd6742ea2f3e842c3c04e6e5cbd17e7928 ce7c2347e2dfe0b141db103ccb8e56a61d286476c201aebe6a275edd7fca2c0f
391391
ql/lib/codeql/swift/generated/decl/AbstractTypeParamDecl.qll 1e268b00d0f2dbbd85aa70ac206c5e4a4612f06ba0091e5253483635f486ccf9 5479e13e99f68f1f347283535f8098964f7fd4a34326ff36ad5711b2de1ab0d0

swift/ql/lib/codeql/swift/generated/UnspecifiedElement.qll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ import codeql.swift.elements.Element
55
import codeql.swift.elements.ErrorElement
66

77
module Generated {
8+
/**
9+
* bla
10+
*/
811
class UnspecifiedElement extends Synth::TUnspecifiedElement, ErrorElement {
912
override string getAPrimaryQlClass() { result = "UnspecifiedElement" }
1013

swift/schema.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class ErrorElement(Locatable):
4040

4141
@use_for_null
4242
class UnspecifiedElement(ErrorElement):
43+
"""bla"""
4344
parent: optional[Element]
4445
property: string
4546
index: optional[int]

0 commit comments

Comments
 (0)