Skip to content

Commit c9397a5

Browse files
authored
Merge pull request github#10950 from github/redsun82/swift-regex
Swift: extract `RegexLiteralExpr`
2 parents d8616e7 + a3b443c commit c9397a5

File tree

19 files changed

+10271
-6
lines changed

19 files changed

+10271
-6
lines changed

swift/downgrades/f6a8ee8a21fb596fa84261ddedb68c00d8457ef4/old.dbscheme

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

swift/downgrades/f6a8ee8a21fb596fa84261ddedb68c00d8457ef4/swift.dbscheme

Lines changed: 2547 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 full extraction of regex literal expressions
2+
compatibility: full
3+
regex_literal_exprs.rel: reorder regex_literal_exprs.rel (int id, string pattern, int version) id

swift/extractor/translators/ExprTranslator.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -599,4 +599,14 @@ codeql::AppliedPropertyWrapperExpr ExprTranslator::translateAppliedPropertyWrapp
599599
return entry;
600600
}
601601

602+
codeql::RegexLiteralExpr ExprTranslator::translateRegexLiteralExpr(
603+
const swift::RegexLiteralExpr& expr) {
604+
auto entry = createExprEntry(expr);
605+
auto pattern = expr.getRegexText();
606+
// the pattern has enclosing '/' delimiters, we'd rather get it without
607+
entry.pattern = pattern.substr(1, pattern.size() - 2);
608+
entry.version = expr.getVersion();
609+
return entry;
610+
}
611+
602612
} // namespace codeql

swift/extractor/translators/ExprTranslator.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ class ExprTranslator : public AstTranslatorBase<ExprTranslator> {
115115
const swift::PropertyWrapperValuePlaceholderExpr& expr);
116116
codeql::AppliedPropertyWrapperExpr translateAppliedPropertyWrapperExpr(
117117
const swift::AppliedPropertyWrapperExpr& expr);
118+
codeql::RegexLiteralExpr translateRegexLiteralExpr(const swift::RegexLiteralExpr& expr);
118119

119120
private:
120121
void fillAbstractClosureExpr(const swift::AbstractClosureExpr& expr,
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
| regex.swift:1:5:1:5 | ... | getType: | Regex<Substring> | getPattern: | a.*a | getVersion: | 1 |
2+
| regex.swift:2:5:2:5 | ... | getType: | Regex<(Substring, Substring)> | getPattern: | the number (\\d+) | getVersion: | 1 |
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// generated by codegen/codegen.py
2+
import codeql.swift.elements
3+
4+
from RegexLiteralExpr x, Type getType, string getPattern, int getVersion
5+
where
6+
x.getLocation().getFile().getName().matches("%/regex.swift") and
7+
getType = x.getType() and
8+
getPattern = x.getPattern() and
9+
getVersion = x.getVersion()
10+
select x, "getType:", getType, "getPattern:", getPattern, "getVersion:", getVersion
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
_ = /a.*a/
2+
_ = /the number (\d+)/
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from create_database_utils import *
2+
3+
run_codeql_database_create([
4+
"swiftc -enable-bare-slash-regex regex.swift -o /dev/null",
5+
], lang="swift")

swift/integration-tests/runner.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,10 @@ def execute_test(path):
3434
return subprocess.run([sys.executable, "-u", path.name], cwd=path.parent).returncode == 0
3535

3636
def skipped(test):
37-
return platform.system() != "Darwin" and "osx-only" in test.parts
37+
if platform.system() == "Darwin":
38+
return "linux-only" in test.parts
39+
else:
40+
return "osx-only" in test.parts
3841

3942

4043
def main(opts):

0 commit comments

Comments
 (0)