Skip to content

Commit 029d924

Browse files
authored
Merge pull request github#12580 from github/redsun82/swift-more-precise-successfully-extracted-query
Swift: make `SuccessfullyExtractedFiles.ql` more precise
2 parents 8457d45 + a131966 commit 029d924

File tree

19 files changed

+10472
-16
lines changed

19 files changed

+10472
-16
lines changed

swift/downgrades/c2f01f2beb67e5a57e9df9b6d1c51e35e8d5b0a2/old.dbscheme

Lines changed: 2601 additions & 0 deletions
Large diffs are not rendered by default.

swift/downgrades/c2f01f2beb67e5a57e9df9b6d1c51e35e8d5b0a2/swift.dbscheme

Lines changed: 2596 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
description: Revert adding file_is_successfully_extracted
2+
compatibility: full
3+
file_is_successfully_extracted.rel: delete

swift/extractor/infra/SwiftLocationExtractor.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,15 @@ void SwiftLocationExtractor::attachLocation(const swift::SourceManager& sourceMa
3030
trap.emit(LocatableLocationsTrap{locatableLabel, entry.id});
3131
}
3232

33-
void SwiftLocationExtractor::emitFile(swift::SourceFile* file) {
33+
TrapLabel<FileTag> SwiftLocationExtractor::emitFile(swift::SourceFile* file) {
3434
if (file) {
35-
fetchFileLabel(resolvePath(file->getFilename()));
35+
return emitFile(std::string_view{file->getFilename()});
3636
}
37+
return undefined_label;
38+
}
39+
40+
TrapLabel<FileTag> SwiftLocationExtractor::emitFile(const std::filesystem::path& file) {
41+
return fetchFileLabel(resolvePath(file));
3742
}
3843

3944
void SwiftLocationExtractor::attachLocation(const swift::SourceManager& sourceManager,

swift/extractor/infra/SwiftLocationExtractor.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ class SwiftLocationExtractor {
1818
public:
1919
explicit SwiftLocationExtractor(TrapDomain& trap) : trap(trap) {}
2020

21-
void emitFile(swift::SourceFile* file);
21+
TrapLabel<FileTag> emitFile(swift::SourceFile* file);
22+
TrapLabel<FileTag> emitFile(const std::filesystem::path& file);
2223

2324
template <typename Locatable>
2425
void attachLocation(const swift::SourceManager& sourceManager,

swift/extractor/main.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,14 @@ class Observer : public swift::FrontendObserver {
9595
codeql::extractExtractLazyDeclarations(state, compiler);
9696
}
9797

98+
void markSuccessfullyExtractedFiles() {
99+
codeql::SwiftLocationExtractor locExtractor{invocationTrap};
100+
for (const auto& src : state.sourceFiles) {
101+
auto fileLabel = locExtractor.emitFile(src);
102+
invocationTrap.emit(codeql::FileIsSuccessfullyExtractedTrap{fileLabel});
103+
}
104+
}
105+
98106
private:
99107
codeql::SwiftExtractorState state;
100108
codeql::TrapDomain invocationTrap{invocationTrapDomain(state)};
@@ -195,5 +203,9 @@ int main(int argc, char** argv) {
195203
int frontend_rc = swift::performFrontend(configuration.frontendOptions, "swift-extractor",
196204
(void*)main, &observer);
197205

206+
if (frontend_rc == 0) {
207+
observer.markSuccessfullyExtractedFiles();
208+
}
209+
198210
return frontend_rc;
199211
}

swift/ql/.generated.list

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -378,14 +378,14 @@ ql/lib/codeql/swift/generated/DbLocation.qll b9baea963d9fa82068986512c0649d10508
378378
ql/lib/codeql/swift/generated/Diagnostics.qll d2ee2db55e932dcaee95fcc1164a51ffbe1a78d86ee0f50aabb299b458462afe 566d554d579cadde26dc4d1d6b1750ca800511201b737b629f15b6f873af3733
379379
ql/lib/codeql/swift/generated/Element.qll 9caf84a1da2509f5b01a22d6597126c573ae63ec3e8c6af6fd6fcc7ead0b4e82 70deb2238509d5ed660369bf763c796065d92efd732469088cdf67f68bacd796
380380
ql/lib/codeql/swift/generated/ErrorElement.qll 4b032abe8ffb71376a29c63e470a52943ace2527bf7b433c97a8bf716f9ad102 4f2b1be162a5c275e3264dbc51bf98bce8846d251be8490a0d4b16cbc85f630f
381-
ql/lib/codeql/swift/generated/File.qll 61454459f5f1ae378bd4970ad1da4f39f3e696bac8a5eebdd162f131995c5316 3e6805f8858cd55dd0e0d0e5aeab923d6a55292dbf98b0029db1ae0208efe684
381+
ql/lib/codeql/swift/generated/File.qll f88c485883dd9b2b4a366080e098372912e03fb3177e5cae58aa4449c2b03399 0333c49e3a11c48e6146a7f492ee31ac022d80150fc3f8bfafc3c8f94d66ff76
382382
ql/lib/codeql/swift/generated/Locatable.qll bdc98b9fb7788f44a4bf7e487ee5bd329473409950a8e9f116d61995615ad849 0b36b4fe45e2aa195e4bb70c50ea95f32f141b8e01e5f23466c6427dd9ab88fb
383383
ql/lib/codeql/swift/generated/Location.qll 851766e474cdfdfa67da42e0031fc42dd60196ff5edd39d82f08d3e32deb84c1 b29b2c37672f5acff15f1d3c5727d902f193e51122327b31bd27ec5f877bca3b
384384
ql/lib/codeql/swift/generated/OtherAvailabilitySpec.qll 0e26a203b26ff0581b7396b0c6d1606feec5cc32477f676585cdec4911af91c5 0e26a203b26ff0581b7396b0c6d1606feec5cc32477f676585cdec4911af91c5
385-
ql/lib/codeql/swift/generated/ParentChild.qll 87c955fbd71e8c720b306b8dc43db354a120a4f984404f83b4dfea4dc8969380 6f7464ecd8ca04b6aa261139b36a162e5b0636237d514b8431ef4f97a1c603dc
385+
ql/lib/codeql/swift/generated/ParentChild.qll 0ac2139b8b2e172858262d80950a0212b21fe46bf6af7259d9058fb7193f8242 6f7464ecd8ca04b6aa261139b36a162e5b0636237d514b8431ef4f97a1c603dc
386386
ql/lib/codeql/swift/generated/PlatformVersionAvailabilitySpec.qll f82d9ca416fe8bd59b5531b65b1c74c9f317b3297a6101544a11339a1cffce38 7f5c6d3309e66c134107afe55bae76dfc9a72cb7cdd6d4c3706b6b34cee09fa0
387387
ql/lib/codeql/swift/generated/PureSynthConstructors.qll 173c0dd59396a1de26fe870e3bc2766c46de689da2a4d8807cb62023bbce1a98 173c0dd59396a1de26fe870e3bc2766c46de689da2a4d8807cb62023bbce1a98
388-
ql/lib/codeql/swift/generated/Raw.qll 180dc0f5d34c2e88eb864dca9ef4be0a768583fdad98e737716e031caa355a39 8561938ad09551dc45ad6b3946d599fce1839985a6f61cee63a6dd463dd14a12
388+
ql/lib/codeql/swift/generated/Raw.qll efe60f045f8a4aecedd7bfe8110c0c10539bcdcb9f17f342cf560c8d065e6aff 261825907250bb4ddeba8ccce0df29b45f13c6fb338eb41a06ea6b43e7aa9788
389389
ql/lib/codeql/swift/generated/Synth.qll af02e0b49fe7b488592687996cc74d9525d4e3fbc9d324820b310b356f4d2612 5c740a660721173e9e4e45eb701d373ca19ff14d61cdaea309b65871e0deea90
390390
ql/lib/codeql/swift/generated/SynthConstructors.qll a1b3ca33017f82124286ccad317a05484fee144fb9c3cdd2e500ce38e5efcec4 a1b3ca33017f82124286ccad317a05484fee144fb9c3cdd2e500ce38e5efcec4
391391
ql/lib/codeql/swift/generated/UnknownFile.qll 0fcf9beb8de79440bcdfff4bb6ab3dd139bd273e6c32754e05e6a632651e85f6 0fcf9beb8de79440bcdfff4bb6ab3dd139bd273e6c32754e05e6a632651e85f6
@@ -661,7 +661,7 @@ ql/test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo.ql 6e06e2226
661661
ql/test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo_getSpec.ql 44ccccad28d8648aa3349d9290bd1478bb021797c26bc2f8c1e3de14a42be3bd aefab61b6fa1c06c5c79d337cffb61335dca74ef9906deba12f7eaea42f9ac14
662662
ql/test/extractor-tests/generated/Comment/MISSING_SOURCE.txt 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7
663663
ql/test/extractor-tests/generated/Diagnostics/Diagnostics.ql 6a4a9480cc929381e0337b181e5ac519a7abc6d597ebe24fb6701acf79ced86f 199c5bf8bd38e161d989e0e4db1ea1d3ddcb4d7cf571afd9112ce3ed8d9b8d2a
664-
ql/test/extractor-tests/generated/File/File.ql ab0968ae31b749da2b66462bd04e4dfb30604dba405a84594b575abfc4fa4c35 bcc0ff648b28c5ecd567e196e700272883756bbcc65296bbb880a979e3162628
664+
ql/test/extractor-tests/generated/File/File.ql 17a26e4f8aeaf3d4a38e6eb18f5d965cd62b63671b84edcd068808b4f3a999df 009a1338750bf95f715b303ac3e6a6e827c82aec2068299a97b0585ce76e9239
665665
ql/test/extractor-tests/generated/OtherAvailabilitySpec/MISSING_SOURCE.txt 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7
666666
ql/test/extractor-tests/generated/PlatformVersionAvailabilitySpec/MISSING_SOURCE.txt 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7
667667
ql/test/extractor-tests/generated/decl/AccessorDecl/AccessorDecl.ql 5c017af7e6b16ee68990eec12affe81eb114338bac4d445f4b231fe0f110eccc db86c828a892b0acd150a780914e7e48c280cad473d3680a453bdee03aee1e9d

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,12 @@ module Generated {
99
* Gets the name of this file.
1010
*/
1111
string getName() { result = Synth::convertFileToRaw(this).(Raw::File).getName() }
12+
13+
/**
14+
* Holds if this file is successfully extracted.
15+
*/
16+
predicate isSuccessfullyExtracted() {
17+
Synth::convertFileToRaw(this).(Raw::File).isSuccessfullyExtracted()
18+
}
1219
}
1320
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ module Raw {
4242
* Gets the name of this file.
4343
*/
4444
string getName() { files(this, result) }
45+
46+
/**
47+
* Holds if this file is successfully extracted.
48+
*/
49+
predicate isSuccessfullyExtracted() { file_is_successfully_extracted(this) }
4550
}
4651

4752
class Locatable extends @locatable, Element {

swift/ql/lib/swift.dbscheme

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ files(
7272
string name: string ref
7373
);
7474

75+
#keyset[id]
76+
file_is_successfully_extracted(
77+
int id: @file ref
78+
);
79+
7580
@locatable =
7681
@argument
7782
| @ast_node

0 commit comments

Comments
 (0)