Skip to content

Commit aca85d7

Browse files
committed
Merge branch 'codeql-cli-2.13.3' into redsun82/swift-remove-props-from-interpolated-strings
2 parents 7aac538 + f964d19 commit aca85d7

File tree

10 files changed

+122
-8
lines changed

10 files changed

+122
-8
lines changed

go/ql/src/RedundantCode/DeadStoreOfField.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ predicate escapes(DataFlow::Node nd) {
3636
exists(SendStmt s | nd.asExpr() = s.getValue())
3737
or
3838
// if `nd` is passed to a function, then it escapes
39-
nd instanceof DataFlow::ArgumentNode
39+
nd = any(DataFlow::CallNode c).getASyntacticArgument()
4040
or
4141
// if `nd` has its address taken, then it escapes
4242
exists(AddressExpr ae | nd.asExpr() = ae.getOperand())

swift/ql/.generated.list

Lines changed: 2 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

swift/ql/.gitattributes

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,36 @@
1-
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
21
private import codeql.swift.generated.decl.EnumDecl
2+
private import codeql.swift.elements.decl.EnumCaseDecl
3+
private import codeql.swift.elements.decl.EnumElementDecl
4+
private import codeql.swift.elements.decl.Decl
35

4-
class EnumDecl extends Generated::EnumDecl { }
6+
/**
7+
* An enumeration declaration, for example:
8+
* ```
9+
* enum MyColours {
10+
* case red
11+
* case green
12+
* case blue
13+
* }
14+
* ```
15+
*/
16+
class EnumDecl extends Generated::EnumDecl {
17+
/**
18+
* Gets the `index`th enumeration element of this enumeration (0-based).
19+
*/
20+
final EnumElementDecl getEnumElement(int index) {
21+
result =
22+
rank[index + 1](int memberIndex, Decl d |
23+
d = this.getMember(memberIndex) and
24+
d instanceof EnumElementDecl
25+
|
26+
d order by memberIndex
27+
)
28+
}
29+
30+
/**
31+
* Gets an enumeration element of this enumeration.
32+
*/
33+
final EnumElementDecl getAnEnumElement() {
34+
result = this.getMember(_).(EnumCaseDecl).getElement(_)
35+
}
36+
}

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

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

swift/ql/lib/codeql/swift/generated/decl/Decl.qll

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
| enumdecl.swift:2:1:6:1 | MyColours | (EnumDecl), .getEnumElement(0) = red, .getEnumElement(1) = green, .getEnumElement(2) = yellow, .getEnumElement(3) = blue, .getType = MyColours |
2+
| enumdecl.swift:3:2:3:7 | case ... | (EnumCaseDecl), .getDeclaringDecl = MyColours, .getElement(0) = red |
3+
| enumdecl.swift:3:7:3:7 | red | (EnumElementDecl), .getDeclaringDecl = MyColours |
4+
| enumdecl.swift:4:2:4:14 | case ... | (EnumCaseDecl), .getDeclaringDecl = MyColours, .getElement(0) = green, .getElement(1) = yellow |
5+
| enumdecl.swift:4:7:4:7 | green | (EnumElementDecl), .getDeclaringDecl = MyColours |
6+
| enumdecl.swift:4:14:4:14 | yellow | (EnumElementDecl), .getDeclaringDecl = MyColours |
7+
| enumdecl.swift:5:2:5:7 | case ... | (EnumCaseDecl), .getDeclaringDecl = MyColours, .getElement(0) = blue |
8+
| enumdecl.swift:5:7:5:7 | blue | (EnumElementDecl), .getDeclaringDecl = MyColours |
9+
| enumdecl.swift:8:1:11:1 | MyContainer | (EnumDecl), .getEnumElement(0) = str, .getEnumElement(1) = pair, .getType = MyContainer |
10+
| enumdecl.swift:9:2:9:17 | case ... | (EnumCaseDecl), .getDeclaringDecl = MyContainer, .getElement(0) = str |
11+
| enumdecl.swift:9:7:9:17 | str | (EnumElementDecl), .getDeclaringDecl = MyContainer, .getParam(0) = _ |
12+
| enumdecl.swift:10:2:10:26 | case ... | (EnumCaseDecl), .getDeclaringDecl = MyContainer, .getElement(0) = pair |
13+
| enumdecl.swift:10:7:10:26 | pair | (EnumElementDecl), .getDeclaringDecl = MyContainer, .getParam(0) = x, .getParam(1) = y |
14+
| enumdecl.swift:13:1:16:1 | MyNumbers | (EnumDecl), .getEnumElement(0) = one, .getEnumElement(1) = two, .getEnumElement(2) = three, .getEnumElement(3) = four, .getType = MyNumbers |
15+
| enumdecl.swift:14:2:14:16 | case ... | (EnumCaseDecl), .getDeclaringDecl = MyNumbers, .getElement(0) = one, .getElement(1) = two |
16+
| enumdecl.swift:14:7:14:13 | one | (EnumElementDecl), .getDeclaringDecl = MyNumbers |
17+
| enumdecl.swift:14:16:14:16 | two | (EnumElementDecl), .getDeclaringDecl = MyNumbers |
18+
| enumdecl.swift:15:2:15:14 | case ... | (EnumCaseDecl), .getDeclaringDecl = MyNumbers, .getElement(0) = three, .getElement(1) = four |
19+
| enumdecl.swift:15:7:15:7 | three | (EnumElementDecl), .getDeclaringDecl = MyNumbers |
20+
| enumdecl.swift:15:14:15:14 | four | (EnumElementDecl), .getDeclaringDecl = MyNumbers |
21+
| enumdecl.swift:18:1:20:1 | MyGreek | (EnumDecl), .getEnumElement(0) = alpha, .getEnumElement(1) = beta, .getEnumElement(2) = gamma, .getEnumElement(3) = delta, .getEnumElement(4) = epsilon, .getType = MyGreek |
22+
| enumdecl.swift:19:2:19:34 | case ... | (EnumCaseDecl), .getDeclaringDecl = MyGreek, .getElement(0) = alpha, .getElement(1) = beta, .getElement(2) = gamma, .getElement(3) = delta, .getElement(4) = epsilon |
23+
| enumdecl.swift:19:7:19:7 | alpha | (EnumElementDecl), .getDeclaringDecl = MyGreek |
24+
| enumdecl.swift:19:14:19:14 | beta | (EnumElementDecl), .getDeclaringDecl = MyGreek |
25+
| enumdecl.swift:19:20:19:20 | gamma | (EnumElementDecl), .getDeclaringDecl = MyGreek |
26+
| enumdecl.swift:19:27:19:27 | delta | (EnumElementDecl), .getDeclaringDecl = MyGreek |
27+
| enumdecl.swift:19:34:19:34 | epsilon | (EnumElementDecl), .getDeclaringDecl = MyGreek |
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import swift
2+
3+
string describe(Decl d) {
4+
d instanceof EnumDecl and result = "(EnumDecl)"
5+
or
6+
d instanceof EnumCaseDecl and result = "(EnumCaseDecl)"
7+
or
8+
d instanceof EnumElementDecl and result = "(EnumElementDecl)"
9+
or
10+
result = ".getType = " + d.(EnumDecl).getType().toString()
11+
or
12+
result = ".getDeclaringDecl = " + d.getDeclaringDecl().toString()
13+
or
14+
exists(int i |
15+
result = ".getElement(" + i.toString() + ") = " + d.(EnumCaseDecl).getElement(i).toString()
16+
or
17+
result = ".getParam(" + i.toString() + ") = " + d.(EnumElementDecl).getParam(i).toString()
18+
or
19+
result = ".getEnumElement(" + i.toString() + ") = " + d.(EnumDecl).getEnumElement(i).toString()
20+
)
21+
}
22+
23+
from Decl d
24+
where d.getLocation().getFile().getName() != ""
25+
select d, strictconcat(describe(d), ", ")
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
2+
enum MyColours {
3+
case red
4+
case green, yellow
5+
case blue
6+
}
7+
8+
enum MyContainer {
9+
case str(String)
10+
case pair(x: Int, y: Int)
11+
}
12+
13+
enum MyNumbers: Int {
14+
case one = 1, two
15+
case three, four
16+
}
17+
18+
enum MyGreek {
19+
case alpha, beta, gamma, delta, epsilon
20+
}

swift/schema.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,11 @@ class Type(Element):
8080
@group("decl")
8181
class Decl(AstNode):
8282
module: "ModuleDecl"
83-
members: list["Decl"] | child
83+
members: list["Decl"] | child | desc("""
84+
Prefer to use more specific methods (such as `EnumDecl.getEnumElement`) rather than relying
85+
on the order of members given by `getMember`. In some cases the order of members may not
86+
align with expectations, and could change in future releases.
87+
""")
8488

8589
@group("expr")
8690
class Expr(AstNode):

0 commit comments

Comments
 (0)